gpt4 book ai didi

c++ - 通过鼠标钩子(Hook)激活鼠标下的窗口

转载 作者:行者123 更新时间:2023-11-30 02:08:30 24 4
gpt4 key购买 nike

基本上我在 hook 中创建了 mousestruct

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 不会读取应该指示新窗口悬停的消息(或者带钩子(Hook)的 dll 没有发送它,我不知道)

此外,如果窗口与另一个窗口重叠,并且它们都是有效窗口,应该在悬停后激活,我会闪烁,因为 autoit 不断尝试在循环中激活当前窗口和重叠的窗口

有没有我可能错过或可能做错的地方?

最佳答案

最简单的方法就是使用 Windows 内置的工具。例如在 Windows 7 上它看起来像这样:

enter image description here

此功能也存在于旧版本的 Windows 中,但没有在如此简单的界面中公开。相反,您必须使用 PowerToy 或通过 SystemParametersInfo 进行设置。 .

作为Raymond Chen explains ,这是用户偏好,未经用户同意不得更改。

关于c++ - 通过鼠标钩子(Hook)激活鼠标下的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com