소스 검색

居中显示仍有问题。

Jeff 6 년 전
부모
커밋
98a2e1b2ce
4개의 변경된 파일28개의 추가작업 그리고 41개의 파일을 삭제
  1. 6 2
      source/hook/WeChats/CWxObject.cpp
  2. 7 0
      source/hook/WeChats/Global.cpp
  3. 13 39
      source/hook/WeChats/WeChatsDlg.cpp
  4. 2 0
      source/hook/WeChats/WeChatsDlg.h

+ 6 - 2
source/hook/WeChats/CWxObject.cpp

@@ -82,6 +82,10 @@ CWxObject::~CWxObject()
 	if (m_hWxProcess)
 		CloseHandle(m_hWxProcess);
 	m_hWxProcess = NULL;
+
+	// 退出主窗口;
+	// 注:必须在主窗口销毁前分离;
+	DetachWxWnd();
 }
 
 void CWxObject::setInjectionObj(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath)
@@ -266,8 +270,8 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 		}
 
 		// 注意:MoveWindow/SetWindowPos使用的是父窗口的坐标,如果父窗口为NULL,则使用的是屏幕坐标;
-		//::MoveWindow(hWxWnd, rcCenter.left, rcCenter.top, rcCenter.right, rcCenter.bottom, true);
-		::SetWindowPos(hWxWnd, NULL, rcCenter.left, rcCenter.top, rcCenter.right, rcCenter.bottom, SWP_SHOWWINDOW | SWP_HIDEWINDOW);
+		::MoveWindow(hWxWnd, rcCenter.left, rcCenter.top, rcCenter.right, rcCenter.bottom, true);
+		//::SetWindowPos(hWxWnd, NULL, rcCenter.left, rcCenter.top, rcCenter.right, rcCenter.bottom, SWP_SHOWWINDOW | SWP_HIDEWINDOW);
 
 		//窗口重绘,(因创建exe时,设置为SW_HIDE,导致exe窗口会被父窗口覆盖一部分)
 		//Invalidate();

+ 7 - 0
source/hook/WeChats/Global.cpp

@@ -56,6 +56,9 @@ int GetIniInfo(LPCTSTR lpIniDir /* = NULL */, LPCTSTR lpIniName /* = NULL */)
 
 	// ¶¯Ì¬¿â·¾¶;
 	_stprintf_s(g_szDynamicLibraryPath, _T("%shook.dll"), g_szModulePath);
+#ifdef _DEBUG
+	WriteTextLog(g_szDynamicLibraryPath);
+#endif
 
 	if (lpIniDir != NULL && lpIniName != NULL)
 		_stprintf_s(g_szIniFile, _T("%s%s"), lpIniDir, lpIniName);
@@ -220,6 +223,10 @@ HANDLE FindModuleEx(LPCTSTR lpModuleName, DWORD dwPid)
 		for (UINT i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
 		{
 			GetModuleFileNameEx(hProcess, hMods[i], szModName, _countof(szModName));
+#ifdef _DEBUG
+			OutputDebugString(szModName);
+			OutputDebugString(_T("\n"));
+#endif
 			if (_tcsicmp(lpModuleName, szModName) == 0)
 			{
 				CloseHandle(hProcess);

+ 13 - 39
source/hook/WeChats/WeChatsDlg.cpp

@@ -170,47 +170,12 @@ void CWeChatsDlg::OnBnClickedOpenWx()
 	//vector<DWORD> vtPID = FindAllProcess(_T("AliIM.exe"));
 	if (vtPID.size() != 0)
 	{
-		CWxObject wxobj(*vtPID.begin(), g_szDynamicLibraryPath);
-		if (wxobj.FindWxMainWnd())
+		m_wxObj.setInjectionObj(*vtPID.begin(), g_szDynamicLibraryPath);
+		if (m_wxObj.FindWxMainWnd())
 		{
-			wxobj.InjectDynamicLibrary();
-			wxobj.Attach2MainWnd(GetDlgItem(WX_RECT), FALSE);
-			Sleep(10000);
-			wxobj.DetachWxWnd();
+			m_wxObj.InjectDynamicLibrary();
+			m_wxObj.Attach2MainWnd(GetDlgItem(WX_RECT), FALSE);
 		}
-		//if (wxobj.FindWxMainWnd())
-		//if (wxobj.FindWxLoginWnd())
-		//{
-		//	//g_hWxWnd = wxobj.GetWxMainWnd();
-		//	g_hWxWnd = wxobj.GetWxLoginWnd();
-		//	if (g_hWxWnd != NULL)
-		//	{
-		//		// 获取微信窗口的样式;
-		//		DWORD dwStyle = ::GetWindowLong(g_hWxWnd, GWL_STYLE);
-		//		// WS_CLIPSIBLINGS告诉父窗口不要绘制子窗口出现的区域;
-		//		dwStyle |= WS_CLIPSIBLINGS; 
-		//		// 重新设置窗口样式 ;
-		//		::SetWindowLong(g_hWxWnd, GWL_STYLE, dwStyle);
-
-		//		CRect rect;
-		//		GetDlgItem(WX_RECT)->GetWindowRect(&rect);
-		//		// 设置背景透明;
-		//		::SetParent(g_hWxWnd, GetDlgItem(WX_RECT)->m_hWnd);//set parent of ms paint to our dialog.
-		//		//::SetParent(hWxWnd, m_hWnd);
-		//		// 擦除背景;
-		//		//SetWindowLong(hWxWnd, GWL_STYLE, WS_VISIBLE);//eraze title of ms paint window.
-		//		//Positioning ms paint.
-		//		ScreenToClient(wxobj.m_rcWnd);
-		//		::MoveWindow(g_hWxWnd, wxobj.m_rcWnd.left, wxobj.m_rcWnd.top, wxobj.m_rcWnd.right, wxobj.m_rcWnd.bottom, true);
-		//		//ClientToScreen(&rect);
-		//		//ScreenToClient(&rect);
-		//		//::SetWindowPos(hWxWnd, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_SHOWWINDOW | SWP_HIDEWINDOW);
-		//		//窗口重绘,(因创建exe时,设置为SW_HIDE,导致exe窗口会被父窗口覆盖一部分)
-		//		//Invalidate();
-		//		::UpdateWindow(g_hWxWnd);
-		//		::ShowWindow(g_hWxWnd, SW_SHOW);
-		//	}
-		//}
 	}
 #endif
 }
@@ -226,3 +191,12 @@ HBRUSH CWeChatsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
 	return hbr;
 }
+
+
+BOOL CWeChatsDlg::DestroyWindow()
+{
+	// TODO: 在此添加专用代码和/或调用基类
+	m_wxObj.DetachWxWnd();
+	m_wxObj.EjectDynamicLibrary();
+	return CDialog::DestroyWindow();
+}

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

@@ -31,6 +31,8 @@ protected:
 	afx_msg HCURSOR OnQueryDragIcon();
 	DECLARE_MESSAGE_MAP()
 public:
+	CWxObject m_wxObj;
 	afx_msg void OnBnClickedOpenWx();
 	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+	virtual BOOL DestroyWindow();
 };