Что нового

Как узнать, на каком окне сторонней программы установлен фокус?

Suppir

Продвинутый
Сообщения
967
Репутация
62
Запускаем, допустим, IE. У него вверху два поля ввода: поле адреса и поле поиска. Как узнать, на каком поле в данным момент стоит курсор пользователя?

(Нужно решение, работающее не только для IE, но и для других сторонних программ).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Suppir,
Попробуйте так:
Код:
#include <WinAPIEx.au3>

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

While 1
	$t_Point = _WinAPI_GetMousePos()
	$hHandle = _WinAPI_WindowFromPoint($t_Point)
	$hWin = _WinAPI_GetAncestor($hHandle, $GA_ROOT)
	$sClassW = _WinAPI_GetClassName($hWin)
	$sFoc = ControlGetFocus($hWin)
	If $hHandle = $hWin Then
		$sMessage = 'Class Window: ' & $sClassW & @LF & 'Title Window: ' & WinGetTitle($hWin) & _
				@LF & 'Focus: ' & $sFoc
	Else
		$sClassC = _WinAPI_GetClassName($hHandle)
		$sID = _WinAPI_GetDlgCtrlID($hHandle)
		$sMessage = 'ID Control: ' & $sID & @LF & 'Class Control: ' & $sClassC & @LF & _
				'Class Window: ' & $sClassW & @LF & 'Title Window: ' & WinGetTitle($hWin) & _
				@LF & 'Focus: ' & $sFoc
	EndIf
	ToolTip($sMessage, 0, 0)
	Sleep(50)
WEnd

Func _Quit()
	Exit
EndFunc   ;==>_Quit
 

VladUs

Скриптер
Сообщения
621
Репутация
181
В библиотеке WinAPIEx.au3, есть пример на функцию _WinAPI_GetGUIThreadInfo()
Функция возвращает дескриптор окна, которое имеет фокус клавиатуры и дескриптор окна, которое захватило мышь, и еще некоторые другие параметры...
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Шикарно работает, спасибо! :laugh:
 
Верх