我试图find一种方法来检测焦点何时改变到另一个窗口(无需轮询每个X毫秒)。
我已经想出了一种方法来检测何时在使用WH_SHELL和HSHELL_ACTIVATESHELLWINDOW的应用程序之间切换焦点。
问题是我想检测焦点是否在同一个应用程序中的对话框/窗口之间切换。
即。 在记事本中,我可以确定应用程序何时切换到记事本,但由于焦点仍在同一个应用程序中,因此无法检测何时显示“打开”或“保存”对话框。
如何在C#和Windows 7中设置音量?
我应该扔哪个Pythonexception?
如何在没有IDE焦点的情况下自动上传外部更改的文件
如何以编程方式检查Windows计算机上打开的浏览器实例?
通过单击并拖动控件来移动窗口
信号处理期间堆损坏
如何将特定的文件扩展名与我的应用程序关联?
窗口API创build快捷方式,并把应用程序在开始菜单
我如何批量重命名文件?
OSError:subprocess中的参数无效
您可以使用SetWindowsHookEx与WH_CBT挂钩类型。 如果您只想检测应用程序中的焦点更改,请将GetCurrentThreadId()作为最后一个参数,否则挂钩将用于当前桌面上的所有线程。
请注意,使用windows挂钩可能会对系统性能产生不利影响,因此只能在必要时安装挂钩,并且应该在挂钩过程中执行最少量的工作。
对不起,延迟,我没有在这台计算机上安装VS,所以有点难以找到代码。
使用它来把你的代码挂接到系统中。
HHOOK oldShellHook = SetWindowsHookEx(WH_SHELL,BCK_WndShellProc,hDll,NULL); if (!info->oldShellHook) { MessageBox(m_hwnd,L"Failed to load global hook.",strTitle,MB_OK | MB_ICONERROR); return; }
这是你的钩子。 根据你在做什么,使用nMsg来确定何时应用你的定制逻辑。
LRESULT CALLBACK BCK_WndShellProc(int nMsg,WPARAM wParam,LPARAM lParam) { ... }
请阅读SetWindowsHookEx()的MSDN文档以确保您返回期望的值,否则可以锁定整个系统。
我使用的代码类似于我的面包屑杀手和痉挛 (显示开始菜单上的所有程序)程序,它似乎工作正常。
“基于计算机的培训API”如何? SetWindowsHookEx与WH_CBT这将使您能够接收HCBT_SETFOCUS ( 等 )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。