识别并调整新打开的外部窗口的大小

时间:2013-10-16 15:38:48

标签: c++ windows

我创建了一个程序来识别现有的最大化窗口并使用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来进行调用。

0 个答案:

没有答案