Как различать, Win32 снабжают дескриптор сокетом от других дескрипторов канала?

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

Размер взлома, который вы упомянули, действительно следует избегать, потому что его далеко не 100%. Есть другие вещи, которые ломают это, такие как разделенный экран, изображение в режимах изображения, и наиболее вероятно новые складные телефоны. Также подключаем его к любому монитору. Это «обычная» практика только тех, кто не знает лучше и не тестирует свой код.

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

В конце концов, решение состоит в том, чтобы написать ваше приложение так, чтобы оно не заботилось о состоянии клавиатуры и не пыталось изменить поведение или внешний вид вашего приложения, когда клавиатура открывается / закрывается, ОС не предназначена для этого .

Полностью согласен с вами, что это должно поддерживаться ОС. Но я говорю это с 2010 года, когда я писал клавишные. Это еще не изменилось, я не ожидал бы этого в ближайшее время.

5
задан Shog9 21 June 2009 в 21:54
поделиться

2 ответа

Вы попробовали WSADuplicateSocket. Затем просто проверьте WSAPROTOCOL_INFO видеть, является ли это на самом деле именованный канал...

1
ответ дан 15 December 2019 в 06:36
поделиться

Я думаю, что, возможно, вы могли бы попытаться вызвать GetNamedPipeInfo () на своем дескрипторе. Если вызов завершился успешно, вы знаете, что дескриптор является дескриптором канала, иначе это должен быть сокет.

2
ответ дан 15 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: