Как закрыть окна на экранной клавиатуре с помощью С++

Я пытаюсь закрыть экранную клавиатуру Windows (osk.exe) в коде С++, но безуспешно.

HWND kbIsOpen = FindWindow(TEXT("OSKMainClass"),NULL);
CloseWindow(kbIsOpen);  

CloseWindow или SendMessage ничего не сделали. Обратите внимание, что проблема не в kbIsOpen, а также getLastError возвращает 5 (ERROR_ACCESS_DENIED).

Что я могу сделать, чтобы справиться с этой проблемой?


person DuduE    schedule 10.03.2014    source источник
comment
Вы также можете убить процесс, что, я думаю, было бы более подходящим.   -  person Havenard    schedule 10.03.2014
comment
Функция CloseWindow: сворачивает (но не уничтожает) указанное окно.   -  person chris    schedule 10.03.2014
comment
Вызов Windows API будет отправлять только событие закрытия окна в приложение, но приложение может отклонить это.   -  person Steve    schedule 10.03.2014
comment
Кроме того, обратите внимание, что при активированном управлении доступом пользователей вам может потребоваться повысить привилегии вашего приложения, чтобы сделать это.   -  person Havenard    schedule 10.03.2014
comment
Если вы можете скрыть окно вместо того, чтобы полностью убить приложение, попробуйте ShowWindow.   -  person Captain Obvlious    schedule 10.03.2014
comment
Итак, есть ли способ закрыть Osk.exe без повышения прав? Я не нашел ни одного.   -  person Aros    schedule 02.12.2020


Ответы (1)


Предполагая, что FindWindow возвращает допустимый дескриптор окна, SendMessage(kbIsOpen, WM_DESTROY, NULL, NULL); должен закрыть его. (Хотя это довольно опасный способ. Попробуйте сначала отправить WM_CLOSE и WM_QUIT.)

Однако возможно, что окно клавиатуры отбрасывает сообщения об уничтожении и просто продолжает работать, независимо от того, что вы в него бросаете. У меня Windows 7, так что сам не могу сказать.

‹ неважное мнение > bkIsOpen звучит как имя логической переменной, говорящей вам, открыто ли окно, а не дескриптор окна, если оно существует. ‹ /неважное мнение >

person Proxy    schedule 10.03.2014