Отправка ключей в неактивное окно? - PullRequest
0 голосов
/ 09 февраля 2012

Я хочу отправлять в моем приложении клавиши типа «а», а не нажатия клавиш, например Shift, что-то вроде экранной клавиатуры. Я использовал этот код, но он не работает:

IntPtr p = FindWindow(null, <myWindowTitle>);
ShowWindow(GetWindow(p, 3), 5);
SendKeys.SendWait("a");

но я не могу отправить ключи в предыдущее окно!

1 Ответ

2 голосов
/ 09 февраля 2012

То, что вы описываете, на самом деле не похоже на экранную клавиатуру.Он отправляет нажатия клавиш в окно active .Обратите внимание, что OSK фактически никогда не может получить фокус ввода, и это полностью разработано.

SendKeys только отправляет ввод в активное окно.В модели пользовательского интерфейса Windows это единственное окно, которое может принимать ввод с клавиатуры / мыши.В этом вся суть разницы между «активным» / «сфокусированным» окном.

Трудно предложить альтернативное решение вашей проблемы, не зная точно, чего вы пытаетесь достичь.Некоторые идеи:

  • Нет причин для повторной реализации OSK;он поставляется со всеми версиями Windows, так что вы можете просто запустить его с Process.Start и быть уверенным, что все будет работать нормально.

  • Если вам do необходимосделайте что-то подобное самостоятельно, посмотрите на копирование его дизайна и не позволяйте окну ввода получать фокус.Это заставит окно, которое должно получить события клавиатуры, поддержать фокус и позволить ему получить тот ввод.

  • В качестве альтернативы вы можете вызвать функцию SetForegroundWindow , чтобы активировать окно для приема ввода с клавиатуры, но я не рекомендую этого.

...