解决方案原链接https://www.oschina.net/question/1160676_2187843
方案
1.使用FindeWindow先找到第一个窗口
HWND hWnd = NULL;
hWnd =::FindWindow(NULL, WindowName);
2.使用FindWindowEx找接下来同名的窗口
hWnd = ::FindWindowEx(NULL, hWnd,NULL, WindowName);
函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow)
hwndParent:要查找子窗口的父窗口句柄,如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
hwndChildAfter :子窗口句柄。从子窗口开始查找。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。
lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。
再加一个使用示例吧,下面这个是用来控制flash位置的
@2020.8.31
新增两个函数,辅助使用
HWND GetAppWnd(const char *AppTitle)
{
HWND hwnd=NULL;
if (!AppTitle)
{
//无输入默认最顶端
hwnd = ::GetForegroundWindow();
}
else
{
hwnd = ::FindWindow(NULL, AppTitle);
}
return hwnd;
}
CString GetAppRunTitle(HWND AppHwnd)
{
char title[MAX_PATH];
::GetWindowText(AppHwnd, title, MAX_PATH);
CString t= title;
return t;
}