Я решил переписать этот ответ, потому что оригинал содержал много не относящихся к делу деталей, большинство из которых были неверными.Теперь, когда я правильно понимаю, как все это на самом деле работает, можно сказать гораздо меньше, и то, что можно сказать, должно быть гораздо более полезным для будущих посетителей.
Прежде всего, ответ на вопрос ОП: здесь .Это должно позволить ему делать именно то, что он хочет сделать.Слава @ zett42 за указание на трюк WM_SYSCOMMAND
.Теперь об интересных вещах.
Вопрос 1: почему отправка сообщения WM_SYSCOMMAND
в главное окно osk
работает при вызове ShowWindow()
, как пытался сделать ОП, не так ли?
Ответ: Ну, если оставить в стороне тот факт, что сокрытие OSK вместо того, чтобы закрывать или минимизировать его, вероятно, в любом случае не очень хорошая идея, ответ лежит в чем-то, что называется UI Privilege Level Isolation
(UIPI).OSK
работает с повышенными правами, и это ограничивает способы, которыми оно может управляться обычным приложением.Вы можете прочитать больше об UIPI здесь .
. Для дальнейшего использования вы можете выяснить, работает ли программа с повышенными правами, используя SysInternals ' Process Explorer .Если вы посмотрите на вкладку «Безопасность» окна «Свойства процесса», то для ОСК вы увидите:
Флаги: Группа целостности: Обязательная метка \ Высокая Обязательная метка
, в то время как для(например, в приложении «Настройки» вы видите:
Флаги: Целостность Группа: Обязательная метка \ Средняя Обязательная метка
Вопрос 2: Есть какие-либоНа это повлиял тот факт, что OSK
является приложением UWP (см. комментарии @IInspectable ниже)?
Ответ: На самом деле нет.HWND верхнего уровня приложений UWP кажутся просто обычными HWND, хотя Microsoft не хочет, чтобы вы полагались на это .Вы можете исследовать точную иерархию окон, которую они используют - что там у нее есть - с помощью Spy ++ (и используйте 64-битную версию, lol ).
Кроме того:
OP, пожалуйста, попробуйте написать лучшие вопросы .Этот был беспорядок, и это вызвало много проблем.Я отредактировал ваш вопрос в качестве примера, и, чтобы привести его в порядок для будущих посетителей, пожалуйста, посмотрите.И, пожалуйста, проголосуй за меня.Я заработал это.
Люди, отправляющие ответы: пожалуйста, сначала сделайте небольшое исследование.Другие ответы в этой теме бесполезны, отчасти (я бы первым признал) из-за того, как вопрос был изначально сформулирован.Я сам допустил эту ошибку в своих первоначальных комментариях, поэтому мы все можем извлечь из этого уроки.