Selaa lähdekoodia

CWxObject类添加:m_WxMainWndInfo、m_WxLoginWndInfo

Jeff 6 vuotta sitten
vanhempi
commit
9e04ae8153

+ 27 - 21
source/hook/WeChats/CWxObject.cpp

@@ -8,6 +8,7 @@
 #define WX_LOGIN_WND_NAME _T("怬")
 #define WX_LOGIN_WND_CLASS_NAME _T("WeChatLoginWndForPC")
 
+HHOOK	CWxObject::m_hook = NULL;
 BOOL ASCII2UNICODE(IN LPCCH lpASCIIStr, OUT PWCH pUNICODEStr, IN CONST INT& nUNICODEStrLen)
 {
 	if (lpASCIIStr == NULL)
@@ -38,9 +39,9 @@ CWxObject::CWxObject()
 	, m_hEjectThread(NULL)
 	, m_dwPathLen(0)
 	, m_bAttached(FALSE)
-	, m_hook(NULL)
+	//, m_hook(NULL)
 {
-
+	memset(&m_WxMainWndInfo, 0, sizeof(WNDINFO));
 }
 
 CWxObject::CWxObject(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath)
@@ -54,8 +55,9 @@ CWxObject::CWxObject(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath)
 	, m_hEjectThread(NULL)
 	, m_dwPathLen(0)
 	, m_bAttached(FALSE)
-	, m_hook(NULL)
+	//, m_hook(NULL)
 {
+	memset(&m_WxMainWndInfo, 0, sizeof(WNDINFO));
 	setInjectionObj(dwProcId, lpDynamicLibraryPath);
 }
 
@@ -196,15 +198,14 @@ BOOL CWxObject::EjectDynamicLibrary()
 
 BOOL CWxObject::FindWxMainWnd()
 {
-	WNDINFO wnd;
-	wnd.hWxWnd = NULL;
-	wnd.dwWxProcId = m_dwWxProcId;
-	_stprintf_s(wnd.szWndName, WX_MAIN_WND_NAME);
-	_stprintf_s(wnd.szClassName, WX_MAIN_WND_CLASS_NAME);
-	if (::EnumWindows(&EnumWindowsProc, (LPARAM)&wnd) == FALSE)
+	m_WxMainWndInfo.hWxWnd = NULL;
+	m_WxMainWndInfo.dwWxProcId = m_dwWxProcId;
+	_stprintf_s(m_WxMainWndInfo.szWndName, WX_MAIN_WND_NAME);
+	_stprintf_s(m_WxMainWndInfo.szClassName, WX_MAIN_WND_CLASS_NAME);
+	if (::EnumWindows(&EnumWindowsProc, (LPARAM)& m_WxMainWndInfo) == FALSE)
 	{
-		m_hWxMainWnd = wnd.hWxWnd;
-		m_rcWxWnd = wnd.rcWnd;
+		m_hWxMainWnd = m_WxMainWndInfo.hWxWnd;
+		m_rcWxWnd = m_WxMainWndInfo.rcWnd;
 		return TRUE;
 	}
 
@@ -213,15 +214,14 @@ BOOL CWxObject::FindWxMainWnd()
 
 BOOL CWxObject::FindWxLoginWnd()
 {
-	WNDINFO wnd;
-	wnd.hWxWnd = NULL;
-	wnd.dwWxProcId = m_dwWxProcId;
-	_stprintf_s(wnd.szWndName, WX_LOGIN_WND_NAME);
-	_stprintf_s(wnd.szClassName, WX_LOGIN_WND_CLASS_NAME);
-	if (::EnumWindows(&EnumWindowsProc, (LPARAM)&wnd) == FALSE)
+	m_WxLoginWndInfo.hWxWnd = NULL;
+	m_WxLoginWndInfo.dwWxProcId = m_dwWxProcId;
+	_stprintf_s(m_WxLoginWndInfo.szWndName, WX_LOGIN_WND_NAME);
+	_stprintf_s(m_WxLoginWndInfo.szClassName, WX_LOGIN_WND_CLASS_NAME);
+	if (::EnumWindows(&EnumWindowsProc, (LPARAM)& m_WxLoginWndInfo) == FALSE)
 	{
-		m_hWxLoginWnd = wnd.hWxWnd;
-		m_rcWxWnd = wnd.rcWnd;
+		m_hWxLoginWnd = m_WxLoginWndInfo.hWxWnd;
+		m_rcWxWnd = m_WxLoginWndInfo.rcWnd;
 		return TRUE;
 	}
 
@@ -325,7 +325,7 @@ BOOL CWxObject::DetachWxWnd()
 BOOL CWxObject::SetHook()
 {
 	if (m_hook == NULL)
-		m_hook = SetWindowsHookEx(WH_CBT, HookProc, NULL, ::GetCurrentThreadId());
+		m_hook = SetWindowsHookEx(WH_CBT, HookProc, NULL, m_WxMainWndInfo.dwThreadId);
 	return 0;
 }
 
@@ -357,5 +357,11 @@ BOOL CWxObject::EnumWindowsProc(HWND hwnd, LPARAM lParam)
 
 LRESULT CWxObject::HookProc(int nCode, WPARAM wParam, LPARAM lParam)
 {
-	return LRESULT();
+	if (nCode == HCBT_MINMAX)
+	{
+		WriteTextLog(_T("´°¿ÚHCBT_MINMAX"));
+		return 1;
+	}
+
+	return CallNextHookEx(m_hook, nCode, wParam, lParam);
 }

+ 5 - 3
source/hook/WeChats/CWxObject.h

@@ -33,7 +33,9 @@ public:
 	HANDLE			m_hWxProcess;
 	// 进程窗口句柄;
 	HWND			m_hWxMainWnd;
+	WNDINFO			m_WxMainWndInfo;
 	HWND			m_hWxLoginWnd;
+	WNDINFO			m_WxLoginWndInfo;
 	// 窗口大小;
 	CRect			m_rcWxWnd;
 	// 是否附加到主窗口;
@@ -53,11 +55,11 @@ private:
 	// 卸载线程句柄;
 	HANDLE			m_hEjectThread;
 	// 
-	HHOOK			m_hook;
+	static	HHOOK	m_hook;
 public:
 	inline DWORD GetWxProcId() { return m_dwWxProcId; }
-	inline HWND GetWxMainWnd() { return m_hWxMainWnd; }
-	inline HWND GetWxLoginWnd() { return m_hWxLoginWnd; }
+	inline HWND GetWxMainWnd() { return m_WxMainWndInfo.hWxWnd; }
+	inline HWND GetWxLoginWnd() { return m_WxLoginWndInfo.hWxWnd; }
 	// dll路径和要注入的进程id;
 	void setInjectionObj(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath);
 	BOOL InjectDynamicLibrary();

+ 1 - 0
source/hook/WeChats/WeChatsDlg.cpp

@@ -181,6 +181,7 @@ void CWeChatsDlg::OnBnClickedOpenWx()
 		{
 			m_wxObj.InjectDynamicLibrary();
 			m_wxObj.Attach2MainWnd(GetDlgItem(WX_RECT), FALSE);
+			m_wxObj.SetHook();
 		}
 	}
 }