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