本人刚学VC不久,现在想写个钩子程序,但是安装钩子没问题,就是按键激活窗体的时候报了一个错误:错误提示如下:
Debug Assertion Failed!
program: c:\windows\explorere.exe
file: afxwin1.inl
line:22
For infomation on how your ptrogram can cause an assertion
failure,see the visual c++ ......
出现几个按钮:终止 重试 忽略
出现此问题该如何处理呀,请高手指点指点,谢谢!!
Debug Assertion Failed!
program: c:\windows\explorere.exe
file: afxwin1.inl
line:22
For infomation on how your ptrogram can cause an assertion
failure,see the visual c++ ......
出现几个按钮:终止 重试 忽略
出现此问题该如何处理呀,请高手指点指点,谢谢!!
{
BOOL bKeyUp = lParam & (1 << 31);
if (wParam == VK_F12 && nCode == HC_ACTION)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CWnd *pCWnd = CWnd::GetForegroundWindow();
pCWndWGMain = new CHookDlg();
pCWndWGMain->Create(IDD_HOOKFRM_DIALOG, pCWnd);
pCWndWGMain->ShowWindow(SW_SHOW);
}
else
{
pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
}
return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}钩子程序,激活代码
{
BOOL bKeyUp = lParam & (1 << 31);
if (wParam == VK_F12 && nCode == HC_ACTION)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
// CDialog dlg(IDD_ABOUTBOX);
// dlg.DoModal();
//CWnd *pCWnd = CWnd::GetForegroundWindow();
//pCWndWGMain = new CHookDlg();
//pCWndWGMain->Create(IDD_HOOKFRM_DIALOG, pCWnd);
// pCWndWGMain->ShowWindow(SW_SHOW);
// pCWndWGMain->DoModal();
// hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_HOOKFRM_DIALOG), NULL,(DLGPROC)DlgProc);
//ShowWindow(hwndDLG, SW_SHOW);
CDialog dlg(IDD_ABOUTBOX);
dlg.DoModal();
}
else
{
pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
}
return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}
CDialog dlg(IDD_ABOUTBOX);
dlg.DoModal();
就编译错误,我关掉AFX_MANAGE_STATE后可以正常编译,但是在主exe中按键可以激活并能正常显示要调用的窗体,但是其它地方按键的话还是会报错,比如:记事本里
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL bKeyUp = lParam & (1 << 31);
if (wParam == VK_F12 && nCode == HC_ACTION)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());如果加上编译就错误,提示
_DllMain@12 already defined in threeDll.obj
__pRawDllMain already defined in threeDll.obj; second definition ignored
等等错误
CWnd *pCWnd = CWnd::GetForegroundWindow();
pCWndWGMain = new CHookDlg();
pCWndWGMain->Create(IDD_HOOKFRM_DIALOG, pCWnd);
pCWndWGMain->ShowWindow(SW_SHOW);
}
else
{
pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
}
return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}