封裝 鉤子註冊全域性組合快捷鍵

2021-08-11 19:28:05 字數 3280 閱讀 1134

用途:註冊全域性組合快捷鍵和快捷鍵呼叫的方法

需要系統鉤子,網上有很多方法

下面介紹封裝快捷鍵和註冊快捷鍵方法

快捷鍵服務,主要用來監控按鍵、匹配快捷鍵和觸發匹配快捷鍵方法
/// 系統快捷鍵服務 

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 返回的而是修飾鍵。因此...