Что нового

[Элементы GUI] События мыши на форме Gui

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Как реализовать такое
Щелкаешь мышью на форме - и тебе выдаются координаты формы, где был клик?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Vlasssov [?]
Щелкаешь мышью на форме
Окно свое или чужое?
На чужом, наверное, так попробовать можно:
Код:
#include <WinAPIEx.au3>
#include <Misc.au3>

HotKeySet('{ESC}', '_Quit')

$Struct = DllStructCreate($tagPoint)
$fYes = True

While 1
	If _IsPressed('01') Then
		If $fYes Then
			_Get_Pos()
			$hHandle = _WinAPI_WindowFromPoint($Struct)
			$tWINDOWINFO = _WinAPI_GetWindowInfo($hHandle)
			$sClass = _WinAPI_GetClassName($hHandle)
			ToolTip('Handle: ' & $hHandle & @LF & 'ClassName: ' & $sClass & @LF & _
					'Title: ' & WinGetTitle(_WinAPI_GetAncestor($hHandle, $GA_ROOT)) & @LF & _
					'Left: ' & DllStructGetData($tWINDOWINFO, 'rWindow', 1) & @LF & _
					'Top: ' & DllStructGetData($tWINDOWINFO, 'rWindow', 2) & @LF & _
					'Right: ' & DllStructGetData($tWINDOWINFO, 'rWindow', 3) & @LF & _
					'Bottom: ' & DllStructGetData($tWINDOWINFO, 'rWindow', 4), 0, 0)
			;и так работает:
			$aPos = WinGetPos($hHandle)
			ConsoleWrite('Handle: ' & $hHandle & @CR & 'ClassName: ' & $sClass & @CR & _
					'Title: ' & WinGetTitle(_WinAPI_GetAncestor($hHandle, $GA_ROOT)) & @CR & _
					'X: ' & $aPos[0] & @CR & 'Y: ' & $aPos[1] & @CR & 'Width: ' & $aPos[2] & @CR & _
					'Height: ' & $aPos[3] & @CR & '--------------------------------' & @CR)
			$fYes = False
		EndIf
	Else
		$fYes = True
	EndIf
	Sleep(100)
WEnd

Func _Quit()
	Exit
EndFunc   ;==>_Quit

Func _Get_Pos()
	DllStructSetData($Struct, "x", MouseGetPos(0))
	DllStructSetData($Struct, "y", MouseGetPos(1))
EndFunc   ;==>_Get_Pos
WinAPIEx.au3
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Можно попробывать еще так
Код:
#Include <Misc.au3>

While 1
if _IsPressed(04) then

$var = WinList()

For $i = 1 to $var[0][0]
	
  If $var[$i][0] <> "" AND  IsVisible($var[$i][1]) Then
	$aPos = WinGetPos($var[$i][0],"")
    MsgBox(0, "Параметры", "Заголовок Окна=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1] & @CRLF & _ 
		  "X: " & $aPos[0] & "  Y: " & $aPos[2] & "  Ширина: " & $aPos[2] & "  Высота: " & $aPos[3] & @CRLF)
	
  EndIf
Next

EndIf
WEnd

Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 8) Then 
    Return 1
  Else
    Return 0
  EndIf
EndFunc


Щелчок по средней кнопки мыши будет показывать результат
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Да с чужим-то все понятно - своё...
 

VladUs

Скриптер
Сообщения
621
Репутация
181
edward_freedom [?]
Добавь пожалуйста цвет
Код:
#Include <Misc.au3>

While 1
if _IsPressed(04) then

$var = WinList()

For $i = 1 to $var[0][0]
    
  If $var[$i][0] <> "" AND  IsVisible($var[$i][1]) Then
    $aPos = WinGetPos($var[$i][0],"")
    MsgBox(0, "Параметры", "Заголовок Окна=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1] & @CRLF & _ 
          "X: " & $aPos[0] & "  Y: " & $aPos[2] & "  Ширина: " & $aPos[2] & "  Высота: " & $aPos[3] & @CRLF & _
		   "Цвет под курсором:  "  &  _Color() )
    
  EndIf
Next

EndIf
WEnd

Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 8) Then 
    Return 1
  Else
    Return 0
  EndIf
EndFunc


Func _Color()
$Pos =  MouseGetPos()
$Pix = PixelGetColor ($Pos[0] , $Pos[1] )
Return "0x" & Hex($Pix) 
EndFunc
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Код:
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Global $x, $y
global $press
$press =0
Example()

Func Example()
	Local $msg

	HotKeySet("{Esc}", "GetPos")

	GUICreate("Press Esc to Get Pos", 400, 400)
	$x = GUICtrlCreateLabel("0", 10, 10, 50)
	$y = GUICtrlCreateLabel("0", 10, 30, 50)
	$xk = GUICtrlCreateLabel("0", 10, 40, 50)
	$yk = GUICtrlCreateLabel("0", 10, 50, 50)

	GUISetState()

	; Run the GUI until the dialog is closed
	Do
		$msg = GUIGetMsg()
	Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit

		Case $GUI_EVENT_PRIMARYDOWN
            GetPos()
			if $press = 1 then $press = 0 else $press = 1
			
    EndSwitch


	Until $msg = $GUI_EVENT_CLOSE
EndFunc   ;==>Example

Func GetPos()
	Local $a
	$a = GUIGetCursorInfo()
	if $press = 1 Then
		GUICtrlSetData($x, $a[0])
		GUICtrlSetData($y, $a[1])
		Else
		GUICtrlSetData($xk, $a[0])
		GUICtrlSetData($yk, $a[1])
		EndIf
EndFunc


Событие формы - нажатие мыши, $GUI_EVENT_PRIMARYDOWN
Координаты - GUIGetCursorInfo()
 
Верх