如何模拟shift / ctrl / alt键状态?

时间:2012-08-19 16:11:34

标签: c# javascript keyboard keypress

有谁知道如何模拟 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.任何想法我怎么能让它工作?

1 个答案:

答案 0 :(得分:1)

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