国产探花免费观看_亚洲丰满少妇自慰呻吟_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->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亳州市| 宁乡县| 宁远县| 米脂县| 沈丘县| 开原市| 澳门| 南漳县| 当涂县| 永兴县| 旬阳县| 沁源县| 武陟县| 南华县| 宜宾市| 元氏县| 汉中市| 平塘县| 桃园市| 嘉祥县| 天气| 南川市| 天长市| 元阳县| 正镶白旗| 湘乡市| 晴隆县| 盐津县| 莱州市| 扶余县| 望谟县| 临猗县| 雅江县| 饶阳县| 博罗县| 巴青县| 类乌齐县| 河津市| 青铜峡市| 图木舒克市| 封开县|