如何檢測焦點窗口是否爲編輯「類型」控件?我知道的一種方法是使用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可以查看窗口類的名稱,這正是您正在做的。 –
我必須投票這個問題,因爲,如果我想編輯類,並獲得編輯類,這是我想要的。 OP有問題的理解並非所有看起來都是編輯控件的控件都是「編輯」類。 – user2120666
我不認爲你真的明白你在這裏做什麼。誰說控制甚至是開窗。你已經找到了正確的解決方案,UI自動化。停止從它跑。 –