В основном я делаю мышиную структуру в крючке
MOUSEHOOKSTRUCT* str;
Затем делаю это из lparam,
LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam )
{
str = (MOUSEHOOKSTRUCT *) lParam;
...
Затем я ловлю движения мыши
case WM_MOUSEMOVE:
wParm = AU3_WM_MOUSEMOVE;
fromp = WindowFromPoint(str->pt);
Затем проверяю ипопытаться не отправлять много сообщений ...
if (fromp != currentwindow)
{
currentwindow= fromp;
PostMessage(m_hHwndMouse, wParm,(WPARAM)( (MOUSEHOOKSTRUCT*) lParam )->hwnd, LPARAM(fromp));
}
break;
Это отправляет сообщение mousemove вместе с hwnd моему приложению autoit, которое проверяет hwnd, и, если этот hwnd не активен, оно активирует его.
Func mouse_func($hWndGUI, $MsgID, $wParam, $lParam)
Select
Case $MsgID = $WM_AUTOITMOUSEMOVE
If GUICtrlRead($activateundermouse) = 1 And $sitting = 0 Then
;Local $starttime = _Timer_Init()
If StringInStr(WinGetTitle($lParam), "ID=") Then
If Not WinActive($lParam) Then
;ConsoleWrite("HOVERING NEW, Activate It: " & WinGetTitle($lParam) & @LF)
WinActivate($lParam)
EndIf
;ConsoleWrite("diff is > " & _Timer_Diff($starttime) & @LF)
EndIf
EndIf
Вот так я активирую окно, которое наводит мышь, но проблема в том, что редко autoit не читает сообщение, которое должно сигнализировать о новом окне (или dll с hook не отправил его, я не знаю)
Также, если окно перекрывает другое окно, и оба они являются действительными окнами, которые должны быть активированы после наведения, у меня мерцает, поскольку autoit постоянно пытается активировать текущее и перекрывающееся окно в цикле
Есть что-то, что, возможно, я пропустил или мог делать неправильно здесь