#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> #include <Misc.au3> ; #Region Vars Part Global Const $WM_EXITSIZEMOVE = 0x232 Global Const $WM_MOUSEWHEEL = 0x020A Global Const $SC_MOVE = 0xF010 Global Const $SC_SIZE = 0xF000 Global $hUser32_Dll = DllOpen("User32.dll") Global $iMoveWithCursor = False Global $aOld_Mouse_Pos = MouseGetPos() Global $iOld_DragFullWindows_Opt = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop", "DragFullWindows") Global $aBk_Colors[11] = [10, 0xFFFF80, 0x80BFFF, 0xBFDFDF, 0xAEAE00, 0xD50000, 0xFF8000, 0x00FFFF, 0xFF0000, 0x8000FF, 0x0000FF] Global $aTransparency[11] = [10, 230, 200, 170, 140, 110, 80, 50, 40, 30, 20] Global $iCurrent_Bk_Color = 1 Global $iCurrent_Transparency = 5 #EndRegion Vars Part ; #Region GUI Part $hBk_GUI = GUICreate("Reading Ruler Demo", 600, 300, -1, -1, BitOR($WS_POPUP, $WS_SIZEBOX), $WS_EX_TOPMOST) WinSetTrans($hBk_GUI, "", $aTransparency[$iCurrent_Transparency]) GUISetBkColor($aBk_Colors[$iCurrent_Bk_Color], $hBk_GUI) GUISetCursor(0, 1, $hBk_GUI) $hLine_GUI = GUICreate("", 602, 10, 0, 300-20, $WS_POPUP, $WS_EX_TOPMOST, $hBk_GUI) GUISetBkColor(0x4A4A4A, $hLine_GUI) $aBkGUI_Pos = WinGetPos($hBk_GUI) WinMove($hLine_GUI, "", $aBkGUI_Pos[0]+2, ($aBkGUI_Pos[1]+$aBkGUI_Pos[3])-13) GUISetState(@SW_SHOW, $hBk_GUI) GUISetState(@SW_SHOW, $hLine_GUI) GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL") GUIRegisterMsg($WM_MOVE, "WM_MOVE") GUIRegisterMsg($WM_SIZE, "WM_MOVE") GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST") GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO") GUIRegisterMsg($WM_EXITSIZEMOVE, "WM_EXITSIZEMOVE") GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND") #EndRegion GUI Part ; While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch If $iMoveWithCursor Then $aMouse_Pos = MouseGetPos() If $aMouse_Pos[0] <> $aOld_Mouse_Pos[0] Or $aMouse_Pos[1] <> $aOld_Mouse_Pos[1] Then $aOld_Mouse_Pos = $aMouse_Pos WinMove($hBk_GUI, "", $aMouse_Pos[0]-10, $aMouse_Pos[1]-10) EndIf EndIf WEnd Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam) Switch $wParam Case 0x00780000 ;Wheel Up $iCurrent_Bk_Color += 1 If $iCurrent_Bk_Color >= $aBk_Colors[0] Then $iCurrent_Bk_Color = 1 GUISetBkColor($aBk_Colors[$iCurrent_Bk_Color], $hBk_GUI) Case 0xFF880000 ;Wheel Down $iCurrent_Transparency += 1 If $iCurrent_Transparency > $aTransparency[0] Then $iCurrent_Transparency = 1 WinSetTrans($hBk_GUI, "", $aTransparency[$iCurrent_Transparency]) EndSwitch EndFunc Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam) Local $iRet = _WinAPI_DefWindowProc($hWnd, $iMsg, $wParam, $lParam) If ($iRet < 10 Or $iRet > 18) And _IsPressed("01", $hUser32_Dll) Then $iMoveWithCursor = Not $iMoveWithCursor If $iRet = 1 Then Return 2 Return $iRet EndFunc Func WM_MOVE($hWnd, $MsgID, $wParam, $lParam) $aBkGUI_Pos = WinGetPos($hBk_GUI) $aLineGUI_Pos = WinGetPos($hLine_GUI) GUIRegisterMsg($WM_MOVE, "") GUIRegisterMsg($WM_SIZE, "") GUIRegisterMsg($WM_NCHITTEST, "") GUIRegisterMsg($WM_GETMINMAXINFO, "") If $hWnd = $hBk_GUI Then WinMove($hLine_GUI, "", $aBkGUI_Pos[0]+2, ($aBkGUI_Pos[1]+$aBkGUI_Pos[3])-13, $aBkGUI_Pos[2]-5) Else WinMove($hBk_GUI, "", $aLineGUI_Pos[0]-2, ($aLineGUI_Pos[1]-$aBkGUI_Pos[3])+13) EndIf GUIRegisterMsg($WM_MOVE, "WM_MOVE") GUIRegisterMsg($WM_SIZE, "WM_MOVE") GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST") GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO") EndFunc Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam) Switch BitAND($wParam, 0xFFF0) Case $SC_SIZE, $SC_MOVE Local Const $SPI_SETDRAGFULLWINDOWS = 37 Local Const $SPI_GETDRAGFULLWINDOWS = 38 Local Const $SPIF_SENDWININICHANGE = 2 DllCall("User32.dll", "int", "SystemParametersInfo", _ "int", $SPI_SETDRAGFULLWINDOWS, "int", 1, "ptr", 0, "int", $SPIF_SENDWININICHANGE) EndSwitch EndFunc Func WM_EXITSIZEMOVE($hWnd, $iMsg, $wParam, $lParam) DllCall("user32.dll", "int", "SystemParametersInfo", "int", 37, "int", $iOld_DragFullWindows_Opt, "ptr", 0, "int", 2) EndFunc Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam) If $hWnd <> $hBk_GUI Then Return $GUI_RUNDEFMSG Local $MINGuiX = 600, $MINGuiY = 300, $MAXGuiX = @DesktopWidth, $MAXGuiY = @DesktopHeight Local $stMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam) DllStructSetData($stMinMaxInfo, 7, $MINGuiX) ; min X DllStructSetData($stMinMaxInfo, 8, $MINGuiY) ; min Y DllStructSetData($stMinMaxInfo, 9, $MAXGuiX) ; max X DllStructSetData($stMinMaxInfo, 10, $MAXGuiY) ; max Y Return $GUI_RUNDEFMSG EndFunc |