如果您想退订按键事件:
_globalHook = Hook.GlobalEvents();
_globalHook.KeyPress += GlobalHookKeyPress; //Subscribe
_globalHook.KeyPress -= GlobalHookKeyPress; //Unsubscribe
编辑:
我现在明白您调用了 OnCombination。浏览此方法的代码后,您无法更改创建后的组合列表。对 OnCombination 的其他调用只会添加更多注册。
编辑:
另一种选择是使用响应式扩展:
using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reactive.Linq;
using Gma.System.MouseKeyHook;
using MouseKeyHook.Rx;
namespace HotkeyPlay
{
public partial class Form1 : Form
{
private IDisposable _keysObservable;
public Form1()
{
InitializeComponent();
var triggers = new Trigger[]
{
Trigger.On(Keys.H).Alt().Shift()
};
_keysObservable =
Hook
.GlobalEvents()
.KeyDownObservable()
.Matching(triggers)
.Subscribe((trigger) =>
{
Debug.WriteLine(trigger.ToString());
});
}
private void button1_Click(object sender, EventArgs e)
{
_keysObservable.Dispose();
var triggers = new Trigger[]
{
Trigger.On(Keys.B).Alt().Shift()
};
_keysObservable =
Hook
.GlobalEvents()
.KeyDownObservable()
.Matching(triggers)
.Subscribe((trigger) =>
{
Debug.WriteLine(trigger.ToString());
});
}
}
}
Nuget 包:
Install-Package System.Reactive.Linq
Install-Package MouseKeyHook.Rx
MouseKeyHook.Rx 仍处于预发布版本。