【问题标题】:How to simulate shift/ctrl/alt key state?如何模拟 shift/ctrl/alt 键状态?
【发布时间】:2012-08-15 05:03:54
【问题描述】:

有谁知道我如何模拟 shift/ctrl/alt 键状态?

基本上,我正在使用HTML5 canvas 的客户端和运行C# 应用程序的服务器端创建一个远程桌面应用程序。服务器端应用程序捕获屏幕,发送它并模拟客户端发送的任何按键。

除了按键之外,我一切正常。客户端发送:

 kd; KEYCODE HERE 

当一个键被按下时

ku; KEYCODE HERE 

当它被释放时(keyup)。我正在使用此代码:

[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;

// - - - - -

// Keyboard events
if (receivedData[0] == "kd")
{
    // Shift key pressed
    if (receivedData[1] == "16")
    {
        keybd_event((byte)Convert.ToInt32(Keys.LShiftKey), 0, KEYEVENTF_EXTENDEDKEY, 0);
        return;
    }

    keybd_event((byte)Convert.ToInt32(receivedData[1]), 0, KEYEVENTF_EXTENDEDKEY, 0);
}
if (receivedData[0] == "ku")
{
    // Shift key released
    if (receivedData[1] == "16")
    {
        keybd_event((byte)Convert.ToInt32(Keys.LShiftKey), 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        return;
    }

    keybd_event((byte)Convert.ToInt32(receivedData[1]), 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}

普通键可以正常工作,但任何有状态的键都不能正常工作。收到的左移 javascript 键码是 16。有什么想法可以让它工作吗?

【问题讨论】:

  • 虽然上面的代码在编写文本时适用于移位按下......但不适用于游戏等程序。:S
  • 嗯,在服务器上按住 leftshift 然后在客户端按 leftshift 键(然后在服务器上释放 shift 键)使其工作。但是,当您按下服务器上的 rightshift 键时,它会再次停止工作。有谁知道发生了什么?各州都被它的外表搞得一团糟。

标签: c# javascript keyboard keypress


【解决方案1】:

我最终使用了Windows Input Simulator 库。非常适合模拟按键和按键,包括 shift、ctrl 和 alt 键。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多