LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
//return CallNextHookEx(hook, nCode, wParam, lParam);
if (nCode == HCBT_ACTIVATE) {
HWND hWnd = (HWND)wParam;
CBTACTIVATESTRUCT* pas = (CBTACTIVATESTRUCT*)lParam;
//hWnd为就要激活的窗口句柄,而pas-> WndActive为当前激活的窗口句柄
}
return 0; //返回0,允许操作,否则禁止系统的操作
}
SetWindowsHookEx(WH_CBT,HookProc,::GetModuleHandle(NULL),0);
HHOOK IEHook; //全域
LRESULT CALLBACK HookIECallBack(int nCode, WPARAM wParam, LPARAM lParam)
{
if
(nCode >= 0)
{
CWPSTRUCT* data= (CWPSTRUCT*)lParam;
if
(data->message == WM_SIZE)
{
//處理message
}
}
return
CallNextHookEx(IEHook, nCode, wParam, lParam);
}
VARIANT_BOOL ControllerCtrl::HookIEWindow()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString IEClassString = _T("IEFrame"
);
CString IETitleString = _T("New Page - Windows Internet Explorer"
);
//取得IE視窗handle
HWND ieHandle = ::FindWindow(IEClassString,IETitleString);
if
(ieHandle != 0)
{
//取得IE視窗的threadId
LONG threadId = GetWindowThreadProcessId(ieHandle,NULL);
if
(threadId != 0)
{
IEHook = ::SetWindowsHookEx(WH_CALLWNDPROC,HookIECallBack,::GetModuleHandle(NULL),threadId);
if
(IEHook != NULL)
{
return
VARIANT_TRUE;
}
}
else
{
MessageBox(_T("no threadId"
));
}
}
else
{
MessageBox(_T("no ie-handle"
));
}
return
VARIANT_FALSE;
}