#Include <GUIConstantsEx.au3>
#Include <GUISlider.au3>
#Include <SliderConstants.au3>
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>
Global Const $TB_LINEUP = 0
Global Const $TB_LINEDOWN = 1
Global Const $TB_PAGEUP = 2
Global Const $TB_PAGEDOWN = 3
Global Const $TB_THUMBPOSITION = 4
Global Const $TB_THUMBTRACK = 5
Global Const $TB_TOP = 6
Global Const $TB_BOTTOM = 7
Global Const $TB_ENDTRACK = 8
Global $Pos = -1
$hForm = GUICreate('MyGUI', 400, 100)
$Slider = GUICtrlCreateSlider(20, 10, 360, 30)
$hSlider = GUICtrlGetHandle($Slider)
GUIRegisterMsg($WM_HSCROLL, 'WM_HSCROLL')
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_HSCROLL($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hForm
Switch $lParam
Case $hSlider
If $Pos <> -1 Then
_GUICtrlSlider_SetPos($hSlider, $Pos)
Else
Switch $wParam
Case $TB_PAGEUP, $TB_PAGEDOWN
$aInfo = GUIGetCursorInfo()
If (IsArray($aInfo)) And ($aInfo[2]) And ($aInfo[4] = $Slider) Then
$aRect = _GUICtrlSlider_GetChannelRect($hSlider)
$aRange = _GUICtrlSlider_GetRange($hSlider)
If (IsArray($aRect)) And (IsArray($aRange)) Then
$X = _WinAPI_GetMousePosX(1, $hSlider)
If $X < $aRect[0] Then
$X = $aRect[0]
EndIf
If $X > $aRect[2] Then
$X = $aRect[2]
EndIf
$Pos = Round(($X - $aRect[0]) / ($aRect[2] - $aRect[0]) * ($aRange[1] - $aRange[0] + 1))
If $Pos > -1 Then
_GUICtrlSlider_SetPos($hSlider, $Pos)
Else
$Pos = -1
EndIf
EndIf
EndIf
EndSwitch
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_HSCROLL
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Local $hTarget = DllStructGetData($tNMHDR, 'hWndFrom')
Local $ID = DllStructGetData($tNMHDR, 'Code')
Switch $hWnd
Case $hForm
Switch $hTarget
Case $hSlider
Switch $ID
Case $NM_RELEASEDCAPTURE
$Pos = -1
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY