Как проверить, находится ли система Windows в состоянии приема ввода?

#c #windows

Вопрос:

Как проверить, находится ли система Windows в состоянии приема ввода с помощью языка c?

Например:

  • если курсор находится на рабочем столе, получите «false»
  • если курсор находится в заголовке блокнота, получите «false», но в клиентской области получите «true»
  • если курсор находится в окне редактирования текста, получите «true»
  • если курсор находится в области игрового поля, получите «false», но в области игрового чата получите «true».

Если он обнаруживает определенное окно, мы можем попытаться захватить IME-сообщение этого окна.

Но если это происходит в неопределенной системной среде (не знаю, какие окна открыты), как определить?

Комментарии:

1. Какую проблему вы пытаетесь решить?

2. Вы можете проверить, сфокусирована ли ваша программа, прослушав WM_SETFOCUS ее в wndproc. Если вы хотите проверить, фокусируется ли какая- либо программа в каком-либо подокне, которое принимает ввод, что ж, это очень сложный и слишком широкий вопрос для этого сайта.

3. @IInspectable Я хочу смоделировать работу с клавиатурой. Например, если мне сейчас нужно работать с окном, если окно можно открыть, я могу отправить символ » A «с помощью postMessage(дескриптор, WM_CHAR, «A», 0), в противном случае он не может быть открыт, я могу отправить операцию, которую » A » нажимает с помощью postMessage(Дескриптор, WM_KEYDOWN, «A», 0). Я могу ввести «A-Z, a-z, !@#$%^amp;*()_ » с WM_CHAR, но может вводить только «a-z» с помощью WM_KEYDOWN. Пока я могу проверить, находится ли система (или окно) в допустимом состоянии, я могу обрабатывать ее по-другому

4. @Lundin em, я хочу проверить любую активную в данный момент программу системы

5. Система всегда будет находиться в состоянии, в котором она принимает входные данные. Проблема, о которой вы спросили, не имеет решения. Проблема, которую вы пытаетесь решить, заключается в автоматизации пользовательского интерфейса.