台灣最大程式設計社群網站
∣
免費加入會員
∣登入
∣回首頁∣
您好
線上人數
1368
會員總數:
246227
討論主題:
189787
討論區
程式下載/上傳
科技新聞
專欄文章
會員中心
加值服務
外包接案
求職求才
登入
登出
歡迎您
免費
加入會員
討論區選單
新手必讀
我要提問!!
討論區
個人討論區
我的關注主題
我的黑名單
討論區EP英雄榜
專家等級說明
討論區常見問題
兌換發問點數QP
扣點申請加值服務
申請版主
開發工具
ASP
ASP.NET
C#
VB.NET
VB6
C/C++
PHP
Java
Java Script/ Node.js
AJAX / JSON / jQuery
其他語言
行動裝置開發
Android APP 開發
iOS APP/ swift 開發
Windows Phone APP
資料庫
ACCESS
MS SQL
MySQL
Oracle
其他DB
多媒體 / 網管
CSS/HTML5/Bootstarp
影像處理
office VBA / WinOS
Windows 伺服器
Linux / Unix
網管 / 資安 / VM
硬體 / 週邊 / 其他
綜合
求職求才
外包接案
心情甘苦談
網站經營 / 合夥 / 證照
建言 / 公告
文章區
專欄文章
科技新聞
Blog精華文章
討論區列表
>>
C/C++
>> 熱建 問題
[]
[
我要回覆
]
熱建 問題
價值 : 50 QP
點閱數:345 回應數:0
樓主
黃宏軒
0
8
122
4
發送站內信
class HotKey : IMessageFilter, IDisposable { [System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern UInt32 GlobalAddAtom(String lpString); [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk); [System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom); [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern UInt32 UnregisterHotKey(IntPtr hWnd, UInt32 id); IntPtr _hWnd = IntPtr.Zero; UInt32 _hotKeyID; Keys _hotKey = Keys.None; Keys _comboKey = Keys.None; public HotKey(IntPtr formHandle, Keys hotKey, Keys comboKey) { _hWnd = formHandle; //Form Handle, 註冊系統熱鍵需要用到這個 _hotKey = hotKey; //熱鍵 _comboKey = comboKey; //組合鍵, 必須設定Keys.Control, Keys.Alt, Keys.Shift, Keys.None以及Keys.LWin等值才有作用 UInt32 uint_comboKey; //由於API對於組合鍵碼的定義不一樣, 所以我們這邊做個轉換 switch (comboKey) { case Keys.Alt: uint_comboKey = 0x1; break; case Keys.Control: uint_comboKey = 0x2; break; case Keys.Shift: uint_comboKey = 0x4; break; case Keys.LWin: uint_comboKey = 0x8; break; default: //沒有組合鍵 uint_comboKey = 0x0; break; } _hotKeyID = GlobalAddAtom(Guid.NewGuid().ToString()); //向系統取得一組id RegisterHotKey((IntPtr)_hWnd, _hotKeyID, uint_comboKey, (UInt32)hotKey); //使用Form Handle與id註冊系統熱鍵 Application.AddMessageFilter(this); //使用HotKey類別來監視訊息 } public delegate void HotkeyEventHandler(object sender, HotKeyEventArgs e); //HotKeyEventArgs是自訂事件參數 public event HotkeyEventHandler OnHotkey; //自訂事件 const int WM_GLOBALHOTKEYDOWN = 0x312; //當按下系統熱鍵時, 系統會發送的訊息 public bool PreFilterMessage(ref Message m) { if (OnHotkey != null && m.Msg == WM_GLOBALHOTKEYDOWN && (UInt32)m.WParam == _hotKeyID) //如果接收到系統熱鍵訊息且id相符時 { OnHotkey(this, new HotKeyEventArgs(_hotKey, _comboKey)); //呼叫自訂事件, 傳遞自訂參數 return true; //並攔截這個訊息, Form將不再接收到這個訊息 } return false; } private bool disposed = false; public void Dispose() { if (!disposed) { UnregisterHotKey(_hWnd, _hotKeyID); //取消熱鍵 GlobalDeleteAtom(_hotKeyID); //刪除id OnHotkey = null; //取消所有關聯的事件 Application.RemoveMessageFilter(this); //不再使用HotKey類別監視訊息 GC.SuppressFinalize(this); disposed = true; } } ~HotKey() { Dispose(); } } public class HotKeyEventArgs : EventArgs { private Keys _hotKey; public Keys HotKey //熱鍵 { get { return _hotKey; } private set { } } private Keys _comboKey; public Keys ComboKey //組合鍵 { get { return _comboKey; } private set { } } public HotKeyEventArgs(Keys hotKey, Keys comboKey) { _hotKey = hotKey; _comboKey = comboKey; } } HotKey hotkey1, hotkey2, hotkey3, hotkey4, hotkey5, hotkey6, hotkey7, hotkey8, hotkey9, hotkey10, hotkey11, hotkey12, hotkey13;
hotkey13 = new HotKey(this.Handle, Keys.F12, Keys.None); //註冊 F12 為熱鍵 hotkey13.OnHotkey += new HotKey.HotkeyEventHandler(btn_OCR1); //獨立事件 hotkey13.OnHotkey += new HotKey.HotkeyEventHandler(hotkey13_OnHotkey); //獨立事件
有遇到一個問題 運用這個程式 f1~f11 都沒問題但f12(上面為f12的註冊的程式碼)就沒有回應
請問各位大大能幫忙小弟解惑嗎? 感謝大家觀看
搜尋相關Tags的文章:
[ hotkey f12 註冊問題 ] ,
本篇文章發表於2020-05-26 09:30
目前尚無任何回覆
回覆
如要回應,請先
登入
.
|
網站導覽
|
網站介紹
|
4P點數說明
|
電子報
|
小舖活動
|
大事紀
|
廣告刊登
|
常見問題
|
聯絡我們
|
版權所有 ©copyright 2000 All Rights Reserved