как отправить 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
процесс.