Эх сурвалжийг харах

删除CWxObject类中的GetWeChatPath函数,将此函数移动到CWxMgr类中。

Jeff 6 жил өмнө
parent
commit
6a73a64515

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

@@ -9,6 +9,7 @@
 #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)
@@ -110,7 +111,7 @@ void CWxObject::setInjectionObj(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath)
 	_tcscpy_s(m_szDllPath, lpDynamicLibraryPath);
 	ASCII2UNICODE(lpDynamicLibraryPath, m_wszDllPath, MAX_PATH);
 #endif
-	
+
 	//m_hWxProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, m_dwWxProcId);
 	m_hWxProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, m_dwWxProcId);
 	if (m_hWxProcess == NULL)
@@ -228,7 +229,7 @@ BOOL CWxObject::FindWxLoginWnd()
 	return FALSE;
 }
 
-BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
+BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd)
 {
 	HWND hWxWnd = bLoginWnd ? m_hWxLoginWnd : m_hWxMainWnd;
 	if (hWxWnd != NULL)
@@ -236,7 +237,7 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 		// 获取微信窗口的样式;
 		DWORD dwStyle = ::GetWindowLong(hWxWnd, GWL_STYLE);
 		// WS_CLIPSIBLINGS告诉父窗口不要绘制子窗口出现的区域;
-		//dwStyle |= WS_CLIPSIBLINGS;
+		dwStyle |= WS_CLIPSIBLINGS;
 		// 如果窗口隐藏的,显示出来;
 		dwStyle |= WS_VISIBLE;
 		// 重新设置窗口样式 ;
@@ -253,7 +254,7 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 		pMainWnd->ScreenToClient(&rect);
 		// 居中显示;
 		CRect rcDisplay = rect;
-		if (0)
+		if (bLoginWnd)
 		{// 居中显示;
 			if (m_rcWxWnd.Width() >= rect.Width())
 			{
@@ -280,8 +281,6 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 			// 注意:MoveWindow/SetWindowPos使用的是父窗口的坐标,如果父窗口为NULL,则使用的是屏幕坐标;
 			::MoveWindow(hWxWnd, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), true);
 			//::SetWindowPos(hWxWnd, NULL, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), WM_WINDOWPOSCHANGING|SWP_SHOWWINDOW | SWP_HIDEWINDOW);
-			if (!bLoginWnd)
-				::PostMessage(hWxWnd, WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
 		}
 		else
 		{//最大化显示并固定;
@@ -291,7 +290,7 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 				::PostMessage(hWxWnd, WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
 			//::SetWindowPos(hWxWnd, NULL, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), WM_MOVE| WM_SIZE| WM_WINDOWPOSCHANGING| WM_NCCALCSIZE | SWP_SHOWWINDOW);
 		}
-		
+
 		//窗口重绘,(因创建exe时,设置为SW_HIDE,导致exe窗口会被父窗口覆盖一部分)
 		pMainWnd->Invalidate();
 		::UpdateWindow(hWxWnd);
@@ -307,10 +306,10 @@ BOOL CWxObject::DetachWxWnd()
 	if (m_bAttached)
 	{
 		//if (m_hWxMainWnd && GetParent(m_hWxMainWnd))
-		if (m_hWxMainWnd ) // 使用GetParent可能返回NULL
+		if (m_hWxMainWnd) // 使用GetParent可能返回NULL
 			::SetParent(m_hWxMainWnd, NULL);
 
-		if (m_hWxLoginWnd )
+		if (m_hWxLoginWnd)
 			::SetParent(m_hWxLoginWnd, NULL);
 
 		m_bAttached = FALSE;
@@ -325,7 +324,7 @@ BOOL CWxObject::DetachWxWnd()
 BOOL CWxObject::SetHook()
 {
 	if (m_hook == NULL)
-		m_hook = SetWindowsHookEx(WH_CBT, HookProc, NULL, m_WxMainWndInfo.dwThreadId);
+		m_hook = SetWindowsHookEx(WH_CBT, HookProc, NULL, ::GetCurrentThreadId());
 	return 0;
 }
 
@@ -334,10 +333,10 @@ BOOL CWxObject::EnumWindowsProc(HWND hwnd, LPARAM lParam)
 	DWORD dwProcId = 0, dwThreadId;
 	TCHAR szWndName[MAX_PATH] = { 0 };
 	TCHAR szClassName[MAX_PATH] = { 0 };
-	WNDINFO* pWndInfo = (WNDINFO*)lParam;	
+	WNDINFO* pWndInfo = (WNDINFO*)lParam;
 	dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcId);
-    if(dwProcId == pWndInfo->dwWxProcId)
-    {
+	if (dwProcId == pWndInfo->dwWxProcId)
+	{
 		pWndInfo->hWxWnd = hwnd;
 		pWndInfo->dwThreadId = dwThreadId;
 		::GetWindowText(hwnd, szWndName, MAX_PATH);
@@ -350,13 +349,14 @@ BOOL CWxObject::EnumWindowsProc(HWND hwnd, LPARAM lParam)
 			::GetWindowRect(hwnd, &pWndInfo->rcWnd);
 			return FALSE;
 		}
-    }
+	}
 
-    return TRUE;
+	return TRUE;
 }
 
 LRESULT CWxObject::HookProc(int nCode, WPARAM wParam, LPARAM lParam)
 {
+	WriteTextLog(_T("HookProc被调用"));
 	if (nCode == HCBT_MINMAX)
 	{
 		WriteTextLog(_T("窗口HCBT_MINMAX"));
@@ -365,3 +365,9 @@ LRESULT CWxObject::HookProc(int nCode, WPARAM wParam, LPARAM lParam)
 
 	return CallNextHookEx(m_hook, nCode, wParam, lParam);
 }
+
+
+BOOL CWxObject::OpenWeChat()
+{
+	return 0;
+}

+ 2 - 0
source/hook/WeChats/CWxObject.h

@@ -70,6 +70,8 @@ public:
 	BOOL DetachWxWnd();
 	BOOL SetHook();
 
+	BOOL OpenWeChat();
+
 	static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
 	static LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);
 };