SendKeys.Send并关闭键修饰符

时间:2009-03-05 17:35:38

标签: c# keyboard sendkeys

我想让^ N的工作与树形控件中的向下箭头相同。我想 我只需要将以下内容添加到KeyDown处理程序中:

SendKeys.Send("{Down}");

但是自控制键以来,它被视为控制向下箭头 目前正在按下。 msdn page {{3}} 描述了如何开启 控制修饰符但不是如何将其关闭。

谢谢, 基思

4 个答案:

答案 0 :(得分:4)

很抱歉来参加聚会,但我认为我找到了解决方案:

首先,导入SetKeyboardState:

[DllImport("user32.dll")]
public static extern bool SetKeyboardState(byte[] lpKeyState);

然后,在调用SendKeys.Send()之前,只需用零字节数组调用它:

SetKeyboardState(new byte[256]);
SendKeys.Send("your key sequence");

这对我有用。希望这有帮助!

答案 1 :(得分:1)

您可以p / invoke to keybd_event。这将让你模拟一个处于“向上”和“向下”状态的键。

答案 2 :(得分:0)

这是艰难的做法。我承认这不是最佳方式。我相信你已经知道了。您可能希望重载控件的WindProc方法&使用SendMsg Win32 Api。这就是我在当天使用的方法。

答案 3 :(得分:0)

您还可以尝试等到不再按下控制键,然后再按const texts = ["Your locale is #locale. You are from #country. Other name of your country is #others.", "Your locale is #locale. You are from #country. Other name of your country is #misc." ]; const varsToChange = [{ locale: "Chinese", country: "China", others: { name: "Republic of China", } },{ locale: "Japanese", country: "Japan", misc: { name: "Empire of Japan", } }] const result = texts.map( (text, i) => text.replace( /#(\w+)/g, (_, tag) => typeof varsToChange[i][tag] === 'string' ? varsToChange[i][tag] : varsToChange[i][tag].name ) ); console.log(result);,例如:

KeySend