То, что вы описываете, на самом деле не похоже на экранную клавиатуру.Он отправляет нажатия клавиш в окно active .Обратите внимание, что OSK фактически никогда не может получить фокус ввода, и это полностью разработано.
SendKeys
только отправляет ввод в активное окно.В модели пользовательского интерфейса Windows это единственное окно, которое может принимать ввод с клавиатуры / мыши.В этом вся суть разницы между «активным» / «сфокусированным» окном.
Трудно предложить альтернативное решение вашей проблемы, не зная точно, чего вы пытаетесь достичь.Некоторые идеи:
Нет причин для повторной реализации OSK;он поставляется со всеми версиями Windows, так что вы можете просто запустить его с Process.Start
и быть уверенным, что все будет работать нормально.
Если вам do необходимосделайте что-то подобное самостоятельно, посмотрите на копирование его дизайна и не позволяйте окну ввода получать фокус.Это заставит окно, которое должно получить события клавиатуры, поддержать фокус и позволить ему получить тот ввод.
В качестве альтернативы вы можете вызвать функцию SetForegroundWindow
, чтобы активировать окно для приема ввода с клавиатуры, но я не рекомендую этого.