|
发表于 2012-4-5 12:30:59
|
显示全部楼层
本帖最后由 happytc 于 2012-4-5 12:40 编辑
没董楼上的意思,我是说为什么注册同样的热键也能成功。
按道理来说f1这热键被注册了,在没有注销的情况下 ...
kxing 发表于 2012-4-5 11:58
很多时候,要深入理解呀,要多看MSDN的东西才行!
Au3的HotKeySet函数,其实是调用API里的两个函数:RegisterHotKey和UnRegisterHotKey
函数原型:BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk);
当某键被接下时,系统在所有的热键中寻找匹配者。一旦找到一个匹配的热键,系统将把WM_HOTKEY消息传递给登记了该热键的线程的消息队列。若hWnd参数标识的窗口已用与id参数定义的相同的标识符登记了一个热键,则参数fsModifiers和vk的新值将替代这些参数先前定义的值。
也就是RegisterHotKey去系统注册热键时,只发现了一个hWnd参数标识的窗口和id标识符(因为au3只有一个主线程,RegisterHotKey只发现唯一创建该热键线程(也就是au3主线程),于是将热键同au3主线程创建的窗口关联起。也就是你发现的以下两句:
msgbox(0,'',hotkeyset("^+{a}","_1"))
msgbox(0,'',hotkeyset("^+{a}","_2"))
返回值都是“1”的原因了。
也就是当有当一个热键有已有相同的hWnd参数标识的窗口和id标识符时,它会把热键绑定在新的函数上,也就上面你给的"_2()"函数上,但RegisterHotKey会注册成功。 |
评分
-
查看全部评分
|