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

C++ 识别新打开的外部窗口并调整其大小,c++,windows,C++,Windows,我创建了一个程序来识别现有的最大化窗口,并使用EnumWindows和GetWindowPlacement记录它们的位置 假设我知道所需EXE的位置,我可以通过调用外部进程调用方来打开它。但是,识别新打开的窗口并设置其位置的最佳方法是什么?可以安全地假设,具有相同名称的程序可能已经打开(例如,cmd的两个实例) 我相信,一旦确定了窗口,我就可以设置它的位置 这是正确的问题吗?有没有办法打开一个程序并接收一个HWND句柄 在事件中,我有以下代码: HWINEVENTHOOK hook = SetW

我创建了一个程序来识别现有的最大化窗口,并使用EnumWindows和GetWindowPlacement记录它们的位置

假设我知道所需EXE的位置,我可以通过调用外部进程调用方来打开它。但是,识别新打开的窗口并设置其位置的最佳方法是什么?可以安全地假设,具有相同名称的程序可能已经打开(例如,cmd的两个实例)

我相信,一旦确定了窗口,我就可以设置它的位置

这是正确的问题吗?有没有办法打开一个程序并接收一个HWND句柄

在事件中,我有以下代码:

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";
    }

}
void回调过程(HWINEVENTHOOK钩子、DWORD事件、HWND HWND、LONG obj、LONG child、DWORD thr、DWORD时间){
如果(IsWindow(hWnd)){
WINDOWPLACEMENT*wp=新的WINDOWPLACEMENT();
wp->length=sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd,wp);
wp->rcNormalPosition.top=(长)363;
wp->rcNormalPosition.bottom=(长)1021;
wp->rcNormalPosition.left=(长)1444;
wp->rcNormalPosition.right=(长)2551;
BOOL tmp=设置窗口位置(hWnd,wp);

cout
SetWinEventHook
可以捕获正在创建/显示的窗口。我已经做了很多谷歌搜索,但我只是部分了解事件挂钩。我正在将我所拥有的添加到原始注释中,但挂钩似乎没有捕获任何内容,proc函数似乎也没有被调用。我不能说我自己能力太强,但我注意到了像
EVENT\u OBJECT\u这样的东西可以更好地显示
。为了确定,您可以接受更多并记录发生的值。