我需要一种可靠的方法来确定我是否键入了将出现在屏幕上的字符,即是否出现在文本框或其他输入控件中(在任何过程中)。这对于看起来似乎具有自己输入元素的浏览器也同样适用。
我尝试使用辅助功能api,但是使用它来检查文本框似乎并不可靠。
我还尝试使用GetGUIThreadInfo
来获得插入符号的位置,这也不可靠。
任何建议如何检查是否有任何可见的具有键盘焦点的输入框?
原因::我正在添加此问题的用例。我们有一个后台可访问性过程来监视所有键盘输入。 (用户完全了解此过程,可以修改输入发生的情况)。在某些情况下,输入被删除(通过退格键),并由其他内容代替。当没有焦点的输入框时,我们不需要或不需要发送所需的退格键。
答案 0 :(得分:0)
如上所述。检测控件何时可以处理退格键不是很可靠。但是,从头上解决问题还是有帮助的。根据我们的要求,检测控件何时无法处理退格相当容易。
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;