土人的拙作《如何用API函數定義熱鍵》在VB編程樂園發表後,很多網友紛紛來信,有的指出其中存在的問題並提出解決方的案(土人在此表示感謝!);有的則詢問可不可以定義組合鍵等問題。土人不才,通過多方查找資料,才找到另一種定義熱鍵的方法,在此把心得寫出來,請各位網友指正!
三個API函數是必須的:
RegisterHotKey——用於定義熱鍵
UnregisterHotKey——用於注銷熱鍵
PeekMessage——用於檢測熱鍵(尚有其它的主要用途)
這裡舉個實例:程序啟動後窗體不可見,按下Ctrl F12窗體彈出來。本例僅需要一個窗體,在PWin98、VB6.0企業版下調試通過。
'申明API函數
PrivateDeclareFunctionRegisterHotKeyLib"user32"(ByValhWndAsLong,ByValidAsLong,ByValfsModifiersAsLong,ByValvkAsLong)AsLong
PrivateDeclareFunctionUnregisterHotKeyLib"user32"(ByValhWndAsLong,ByValidAsLong)AsLong
PrivateDeclareFunctionPeekMessageLib"user32"Alias"PeekMessageA"(lpMsgAsMsg,ByValhWndAsLong,ByValwMsgFilterMinAsLong,ByValwMsgFilterMaxAsLong,ByValwRemoveMsgAsLong)AsLong
PrivatebCancelAsBoolean'用於熱鍵有效與否的變量
'全局變量
PrivateConstMOD_ALT=&H1
PrivateConstMOD_CONTROL=&H2
PrivateConstMOD_SHIFT=&H4
PrivateConstPM_REMOVE=&H1
PrivateConstWM_HOTKEY=&H312
PrivateTypeMsg'定義Message類型
hWndAsLong
MessageAsLong
wParamAsLong
lParamAsLong
timeAsLong
EndType
PrivateSubproMsg()'聲明進程
DimMessageAsMsg
'循環直到bCancel為真
DoWhileNotbCancel
'檢測到熱鍵被按下則令窗體隱藏
IfPeekMessage(Message,Me.hWnd,WM_HOTKEY,WM_HOTKEY,PM_REMOVE)Then
Me.Visible=True
EndIf
DoEvents
Loop
EndSub
PrivateSubForm_Load()'窗體加載時初始化程序
DimretAsLong
bCancel=False
'定義熱鍵為Ctrl F12
ret=RegisterHotKey(Me.hWnd,&HBFFF&,MOD_CONTROL,vbKeyF12)
Me.Visible=False'窗體不可見
proMsg
EndSub
'退出時注銷熱鍵
PrivateSubForm_Unload(CancelAsInteger)
bCancel=True
CallUnregisterHotKey(Me.hWnd,&HBFFF&)
EndSub->