PostMessage WM_KEYDOWN发送乘法键?

我有这个代码:

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

但它不起作用……

有任何想法吗?

您无法使用PostMessage模拟键盘输入 ,至少不能可靠地使用SendInput 。

我已经尝试了这么多次,如果它有效,它会受到影响。 你想要做的是尝试使用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到“菜单”句柄进行文件保存(在说记事本),这也有效。