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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 顺义区| 老河口市| 滁州市| 安平县| 区。| 桐乡市| 黄梅县| 天柱县| 合川市| 杭州市| 文山县| 石城县| 雷州市| 庆云县| 景泰县| 永仁县| 武城县| 阳新县| 专栏| 永靖县| 达尔| 蒙阴县| 永胜县| 沿河| 怀宁县| 庆阳市| 泗水县| 西和县| 鄯善县| 太和县| 大同县| 镇安县| 拉萨市| 洛南县| 大冶市| 五峰| 罗江县| 克什克腾旗| 荃湾区| 孟州市| 巴林右旗|