|
@@ -38,6 +38,7 @@ CWxObject::CWxObject()
|
|
|
, m_hEjectThread(NULL)
|
|
|
, m_dwPathLen(0)
|
|
|
, m_bAttached(FALSE)
|
|
|
+ , m_hook(NULL)
|
|
|
{
|
|
|
|
|
|
}
|
|
@@ -53,6 +54,7 @@ CWxObject::CWxObject(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath)
|
|
|
, m_hEjectThread(NULL)
|
|
|
, m_dwPathLen(0)
|
|
|
, m_bAttached(FALSE)
|
|
|
+ , m_hook(NULL)
|
|
|
{
|
|
|
setInjectionObj(dwProcId, lpDynamicLibraryPath);
|
|
|
}
|
|
@@ -87,6 +89,9 @@ CWxObject::~CWxObject()
|
|
|
// 注:必须在主窗口销毁前分离;
|
|
|
if (!m_bAttached)
|
|
|
DetachWxWnd();
|
|
|
+
|
|
|
+ if (m_hook)
|
|
|
+ UnhookWindowsHookEx(m_hook);
|
|
|
}
|
|
|
|
|
|
void CWxObject::setInjectionObj(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath)
|
|
@@ -317,6 +322,13 @@ BOOL CWxObject::DetachWxWnd()
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+BOOL CWxObject::SetHook()
|
|
|
+{
|
|
|
+ if (m_hook == NULL)
|
|
|
+ m_hook = SetWindowsHookEx(WH_CBT, HookProc, NULL, ::GetCurrentThreadId());
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
BOOL CWxObject::EnumWindowsProc(HWND hwnd, LPARAM lParam)
|
|
|
{
|
|
|
DWORD dwProcId = 0, dwThreadId;
|
|
@@ -341,4 +353,9 @@ BOOL CWxObject::EnumWindowsProc(HWND hwnd, LPARAM lParam)
|
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+LRESULT CWxObject::HookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|
|
+{
|
|
|
+ return LRESULT();
|
|
|
+}
|