Как отправить ключи F12 из текущей формы / приложения .NET - PullRequest
2 голосов
/ 12 января 2009

Я почти уверен, что следующий код формы, активируемый кнопками, должен вызывать Control-F12 в моем приложении C #:

SendKeys ( "^ {F12}");

Но, похоже, он не доходит до оболочки Windows и не активирует другую программу, которая его прослушивает. Моя клавиатура работает. Кажется, что sendkeys где-то перехватывается и не отправляется способом, который фактически имитирует нажатие клавиши. Любая помощь?

1 Ответ

3 голосов
/ 12 января 2009

SendKeys не может отправлять ключи за пределы активного приложения.

Чтобы действительно и действительно имитировать нажатие клавиш в масштабе всей системы, вам нужно P / Invoke либо keybd_event, либо SendInput из user32.dll. (Согласно MSDN SendInput является «правильным» способом, но keybd_event работает и проще для P / Invoke.)

Пример (я думаю эти коды клавиш правильные ... первый в каждой паре - это код VK_, а второй - код сканирования клавиатуры для создания или разрыва ... the "2 "is KEYEVENTF_KEYUP)

[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan,
    int dwFlags, int dwExtraInfo);

...

keybd_event(0xa2, 0x1d, 0, 0); // Press Left CTRL
keybd_event(0x7b, 0x58, 0, 0); // Press F12
keybd_event(0x7b, 0xd8, 2, 0); // Release F12
keybd_event(0xa2, 0x9d, 2, 0); // Release Left CTRL

Альтернативой является активация приложения, которое вы отправляете, перед использованием SendKeys. Для этого вам нужно снова использовать P / Invoke, чтобы найти окно приложения и сфокусировать его.

...