我正在尋找一種方法來禁用alt和ctrl鍵輸入,而我按它。 我實際上正在開發一個宏配置器,當我按下我的宏(例如Alt + Ctrl + NumPad0)並且我想要發送H + E + L + L + O鍵時,它將不起作用,因爲我'按下Alt鍵。計算機可能會嘗試執行未知的快捷鍵Alt + Ctrl + H,Alt + Ctrl + E ... 所以我希望當我按下我的宏並且程序檢測到我按下它時,它會禁用臨時替代項,而輸出鍵是發送,並在完成時再次啓用Alt。 我使用LowLevelKeyboardProc來檢測當我按下一個鍵,但我不能防止Alt按下,因爲我實際上是按它來執行我的宏。禁用alt鍵臨時c#
//代碼從我的形式
private void Listener_OnKeyUp(object sender, KeyUpArgs e)
{
KeyAction.RemoveKeyDown(e.KeyUp);
}
private void Listener_OnKeyPressed(object sender, KeyPressedArgs e)
{
try
{
KeyAction.PutKeyDown(e.KeyPressed);
foreach (MacroEntree macro in macros)
{
if (macro.Activated)
if (macro.Action != null)
if (macro.isMacroDown())
{
listener.OnKeyPressed -= new EventHandler<KeyPressedArgs>(Listener_OnKeyPressed);
new Thread(delegate()
{
while (IsAltCtrlDown()) ;
macro.ExecuteAction();
Thread.Sleep(100);
listener.OnKeyPressed += new EventHandler<KeyPressedArgs>(Listener_OnKeyPressed);
}).Start();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Erreur : " + ex.Message);
}
}
private bool IsAltCtrlDown()
{
if (KeyAction.isKeyDown(Key.LeftAlt) || KeyAction.isKeyDown(Key.RightAlt))
return true;
if (KeyAction.isKeyDown(Key.LeftCtrl) || KeyAction.isKeyDown(Key.RightCtrl))
return true;
return false;
}
//the code from my class that checks if the macro is down
public class KeyAction
{
static List<Key> keyDown = new List<Key>();
public static bool isKeyDown(Key k)
{
return keyDown.Contains(k);
}
public static void PutKeyDown(Key k)
{
if (!keyDown.Contains(k))
keyDown.Add(k);
}
public static void RemoveKeyDown(Key k)
{
keyDown.Remove(k);
}
}
你不能發送'CtrlUp + AltUp'的KeyUp嗎?也許這樣系統可能會認爲你已經釋放了密鑰(帶有keybd_event)。 –
我會試試這個,我沒有考慮過。 –
編輯:我只是試了一下,它的工作,這太容易想想....謝謝! –