SendKeys не может отправлять ключи за пределы активного приложения.
Чтобы действительно и по-настоящему имитировать нажатие клавиши в масштабе всей системы, вам нужно P/Invoke либо keybd_event
, либо SendInput
из user32.dll
. (Согласно MSDN SendInput
является «правильным» способом, но keybd_event
работает и проще для P/Invoke.)
Пример (я думаю, что эти коды клавиш верны... первый в каждой паре — это код VK_
, а второй — код сканирования клавиатуры... "2" – это 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, чтобы найти окно приложения и сфокусировать его.
person
Eric Rosenberger
schedule
12.01.2009