如何做到在任何一个程式之下,按下某个HotKey组合键,便将我们的视窗Activate起来,
这便得使用 WM_SETHOTKEY 来达成
WM_SETHOTKEY所需的叁数如下:
wParam = (WPARAM) MAKEWORD(vkey, modifiers)
lParam = 0
vkey 指的是virtual-key code,它是在低位元组,modifier是以下四种键的组合,它是
在高位元组。
HOTKEYF_ALT ALT key
HOTKEYF_CONTROL CTRL key
HOTKEYF_EXT Extended key
HOTKEYF_SHIFT SHIFT
SendMessage()的传回值有以下的意义:
-1 hotkey 设定不对
0 hWnd的指定有误
1 成功,而且没有其他window的HotKey与之相同
2 成功,但有其他window的HotKey与之相同
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_SETHOTKEY = &H32
Const HOTKEYF_SHIFT = &H1
Const HOTKEYF_CONTROL = &H2
Const HOTKEYF_ALT = &H4
Const HOTKEYF_EXT = &H8
Private Type tInteger
aint As Integer
End Type
Private Type t2Byte
lByte As Byte
hByte As Byte
End Type
Private ii As tInteger
Private bb As t2Byte
Private Sub Command1_Click()
Dim wParam As Long, I As Long
'设定ctl-shift-T 为该window的hotkey
bb.hByte = HOTKEYF_CONTROL Or HOTKEYF_SHIFT
bb.lByte = vbKeyT
LSet ii = bb
wParam = CLng(ii.aint)
I = SendMessage(Me.hwnd, WM_SETHOTKEY, wParam, 0)
If I = 1 Then
Debug.Print "Ctl-Shift-T 为hotkey"
Else
If I = 2 Then
Debug.Print "有其他Window也用Ctl-Shift-T当Hotkey"
Else
Debug.Print "指定失败"
End If
End If
End Sub
