キーボードフックを使用してこれを行うことができます。このため、良好なフッククラスが発生WIN + LEFT又はWIN + RIGHTを防止する以下のコードを使用して、このCodeProject Article
に見出すことができます。これを使用して、好きなキーを上書きすることができます。
これは、RegisterHotKey
Win API経由で追加したホットキーを無効にします。
プロジェクトにこれらのクラスが追加されたら、以下のように静的なHookManager
クラスにハンドラを追加できます。
マウスイベントを追加することもできますが、わかりやすくするために、キーボードフックを表示しています。
私は現在、どのキーが現在停止しているかを知り、KeyUp
イベントのリストからそれらのキーを削除するために汎用リストを作成しました。
public static List<Keys> keysDown = new List<Keys>();
private static void HookManager_KeyDown(object sender, KeyEventArgs e)
{
//Used for overriding the Windows default hotkeys
if(keysDown.Contains(e.KeyCode) == false)
{
keysDown.Add(e.KeyCode);
}
if (e.KeyCode == Keys.Right && WIN())
{
e.Handled = true;
//Do what you want when this key combination is pressed
}
else if (e.KeyCode == Keys.Left && WIN())
{
e.Handled = true;
//Do what you want when this key combination is pressed
}
}
private static void HookManager_KeyUp(object sender, KeyEventArgs e)
{
//Used for overriding the Windows default hotkeys
while(keysDown.Contains(e.KeyCode))
{
keysDown.Remove(e.KeyCode);
}
}
private static void HookManager_KeyPress(object sender, KeyPressEventArgs e)
{
//Used for overriding the Windows default hotkeys
}
public static bool CTRL()
{
//return keysDown.Contains(Keys.LShiftKey)
if (keysDown.Contains(Keys.LControlKey) ||
keysDown.Contains(Keys.RControlKey) ||
keysDown.Contains(Keys.Control) ||
keysDown.Contains(Keys.ControlKey))
{
return true;
}
else
{
return false;
}
}
public static bool SHIFT()
{
//return keysDown.Contains(Keys.LShiftKey)
if (keysDown.Contains(Keys.LShiftKey) ||
keysDown.Contains(Keys.RShiftKey) ||
keysDown.Contains(Keys.Shift) ||
keysDown.Contains(Keys.ShiftKey))
{
return true;
}
else
{
return false;
}
}
public static bool WIN()
{
//return keysDown.Contains(Keys.LShiftKey)
if (keysDown.Contains(Keys.LWin) ||
keysDown.Contains(Keys.RWin))
{
return true;
}
else
{
return false;
}
}
public static bool ALT()
{
//return keysDown.Contains(Keys.LShiftKey)
if (keysDown.Contains(Keys.Alt) ||
keysDown.Contains(Keys.LMenu) ||
keysDown.Contains(Keys.RMenu))
{
return true;
}
else
{
return false;
}
}
これは_ [XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)_の例ですか?キオスクアプリケーションを作成しようとしていますか? – MickyD
いいえ、個人的なレベルでは、私はWIN + LEFT/RIGHTに立つことができません。また、私はこれに取り組んでいます... https://github.com/mzomparelli/zVirtualDesktop –
私は今コードをダウンしました。私はそれを元に戻すかもしれない。すべてのコミットはまだそこにあります。 –