我创建了一个程序来识别现有的最大化窗口并使用EnumWindows和GetWindowPlacement记录它们的位置。
假设我知道所需EXE的位置,我可以通过调用外部进程调用者来打开它。但是,识别新打开的窗口并设置其位置的最佳方法是什么?可以安全地假设具有相同名称的程序可能已经打开(例如,两个cmd实例)。
我相信一旦确定了窗口,我就可以使用SetWindowPos设置其位置。
这是正确的问题吗?有没有办法打开程序并收回HWND句柄?
在Event Hook中,我有这段代码:
HWINEVENTHOOK hook = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE, NULL, proc, 0, 0, WINEVENT_OUTOFCONTEXT );
BOOL result = CreateProcess(NULL, szPath, &saProcess, &saThread, FALSE, 0, NULL, NULL, &si, &piProcessC);
if (hook) {
UnhookWinEvent(hook);
}
创建一个钩子然后创建一个进程(我正在打开Notepad ++)。
它调用的proc函数是:
void CALLBACK proc(HWINEVENTHOOK hook, DWORD event, HWND hWnd, LONG obj, LONG child, DWORD thr, DWORD time) {
if (IsWindow(hWnd)){
WINDOWPLACEMENT *wp = new WINDOWPLACEMENT();
wp->length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, wp);
wp->rcNormalPosition.top = (long) 363;
wp->rcNormalPosition.bottom = (long) 1021;
wp->rcNormalPosition.left = (long) 1444;
wp->rcNormalPosition.right = (long) 2551;
BOOL tmp = SetWindowPlacement(hWnd, wp);
cout << "FOUND IT\n";
}
}
proc函数似乎没有被调用,钩子也没有捕获任何东西?
哦,我不确定WINEVENT_OUTOFCONTEXT是否正确,这只是一个简单的EXE来进行调用。