用途:註冊全域性組合快捷鍵和快捷鍵呼叫的方法
需要系統鉤子,網上有很多方法
下面介紹封裝快捷鍵和註冊快捷鍵方法
快捷鍵服務,主要用來監控按鍵、匹配快捷鍵和觸發匹配快捷鍵方法
/// 系統快捷鍵服務
public class shortcuthookservice
/// 停止殷勤
public void stopmonitor()
/// 按下鍵
private void hookkeyboardengine_keydown(object sender, keyeventargs e)
/// 抬起鍵
private void hookkeyboardengine_keyup(object sender, keyeventargs e)}}
// todo :匹配規則記錄
list> _collection = new list>();
shortcutentitys _current = new shortcutentitys();
/// 當前按鈕記錄
public shortcutentitys current
/// 註冊執行命令
public void registercommand(shortcutentitys match, action action)
tuplet = new tuple(match, action);
_collection.add(t);
}}
快捷鍵實體
主要用來匹配快捷鍵,序列化反序列化成文字
/// 快捷按鈕實體
public class shortcutentitys
private list_downkeys = new list();
/// 按下的按鍵
public listdownkeys
set
}/// 容器的大小
int capacity = 3;
/// 增加正常按鍵
public void add(keyentity key)
}/// 增加按下的按鍵
public void adddown(keyentity key)
/// 刪除按下的按鍵
public void removedown(keyentity key)
/// 是否包含指定快捷鍵
public override bool equals(object obj)
// todo :非按下鍵
if (keys.count < s.keys.count) return false;
for (int i = 0; i < s.keys.count; i++)
// todo :判斷時間間隔
if (i == s.keys.count - 1) continue;
if ((this.keys[this.keys.count - i - 1].time - this.keys[this.keys.count - i - 2].time).seconds > shortcutconfiger.splitsecond)
}return true;
}/// 轉換視覺化文字
public override string tostring()
foreach (var item in this.keys)
return sb.tostring().trim(shortcutconfiger.sptitchar);
}public void clear()
/// 根據文字生成規則
public static shortcutentitys deserilse(string str)
foreach (var item in ns)
return s;
}}
其他配置和實體
/// 配置資訊
class shortcutconfiger
/// 鍵盤按鍵
public class keyentity
set
}private datetime _time;
/// 按下的時間
public datetime time
set
}}
測試**:
1、按下shift和d鍵觸發
shortcutentitys s= shortcutentitys.deserilse("lshiftkey↓+d");
action action2 = () =>
;shortcuthookservice.instance.registercommand(s, action2);
2、雙擊d鍵觸發
shortcutentitys s = new shortcutentitys();
keyentity k = new keyentity();
k.key = keys.d;
s.add(k);
keyentity c = new keyentity();
c.key = keys.d;
s.add(c);
action action2 = () =>
;shortcuthookservice.instance.registercommand(s, action2);
3、按下d鍵+f鍵組合
shortcutentitys s = new shortcutentitys();
keyentity k = new keyentity();
k.key = keys.d;
s.adddown(k);
keyentity c = new keyentity();
c.key = keys.f;
s.add(c);
action action2 = () =>
;shortcuthookservice.instance.registercommand(s, action2);
注: 1、通過此方法可以快速構建快捷鍵和快捷鍵對應的方法
2、利用全域性鉤子構建,可以不用在程式中操作也可以監測
3、按鍵組合多樣
pyqt全域性快捷鍵
測試了3個熱鍵庫,最終systemhotkey庫使用最簡單,安裝方法 簡易的demo,搬運官方 from system hotkey import systemhotkey hk systemhotkey hk.register control shift h callback lambda x p...
RegisterHotKey註冊快捷鍵
bool registerhotkey hwnd hwnd,響應該熱鍵的視窗控制代碼 int id,該熱鍵的唯一標識 uint fsmodifiers,該熱鍵的輔助按鍵 uint vk 該熱鍵的鍵值 為了得到唯一標識,我們還將用到另乙個api函式 atom globaladdatom lpctstr...
QT實現Ctrl S快捷鍵(組合快捷鍵)
首先要清楚,ctrl s的組合快捷鍵中,ctrl是 修飾鍵 s是 按鍵值 平時使用的組合快捷鍵都是要先按下修飾鍵再按按值鍵,順序反了就沒有組合鍵的效果了 qt按鍵按下的事件qkeyevent中有key 和modifier key 函式返回的是發生時間的按鍵值,modifier 返回的而是修飾鍵。因此...