C# 如何使用全局键盘钩子和postmessage()模拟按键组合(例如shift和#x2B;左键选择文本)?

C# 如何使用全局键盘钩子和postmessage()模拟按键组合(例如shift和#x2B;左键选择文本)?,c#,keyboard-hook,C#,Keyboard Hook,我正在使用全局键盘挂钩(WH_keyboard_LL)并将键发送到浏览器句柄。我可以让用户按一个键,但不能按多个键的组合(例如shift+left以选择文本) private IntPtr ProcessKey(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEY_EVENT.WM_KEYDOWN || wParam

我正在使用全局键盘挂钩(WH_keyboard_LL)并将键发送到浏览器句柄。我可以让用户按一个键,但不能按多个键的组合(例如shift+left以选择文本)

private IntPtr ProcessKey(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0
        && wParam == (IntPtr)WM_KEY_EVENT.WM_KEYDOWN
        || wParam == (IntPtr)WM_KEY_EVENT.WM_SYSKEYDOWN)
    {
        int vkCode = Marshal.ReadInt32(lParam);
        int vkCode1 = Marshal.ReadInt32(wParam);//here I am getting runtime
        //error as Attempted to read or write protected memory.
        //This is often an indication that other memory is corrupt. 

        SafeNativeMethods.PostMessage(m_browserHandle,(uint)WM_KEY_EVENT.WM_KEYDOWN,  
            Convert.ToInt32((System.Windows.Forms.Keys)vkCode),
            Convert.ToInt32((System.Windows.Forms.Keys)vkCode1));
    }

    return SafeNativeMethods.CallNextHookEx(_hookID, nCode, wParam, lParam);
}

[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);

public static class WM_KEY_EVENT
{
    public static int WM_KEYDOWN = 0x0100;
    public static int WM_SYSKEYDOWN = 0x0104;
    public static int WM_KEYUP=0x0101;
    public static int WM_SYSKEYUP=0x0105;
};

我读了一些文章,其中我们可以通过使用wParam获得按键组合,这会产生错误,如上面的代码所示。请建议如何避免该错误或其他方法。

您的代码中有一些错误。您将wParam视为一个指针(因为您使用它调用ReadInt32),但它包含窗口消息

lParam您应该将derefernece(使用Marshal.PtrToStructure)定义为,它包含键代码和修饰符键状态


我不认为将vkCode强制转换为System.Windows.Fórms.Keys值,然后再右键返回int有什么意义。

所有空行都有什么用?可能是重复的