|
@@ -996,6 +996,49 @@ HWND GetProcessMainWnd(const DWORD& dwTagetProcessId, LPCTSTR lpTagetWndName)
|
|
|
return hTagetProcessWnd;
|
|
|
}
|
|
|
|
|
|
+BOOL CALLBACK EnumChildWindowCallBack(HWND hWnd, LPARAM lParam)
|
|
|
+{
|
|
|
+ DWORD dwPid = 0;
|
|
|
+ LPWNDDATA lpWndData = (LPWNDDATA)lParam;
|
|
|
+ GetWindowThreadProcessId(hWnd, &dwPid); // 获得找到窗口所属的进程
|
|
|
+ if(dwPid == lpWndData->dwPid) // 判断是否是目标进程的窗口
|
|
|
+ {
|
|
|
+ TCHAR buf[MAX_PATH];
|
|
|
+ TCHAR szClassName[MAX_PATH] = {0};
|
|
|
+ SendMessage(hWnd, WM_GETTEXT, MAX_PATH, (LPARAM)buf);
|
|
|
+ GetClassName(hWnd, szClassName, MAX_PATH);
|
|
|
+ TRACE3("B-0x%08X, %s, %s\n", hWnd, szClassName, buf); // 输出窗口信息
|
|
|
+ // 此处如果再递归,会导致重复查找2次子窗口;
|
|
|
+ //EnumChildWindows(hWnd, EnumChildWindowCallBack, lParam); // 递归查找子窗口
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ return FALSE;
|
|
|
+}
|
|
|
+
|
|
|
+BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)
|
|
|
+{
|
|
|
+ DWORD dwPid = 0;
|
|
|
+ LPWNDDATA lpWndData = (LPWNDDATA)lParam;
|
|
|
+ GetWindowThreadProcessId(hWnd, &dwPid); // 获得找到窗口所属的进程
|
|
|
+ if(dwPid == lpWndData->dwPid) // 判断是否是目标进程的窗口
|
|
|
+ {
|
|
|
+ TCHAR buf[MAX_PATH];
|
|
|
+ TCHAR szClassName[MAX_PATH] = {0};
|
|
|
+ SendMessage(hWnd, WM_GETTEXT, MAX_PATH, (LPARAM)buf);
|
|
|
+ GetClassName(hWnd, szClassName, MAX_PATH);
|
|
|
+ TRACE3("A-0x%08X, %s, %s\n", hWnd, szClassName, buf); // 输出窗口信息
|
|
|
+ EnumChildWindows(hWnd, EnumChildWindowCallBack, lParam); // 继续查找子窗口
|
|
|
+ }
|
|
|
+
|
|
|
+ return TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+BOOL EnumProcessAllWnd(LPWNDDATA lpWndData)
|
|
|
+{
|
|
|
+ return EnumWindows(EnumWindowCallBack, (LPARAM)lpWndData);
|
|
|
+}
|
|
|
+
|
|
|
BOOL GetWeChatPath()
|
|
|
{
|
|
|
// 通过注册表获取微信安装目录;
|