PostMessage WM_KEYDOWN send multiply keys?

前端 未结 2 635
忘掉有多难
忘掉有多难 2020-12-04 00:17

I have this code:

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

        foreach (Process proc in p         


        
相关标签:
2条回答
  • 2020-12-04 01:12

    I have tried this so many times and it's hit or miss if it works. What you want to do is try to use WM_SYSKEYDOWN instead of WM_KEYDOWN for "system" type keys. This also means you have to use WM_SYSKEYUP. Something like this might work:

    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); 
    

    Update:

    I've it only to simulate key presses for single keys, it works great even for minimized applications :). When using it as a combination key for "shift" states is where it's hit or miss. The problem is most windows applications have a control and each control has it's on handle so sending a key to the window doesn't have the desired affect, you have to send ALT+S to the "Menu" handle to make a file save (in say Notepad), which also works.

    0 讨论(0)
  • 2020-12-04 01:20

    You can't simulate keyboard input with PostMessage, at least not reliably use SendInput instead.

    0 讨论(0)
提交回复
热议问题