Windows находится в режиме ввода текста? - PullRequest
0 голосов
/ 09 июля 2019

Мне нужен надежный способ определить, если я наберу символ, он появится на экране, то есть в текстовом поле или другом элементе управления вводом (в любом процессе).Это должно работать и для браузеров, которые, кажется, имеют свои собственные элементы ввода.

Я пытался использовать API-интерфейсы специальных возможностей, но это не представляется надежным, используя его для проверки текстового поля.

Я также пытался использовать GetGUIThreadInfo, чтобы получить позицию каретки, опять же, это ненадежно.

Есть какие-нибудь предложения, как проверить, есть ли какой-либо тип видимого поля ввода с фокусировкой клавиатуры?

Причина: Я добавляю вариант использования для этой проблемы.У нас есть процесс доступности фона, который контролирует весь ввод с клавиатуры.(Пользователь полностью осведомлен об этом процессе и может изменить то, что происходит с вводом). В некоторых ситуациях ввод удаляется (путем возврата) и заменяется чем-то другим.Когда нет поля ввода с фокусом, мы не хотим или не должны отправлять требуемые символы возврата.

1 Ответ

0 голосов
/ 10 июля 2019

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

HRESULT hr = CoCreateInstance(CLSID_CUIAutomation, NULL,
    CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&uiAutomation_));
    ATLENSURE_SUCCEEDED(hr);

затем

CONTROLTYPEID controlTypeID;
IUIAutomationElement * focusedElement;
if (SUCCEEDED(uiAutomation_->GetFocusedElement(&focusedElement)))
{
    focusedElement->get_CurrentControlType(&controlTypeID);
}

return controlTypeID == UIA_PaneControlTypeId ||
    controlTypeID == UIA_ListItemControlTypeId ||
    controlTypeID == UIA_DataItemControlTypeId ||
    controlTypeID == UIA_TextControlTypeId ||
    controlTypeID == UIA_ButtonControlTypeId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...