我正在尝试使用WindowsInputSimulator 库来帮助我模拟按键。
该软件将由客户端和服务器组成。当在客户端输入一个键时,它的 KeyEventArgs 被发送到服务器。然后服务器对其执行以下操作:
public void SendKeyDown(Keys keyCode, Keys modifiers)
{
uint nonVK = MapVirtualKey((uint)keyCode, 2);
char mappedChar = Convert.ToChar(nonVK);
if (modifiers.Equals(Keys.None))
{
VirtualKeyCode vkc;
if (Enum.TryParse(VkKeyScan(mappedChar).ToString(), out vkc))
{
InputSimulator.SimulateKeyDown(vkc);
}
}
else
{
//Find out which modifier we're working with.
uint modVK = MapVirtualKey((uint)modifiers, 2);
char modifierChar = Convert.ToChar(modVK);
VirtualKeyCode vkc, modVkc;
if (Enum.TryParse(VkKeyScan(mappedChar).ToString(), out vkc)
&& Enum.TryParse(VkKeyScan(modifierChar).ToString(), out modVkc))
{
InputSimulator.SimulateModifiedKeyStroke(modVkc, vkc);
}
}
}
这适用于单键。但是,我也在尝试使用修饰键,但遇到了一些麻烦。例如,按 SHIFT + K 会产生“k2”,这让我相信我转换为 VirtualKeyCodes 的过程很不可靠,或者是其他什么东西。
另外,在发送这些命令时,我应该只捕获 KeyDown / KeyUp 事件吗?还是我也应该注意 KeyPress 事件?我应该也可以使用箭头键和非字符键,这让我觉得我应该忽略 KeyPress。
编辑:另外,当我使用多个修饰符时,我怎么知道?我应该如何将它们串在一起?
想法?谢谢!