通过C ++获取外部运行程序的窗口句柄

时间:2012-09-13 15:05:22

标签: c++ window-handles findwindow

我需要一个外部运行的程序来调整大小。对我来说,标题的一部分是与该实例相关的版本和其他特定信息。我知道应该在不同版本中保持一致的子字符串。 我尝试过Findwindow()函数,如果你有标题的确切措辞,它可以很好地工作,但是当你只有一部分时却不行。我也试过EnumWindows,但我相信它有同样的局限性(我没有太多运气)。 我觉得我能做的最简单的事情(如果可能的话)是从图像名称中获取窗口句柄以进行调整大小。 想法?

2 个答案:

答案 0 :(得分:4)

这是我刚刚在MSVS 2010上测试过的一段可靠的代码:

#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <windows.h>


BOOL CALLBACK FindWindowBySubstr(HWND hwnd, LPARAM substring)
{
    const DWORD TITLE_SIZE = 1024;
    TCHAR windowTitle[TITLE_SIZE];

    if (GetWindowText(hwnd, windowTitle, TITLE_SIZE))
    {
        //_tprintf(TEXT("%s\n"), windowTitle);
        // Uncomment to print all windows being enumerated
        if (_tcsstr(windowTitle, LPCTSTR(substring)) != NULL)
        {
            // We found the window! Stop enumerating.
            return false;
        }
    }
    return true; // Need to continue enumerating windows
}

int main() 
{
    const TCHAR substring[] = TEXT("Substring");
    EnumWindows(FindWindowBySubstr, (LPARAM)substring);
}

答案 1 :(得分:1)

EnumWindows专门用于此。您创建自己的回调函数以传递给EnumWindows,它将为它枚举的每个窗口调用您的回调函数,并将其传递给窗口的hwnd。您可以在回调函数内部调用GetWindowText来获取窗口标题并像其他任何文本一样搜索该文本。你对这段代码有什么问题?你为什么不发布它?