パターンに一致する場合、すべての入力を置き換えるアプリを実行したいと考えています。たとえば、ユーザーが 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
}
}
必要な変換を conversions-Dictionary に追加します。キー ストロークを監視するイベントをサブスクライブし、現在押されているキーでメソッド Convert を呼び出します。を使用して、返されたキーをシステムに送信します。
[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
}