- Сообщения
- 8,673
- Репутация
- 2,486
WSWR [?]
Для мышки $hWindows не предназначено, т.к в момент блокировния всё ровно фокус переместить на другое окно нельзя. Хотя это можно обойти если проверять окно под курсором.Подстановка в функцию {MPDOWN}, {MPUP} и т.д. не меняет поведение скрипта
Код:
#include <BlockInputEx.au3>
HotKeySet("{ESC}", "_Quit") ;This will trigger an exit (on the Notepad's window).
Global $iMark = 0
Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
WinWait("[REGEXPCLASS:Notepad.*]")
$hNotepad_Wnd = WinGetHandle("[REGEXPCLASS:Notepad.*]")
;This is only for testing, so if anything go wrong, the script will exit after 10 seconds.
AdlibRegister("_Quit", 10000)
While 1
If $iMark = 0 And _WinGetHoveredHandle() = $hNotepad_Wnd Then
$iMark = 1
_BlockInputEx(2, "", "{MPDOWN}|{MPUP}|{MSDOWN}|{MSUP}")
ElseIf $iMark = 1 And _WinGetHoveredHandle() <> $hNotepad_Wnd Then
$iMark = 0
_BlockInputEx(0)
EndIf
Sleep(10)
WEnd
Func _Quit()
Exit
EndFunc
Func _WinGetHoveredHandle()
Local $iOld_Opt_MCM = Opt("MouseCoordMode", 1)
Local $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
Opt("MouseCoordMode", $iOld_Opt_MCM)
$aRet = DllCall("User32.dll", "hwnd", "GetAncestor", "hwnd", $aRet[0], "uint", 2) ;$GA_ROOT
Return HWnd($aRet[0])
EndFunc