如何模拟Shift/Ctrl/Alt键的状态?

3
有人知道我如何模拟shift/ctrl/alt键状态吗?
我正在创建一个远程桌面应用程序,客户端使用HTML5画布,服务器端运行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收到的左Shift的键码是16。您有什么想法如何使它正常工作?


尽管上述代码在编写文本时适用于Shift键,但对于游戏等程序则不适用。:S - Joey Morani
嗯,在服务器上按住左Shift键,然后在客户端上按下左Shift键(然后在服务器上释放Shift键)可以使其正常工作。但是当您在服务器上按下右Shift键时,它又停止工作了。有人知道发生了什么吗?看起来状态被搞乱了。 - Joey Morani
1个回答

1

我最终使用了 Windows 输入模拟器 库。它能很好地模拟键的按下和释放,包括 Shift、Ctrl 和 Alt 键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接