国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

按下某組鍵(HotKey)便執行某程式

2019-11-18 17:52:55
字體:
來源:轉載
供稿:網友
在Dos的年代,我們常會以攔截中斷向量的方式,做到按下某個hotkey而自動執行某個程式,在Window呢,也可以,不過它是用RegisterHotkeyAPI來完成。

使用RegisterHotkey的概念是,它會定義一組按鍵的組合,當使用者不管在哪個程式之中,按下Window有注冊的HotKey時,OS會傳送WM_HOTKEY的訊息給待接收該訊息的Window,而該Window收到WM_HOTKEY時,便可知道有本身Thread所定義的HotKey被按下,於是可以從wParam,lParam來得知是哪一組HotKey被按下。

RegisterHotKey(
ByValhwndAsLong,//接收Hotkey的Window
ByValidHotKeyasLong,//identifierofhotkey,range0x0000through0xBFFF
ByValModifiersAsLong,//定義altshiftcontrol等的組合
ByValuVirtKeyAsLong//virtual-keycode
)

WM_HOTKEY叁數的定義
idHotKey=wParam;//identifierofhotkey
Modifiers=(UINT)LOWord(lParam);//key-modifierflags
uVirtKey=(UINT)HIWORD(lParam);//virtual-keycode

所以了,除了設定RegisterHotkey外,另要使用SubClassing的技巧才會得知HotKey被按下;最後,程式結束前要使用UnRegisterHotkey將HotKey的定義取消掉。

以下程式功能是:不管在哪個程式中,只要按下ALT-SHIFT-G便執行NotePad。
'以下在.BasOptionExplicit

DeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"_
(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
DeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"_
(ByValhwndAsLong,ByValnIndexAsLong)AsLong
DeclareFunctionCallWindowModifiers=MOD_ALT MOD_SHIFT
uVirtKey=vbKeyG
ret=RegisterHotKey(Me.hwnd,idHotKey,Modifiers,uVirtKey)
EndSub

PrivateSubForm_Unload(CancelAsInteger)
DimretAsLong
'取消Message的截取,而使之又只送往原來的WindowProcedure
ret=SetWindowLong(Me.hwnd,GWL_WNDPROC,preWinProc)
CallUnregisterHotKey(Me.hwnd,uVirtKey)
EndSub->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辰溪县| 峡江县| 岑溪市| 二连浩特市| 漯河市| 冀州市| 荣昌县| 香河县| 邛崃市| 探索| 贵定县| 大宁县| 青冈县| 定远县| 大连市| 吴堡县| 横峰县| 望江县| 沽源县| 长治市| 蒙自县| 拜城县| 灌云县| 静乐县| 莱芜市| 青冈县| 新巴尔虎右旗| 绵竹市| 大姚县| 汉阴县| 河东区| 新绛县| 大石桥市| 绿春县| 木兰县| 宜兰市| 泸州市| 高邑县| 金湖县| 禹城市| 宁阳县|