想注册一个指定窗口激活时才生效的热键, 看到_WinAPI_RegisterHotKey( $hWnd, $ID, $iModifiers, $vkCode )_WinAPI_RegisterHotKey( $hWnd, $ID, $iModifiers, $vkCode )
$hWnd
接收热键产生的WM_HOTKEY消息的窗体句柄. 该参数为0时, WM_HOTKEY消息传递给调用线程的消息队列且必须在消息循环中执行.
$ID
指定热键标识. 应用程序须指定一个从0x0000到0xBFFF的id值
$iModifiers
指定用于生成WM_HOTKEY消息需要按下的键与$vkCode参数指定的键的结合. $iModifiers参数可为下列值组合:
$MOD_ALT - 同时按下Alt键
$MOD_CONTROL - 同时按下Ctrl键
$MOD_SHIFT - 同时按下Shift键
$MOD_WIN - 同时按下Win键
$MOD_NOREPEAT - 改变热键操作以便键盘自动回复不会产生多个热键通知(需要Windows 7以上)
$vkCode
指定热键的虚拟键代码($VK_...)
结果发现还是全局的热键, 窗口非激活状态时依然生效.
那这个$hWnd还有什么意义呢?
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Global Const $WM_HOTKEY = 0x0312
Global $hGui
$hGui = GUICreate("test")
GUISetState()
GUIRegisterMsg($WM_HOTKEY, 'WM_HOTKEY')
;~ 设置ALT-D
_WinAPI_RegisterHotKey($hGui, 0x0144, $MOD_ALT+$MOD_NOREPEAT, 0x44)
While GUIGetMsg()+3
WEnd
Func WM_HOTKEY($hWnd, $Msg, $wParam, $lParam)
ToolTip('You pressed ALT-D')
EndFunc ;==>WM_HOTKEY
Func OnAutoItExit()
_WinAPI_UnregisterHotKey($hGui, 0x0144)
EndFunc ;==>OnAutoItExit
|