【发布时间】:2016-04-28 02:16:06
【问题描述】:
如何检测焦点窗口是否是 Edit 'type' 控件?我知道的一种方法是使用Microsoft Active Accessibility,看起来使用这种方法需要付出很多努力。
还有其他更简单的方法吗?
我的用例是:当编辑控件获得焦点时,存储 hwnd。
// Callback set by SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, NULL, (WINEVENTPROC)&winEventProc, 0, 0, WINEVENT_SKIPOWNPROCESS);
void CALLBACK KeyboardComponent::winEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject,
LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
// if hwnd == "Edit Control" store hwnd to send key input events
// One technique but not comprehensive
TCHAR wndClassName[255];
GetClassName(hwnd, wndClassName, 255);
if (_tcsicmp(wndClassName, _T("edit")) == 0)
targetEdit = hwnd;
// Class names I am receiving are subclassed or new window classes that look and operate like Edit controls.
// Ie when clicking the Firefox address bar I get: MozillaWindowClass
// Ie when clicking the Chrome address bar I get: Chrome_WidgetWin_1
}
【问题讨论】:
-
代码有什么问题?使用 Windows API 可以查看窗口类名称,这正是您正在做的事情。
-
我必须否决这个问题,因为,如果我想要 EDIT 课程并获得 EDIT 课程,这就是我想要的。 OP 无法理解并非所有看起来都是编辑控件的控件都是“编辑”类。
-
我不认为你真的明白你在这里做什么。谁说控件甚至是窗口化的。您已经找到了正确的解决方案,即 UI 自动化。别跑了。
-
你打算用你想存储的
hwnd做什么?