[在主屏幕上工作时,我想向第二个垂直屏幕上打开的Firefox发送右键单击命令。但是我不希望Firefox在发送命令时变得活跃。我试过了,但是没用:
const uint WM_KEYDOWN = 0x0100;
[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
var processes = Process.GetProcessesByName("firefox");
foreach (var proc in processes)
{
PostMessage(proc.MainWindowHandle, WM_KEYDOWN, (int)Keys.Right, 0);
// I have to use SendKeys.SendWait for the messages to be processed.
SendKeys.SendWait("{RIGHT}");
}
}
并且这有效,但是每次我发送命令时,Firefox都会激活。当我禁用SetForegroundWindow
方法时,它不起作用。
[DllImport("User32.dll")]
private static extern int SetForegroundWindow(IntPtr ptr);
private void button1_Click(object sender, EventArgs e)
{
var p = Process.GetProcessesByName("firefox").FirstOrDefault();
if (p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("{RIGHT}");
}
}
右键单击是WM_KEYDOWN
和WM_KEYUP
。您可以尝试使用第一种方法调用函数吗?
foreach (var proc in processes)
{
PostMessage(proc.MainWindowHandle, WM_KEYDOWN, (int)Keys.Right, 0);
PostMessage(proc.MainWindowHandle, WM_KEYUP, (int)Keys.Right, 0);
// I have to use SendKeys.SendWait for the messages to be processed.
SendKeys.SendWait("{RIGHT}");
}
如果您要发送的内容,也可以尝试发送WM_CONTEXTMENU
消息