2012-09-13 315 views
2

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

+0

查找信息的EnumWindows的事情:http://stackoverflow.com/questions/1268314/findwindow-with -partial-window-title-windows -c?rq = 1 – lfxgroove

回答

4

这是我刚上2010 MSVS测试的代码工作的一块完美的作品:这里

#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); 
} 
+0

我仍在努力让代码在我的程序中编译。目前遇到一些小问题。 – Jason

+0

标记为答案。谢谢! – Jason

1

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