我正在寻找一种方法来禁用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)。 –
我会试试这个,我没有考虑过。 –
编辑:我只是试了一下,它的工作,这太容易想想....谢谢! –