PostMessage WM_KEYDOWN发送多个密钥?

时间:2011-10-11 21:17:19

标签: c# .net winapi process postmessage

我有这段代码:

    public static void Next()
    {
        Process[] processes = Process.GetProcessesByName("test");

        foreach (Process proc in processes)
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0);
    }

此代码发送右箭头键,我想发送ALT + CTRL + RIGHT我试过这个:

    public static void Forward()
    {
        Process[] processes = Process.GetProcessesByName("test");

        foreach (Process proc in processes)
        {
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_CONTROL, 0);
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_ALT, 0);
            PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0);
        }
    }

但它不起作用......

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

我已经尝试了这么多次,如果它有效,它会受到影响。你想要做的是尝试使用WM_SYSKEYDOWN而不是WM_KEYDOWN用于“系统”类型键。这也意味着你必须使用WM_SYSKEYUP。这样的事情可能有用:

PostMessage(proc.MainWindowHandle, WM_SYSKEYDOWN, VK_CONTROL, 0); 
PostMessage(proc.MainWindowHandle, WM_SYSKEYDOWN, VK_ALT, 0); 
PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0); 
PostMessage(proc.MainWindowHandle, WM_SYSKEYUP, VK_ALT, 0); 
PostMessage(proc.MainWindowHandle, WM_SYSKEYUP, VK_CONTROL, 0); 

更新

我只是模拟单键的按键操作,即使对于最小化的应用程序也能很好地工作:)。当它用作“移位”状态的组合键时,它就会被击中或错过。问题是大多数Windows应用程序都有一个控件,每个控件都有它处理,所以发送一个键到窗口没有所需的影响,你必须发送ALT + S到“菜单”句柄进行文件保存(在记事本中说,这也有效。

相关问题