高深问题,如何检测快捷键被哪个程序占用

Jenf_Mu 2010-07-11 09:16:40
比如,我现在开着QQ,它占用着一个快捷键ctrl+alt+z,我自己做一个软件,在上面检测ctrl+alt+z,当然可以注册全局快捷键,返回失败,可以通过getlasterror,只能得到该快捷键被其它程序占用的消息,并不能知道是哪个程序占用了,我想知道是被哪个程序占用的。有什么办法吗?
...全文
3657 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahao 2010-07-12
  • 打赏
  • 举报
回复
做个系统全局hook,监视WM_HOTKEY
可能可以
zhouzhipen 2010-07-12
  • 打赏
  • 举报
回复
在系统内部一定有一个列表维护着这些全局热键,所以还是有可能的。
MoXiaoRab 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zwfgdlc 的回复:]
C/C++ code
SendMessage(hWnd, WM_GETHOTKEY, NULL, NULL)


HTML code

The return value is the virtual-key code and modifiers for the hot key, or NULL if no hot key is associated with the window. T……
[/Quote]

正解
jianmin09 2010-07-12
  • 打赏
  • 举报
回复
同问~
blpluto 2010-07-12
  • 打赏
  • 举报
回复
如果程序运行监控的还有可能,但如果直接想获取这个~~~~

到底系统在什么地方维护这个表呢!~~~~我也想知道~~~持续关注
zhangwuji154 2010-07-12
  • 打赏
  • 举报
回复
ls,我用你的方法试了,可得到的结果都是0啊
IranCyberArmy 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhangwuji154 的回复:]
第一个参数是窗口句柄吧,但有的程序没有窗口怎么办?
还有,用spy++我得到一个句柄的数值形式,如何赋给HWND,我记得Borland C++ Builder 6.0里好像这样是行的啊

HWND hwd = 0X000E0108;
VS2008/Visual Studio 2008里就不行了。
[/Quote]
HWND hwd = (HWND)0X000E0108;
DWORD dw = ::SendMessage(hwd, WM_GETHOTKEY, NULL, NULL);
WORD h = HIWORD(dw);
WORD l = LOWORD(dw);
zhangwuji154 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zwfgdlc 的回复:]

C/C++ code
SendMessage(hWnd, WM_GETHOTKEY, NULL, NULL)

HTML code

The return value is the virtual-key code and modifiers for the hot key, or NULL if no hot key is associated with the window. The ……
[/Quote]
第一个参数是窗口句柄吧,但有的程序没有窗口怎么办?
还有,用spy++我得到一个句柄的数值形式,如何赋给HWND,我记得Borland C++ Builder 6.0里好像这样是行的啊

HWND hwd = 0X000E0108;
VS2008/Visual Studio 2008里就不行了。
zhangwuji154 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tr0j4n 的回复:]

引用 2 楼 zwfgdlc 的回复:
C/C++ code
SendMessage(hWnd, WM_GETHOTKEY, NULL, NULL)


HTML code

The return value is the virtual-key code and modifiers for the hot key, or NULL if no hot key is associa……
[/Quote]
难道要遍历程序?
zhangwuji154 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 z4none 的回复:]

这个软件好像是你说的效果.
但是不知道如何实现的..

http://www.appinn.com/ghotkey/
[/Quote]
这个软件是不错,知道它的原理吗,不过有些情况检测的不准或不能得出正确结果,如我的QQ截屏是Ctrl+Scroll Lock,给出来的是unknown
还有一些切出输入法的快捷键,虽然可能这的确不是全局快捷键,但输入法程序是时刻开启的,在有输入法主程序的地方,只要按那个快捷键,就能切出相应的输入法,效果也类似于全局快捷键。例如ctrl+space
z4none 2010-07-12
  • 打赏
  • 举报
回复
这个软件好像是你说的效果.
但是不知道如何实现的..

http://www.appinn.com/ghotkey/
zwfgdlc 2010-07-11
  • 打赏
  • 举报
回复
SendMessage(hWnd, WM_GETHOTKEY, NULL, NULL)


The return value is the virtual-key code and modifiers for the hot key, or NULL if no hot key is associated with the window. The virtual-key code is in the low byte of the return value and the modifiers are in the high byte. The modifiers can be a combination of the following flags.


HOTKEYF_ALT ALT key
HOTKEYF_CONTROL CTRL key
HOTKEYF_EXT Extended key
HOTKEYF_SHIFT SHIFT key
sunyouhao 2010-07-11
  • 打赏
  • 举报
回复
ctrl,alt是系统级的
z 等是线程级的,
这个可能么,关注,等待高手。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧