我有这段代码:
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);
}
}
但它不起作用......
有什么想法吗?
答案 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到“菜单”句柄进行文件保存(在记事本中说,这也有效。