|
@@ -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);
|
|
|
+
|
|
|
+
|
|
|
+ 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()
|
|
|
{
|
|
|
|