是否可以在没有SetForegroundWindow的特定应用程序中使用SendKeys?

问题描述 投票:0回答:1

[在主屏幕上工作时,我想向第二个垂直屏幕上打开的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}");
    }
}
c# sendkeys
1个回答
0
投票

右键单击是WM_KEYDOWNWM_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消息

© www.soinside.com 2019 - 2024. All rights reserved.