oMBRa Posted August 16, 2008 Share Posted August 16, 2008 How to Highlight control like Au3info does? Link to comment Share on other sites More sharing options...
oMBRa Posted August 16, 2008 Author Share Posted August 16, 2008 no one know?? and how to draw on the screen? Link to comment Share on other sites More sharing options...
rasim Posted August 17, 2008 Share Posted August 17, 2008 oMBraExample:expandcollapse popup#include <WinAPI.au3> #include <GDIPlus.au3> #include <WindowsConstants.au3> HotKeySet("{Esc}", "_Exit") Global $LastHwnd = 0 _GDIPlus_Startup() While 1 $hWnd = _ControlGetHovered() If $hWnd Then FrameRect($hWnd) Sleep(10) WEnd Func _ControlGetHovered() Local $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1)) If ($aRet[0] <> 0) And ($aRet[0] <> $LastHwnd) Then _WinAPI_RedrawWindow($LastHwnd, 0, 0, $RDW_INVALIDATE) $LastHwnd = $aRet[0] Return HWnd($aRet[0]) EndIf EndFunc Func FrameRect($hWnd) Local $hGraphic, $hPen, $iWidth, $iHeight $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd) $hPen = _GDIPlus_PenCreate(0xA1FF0000, 6) $iWidth = _WinAPI_GetClientWidth($hWnd) $iHeight = _WinAPI_GetClientHeight($hWnd) _GDIPlus_GraphicsDrawRect($hGraphic, 0, 0, $iWidth, $iHeight, $hPen) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_PenDispose($hPen) EndFunc Func _Exit() _WinAPI_RedrawWindow($LastHwnd, 0, 0, $RDW_INVALIDATE) _GDIPlus_Shutdown() Exit EndFuncoÝ÷ ØLZ^~º&lÊÂæ¡Ûjëh×6#include <GuiConstants.au3> #include <EditConstants.au3> #include <WindowsConstants.au3> #include <Misc.au3> Opt("GuiOnEventMode", 1) HotKeySet("{ESC}", "QuitApp") Global $hSquare_GUI = -1 Global $hCtrl = -1 Global $Last_hControl = -1 Global $Frame_Color = 0xFF0000 Global $Frame_Width = 3 $Main_GUI = GuiCreate("Highlight Controls Demo") GUISetOnEvent($GUI_EVENT_CLOSE, "QuitApp") GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED") GUICtrlCreateButton("Button", 20, 20) GUICtrlCreateCheckbox("CheckBox", 20, 60) GUICtrlCreateLabel("Info: ", 20, 150) GUICtrlSetFont(-1, 9, 800) $Info_Edit = GUICtrlCreateEdit("", 80, 150, 300, 220, $GUI_SS_DEFAULT_EDIT+$ES_READONLY) GUISetState() While 1 Sleep(10) ;So the CPU will not increes "badly" while we play with the mouse cursor :) _IdleWait() If _IsPressed(1) Then GUIDeleteSquare($hSquare_GUI) While _IsPressed(1) Sleep(10) Check_Highlight_Controls_Proc() WEnd $Last_hControl = -1 EndIf Check_Highlight_Controls_Proc() WEnd Func Check_Highlight_Controls_Proc() Local $hCtrl = _ControlGetHovered() If $hCtrl <> 0 And $Last_hControl <> $hCtrl And $hSquare_GUI <> $hCtrl Then $Last_hControl = $hCtrl Local $aCtrlPos = WinGetPos($hCtrl) GUICtrlSetData($Info_Edit, _ "X = " & $aCtrlPos[0] & @CRLF & _ "Y = " & $aCtrlPos[1] & @CRLF & _ "W = " & $aCtrlPos[2] & @CRLF & _ "H = " & $aCtrlPos[3] & @CRLF & @CRLF & _ "Control/Win Class Name: " & _WinGetClassName($hCtrl) & @CRLF & _ "Control/Win Handle: " & $hCtrl & @CRLF & _ "Control ID: " & _HwndToID($hCtrl) & @CRLF & @CRLF & _ "Control Data:" & @CRLF & ControlGetText($hCtrl, "", "")) GUIDeleteSquare($hSquare_GUI) $hSquare_GUI = GUICreateSquare($aCtrlPos[0], $aCtrlPos[1], $aCtrlPos[2], $aCtrlPos[3]) EndIf EndFunc Func GUICreateSquare($i_X=-1, $i_Y=-1, $i_W=-1, $i_H=-1) Local $hSquare_GUI = GUICreate("", $i_W, $i_H, $i_X, $i_Y, $WS_POPUP, $WS_EX_TOOLWINDOW+$WS_EX_TOPMOST) GUISetBkColor($Frame_Color) _GUISetHole($hSquare_GUI, $Frame_Width, $Frame_Width, $i_W - ($Frame_Width * 2), $i_H - ($Frame_Width * 2)) GUISetState(@SW_SHOWNOACTIVATE, $hSquare_GUI) Return $hSquare_GUI EndFunc Func GUIDeleteSquare($hSquare_GUI) If IsHWnd($hSquare_GUI) And $hSquare_GUI <> $Main_GUI Then GUIDelete($hSquare_GUI) EndFunc Func _ControlGetHovered() Local $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1)) If Not IsArray($aRet) Then Return SetError(1, 0, 0) Return HWnd($aRet[0]) EndFunc Func _HwndToID($hWnd) If Not IsHWnd($hWnd) Then Return SetError(1, 0, "") Local $aRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hWnd) If Not IsArray($aRet) Then Return SetError(2, 0, "") Return $aRet[0] EndFunc Func _WinGetClassName($hWnd) $aClassName = DLLCall("user32.dll", "int", "GetClassName", "hWnd", $hWnd, "str", "", "int", 64) If Not @error And $aClassName[0] <> 0 Then Return $aClassName[2] Return "" EndFunc Func _GUISetHole($hWin, $i_X, $i_Y, $i_SizeW, $i_SizeH) Local $aWinPos, $Outer_Rgn, $Inner_Rgn, $Wh, $Combined_Rgn Local Const $RGN_DIFF = 4 $aWinPos = WinGetPos($hWin) $Outer_Rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", $aWinPos[2], "long", $aWinPos[3]) $Inner_Rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $i_Y, "long", $i_Y, "long", $i_Y + $i_SizeW, _ "long", $i_Y + $i_SizeH) $Combined_Rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", 0, "long", 0) DllCall("gdi32.dll", "long", "CombineRgn", "long", $Combined_Rgn[0], "long", $Outer_Rgn[0], "long", $Inner_Rgn[0], _ "int", $RGN_DIFF) DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $hWin, "long", $Combined_Rgn[0], "int", 1) EndFunc Func _IdleWait($IdleSec=0) Local $iSave, $stLastInput = DllStructCreate("uint;dword") DllStructSetData($stLastInput, 1, DllStructGetSize($stLastInput)) DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($stLastInput)) Do $iSave = DllStructGetData($stLastInput, 2) Sleep(20) DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($stLastInput)) Until (DllStructGetData($stLastInput, 2) - $iSave) > $IdleSec Return DllStructGetData($stLastInput, 2) - $iSave EndFunc Func WM_WINDOWPOSCHANGED($hWndGUI, $MsgID, $WParam, $LParam) If $hWndGUI <> $Main_GUI Then Return $GUI_RUNDEFMSG GUIDeleteSquare($hSquare_GUI) Check_Highlight_Controls_Proc() $Last_hControl = -1 EndFunc Func QuitApp() Exit EndFuncAlso see here Link to comment Share on other sites More sharing options...
oMBRa Posted August 19, 2008 Author Share Posted August 19, 2008 (edited) How u know what dll open, return type, functione etc.??... anyway both script work fine but the 1 one rasim make a square around desktop that wont delete Edited August 19, 2008 by oMBra Link to comment Share on other sites More sharing options...
zorphnog Posted August 19, 2008 Share Posted August 19, 2008 User MSDN for API information, http://msdn.microsoft.com/en-us/library/aa139672.aspx. Link to comment Share on other sites More sharing options...
oMBRa Posted August 19, 2008 Author Share Posted August 19, 2008 I said DllCall etc Link to comment Share on other sites More sharing options...
rasim Posted August 20, 2008 Share Posted August 20, 2008 oMBraHelp Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now