我想做一个应用程序,如果它匹配一个模式,它会替换每个输入。例如,如果用户按下 LeftMouseButton + Ctrl,程序会将其更改为右键单击,并仅将其发送到当前活动窗口或捕获窗口。
问题是如何在 C# 中解决它?
我想做一个应用程序,如果它匹配一个模式,它会替换每个输入。例如,如果用户按下 LeftMouseButton + Ctrl,程序会将其更改为右键单击,并仅将其发送到当前活动窗口或捕获窗口。
问题是如何在 C# 中解决它?
您将需要实现这样的类,您必须对其进行调整以支持鼠标单击以满足您的需求,但它应该向您展示一些初步步骤。
public class KeyConverter {
//All conversions are stored in this dictionary.
private Dictionary<Keys, Keys> conversions = new Dictionary<Keys, Keys>();
public KeyConverter() {
//this conversion will convert every Ctrl+C signal into Ctrl+V
conversions.Add(Keys.C | Keys.Control, Keys.V | Keys.Control);
}
public Keys Convert(Keys keys) {
if (conversions.ContainsKey(keys))
return conversions[keys];
else
return keys; //return the input if no conversion is available
}
}
将您需要的转换添加到转换字典。订阅观察击键的事件并使用当前按下的键调用方法转换。使用返回的密钥发送到您的系统
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
public void SendKey(Keys keys){
foreach(Keys key in Enum.GetValues(typeof(Keys)))
if(keys.HasFlag(key))
keybd_event((byte)key, 0, 0, 0); //press key
foreach(Keys key in Enum.GetValues(typeof(Keys)))
if(keys.HasFlag(key))
keybd_event((byte)key, 0, 0x2, 0); // release key
}