|
@@ -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;
|
|
|
+}
|