как отправить Ctrl + G в другое приложение?

Я пытаюсь отправить клавиши CTRL + G с помощью InputSimulator с ForegroundWindow, но это не работает. С другими клавишами работает как положено, например Ctrl + A или Ctrl + C

опции меню горячих клавиш

Я пробовал:

Process[] p = Process.GetProcessesByName("notepad");
if (p != null && p.Length > 0)
{
    IntPtr h = p[0].MainWindowHandle;
    SetForegroundWindow(h);
    InputSimulator sim = new InputSimulator();
    sim.Keyboard.ModifiedKeyStroke (VirtualKeyCode.CONTROL, VirtualKeyCode.VK_G) .Sleep (300);
 }

или

 Process[] p = Process.GetProcessesByName("notepad");
 if (p != null && p.Length > 0)
 {
    IntPtr h = p[0].MainWindowHandle;
    SetForegroundWindow(h);
    InputSimulator sim = new InputSimulator();
    sim.Keyboard.KeyDown(VirtualKeyCode.CONTROL);
    sim.Keyboard.KeyPress(VirtualKeyCode.VK_G).Sleep(300);
    sim.Keyboard.KeyUp(VirtualKeyCode.CONTROL).Sleep(300);
}

Также попробуйте:

SendKeys.Send ("^ (g)");

Я даже пробовал keybd_event (функция user32.dll)

1 ответ

Вам необходимо установить фокус в другом окне перед отправкой нажатия клавиш. В документации Microsoft есть примеры, подробно описывающие этот процесс - ссылка

Короче говоря, они используют FindWindow с последующим SetForegroundWindow, затем отправьте ключи через SendKeys.SendWait(), хотя при желании вы можете использовать SendKeys.Send()

Этот ответ кажется краткой реализациейFindWindow + SetForegroundWindow процесс.

Другие вопросы по тегам