DLL中主要代码:extern "C" __declspec(dllexport) BOOL WINAPI InstallHook(DWORD ThreadId)
{
if(g_hhook == NULL)
{
g_hhook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, instance , ThreadId);
if(g_hhook != NULL)
return TRUE;
}
return FALSE;
}在EXE中调用代码:void CMainDlg::OnButton1()
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb=sizeof(si); si.lpReserved=NULL; si.lpDesktop=NULL;
si.lpTitle=NULL; si.cbReserved2=0; si.lpReserved2=NULL;
si.dwFlags=STARTF_USEPOSITION; si.dwX=0; si.dwY=0;
CreateProcess("c:\\windows\\system32\\notepad.exe",NULL,NULL,NULL,FALSE,
CREATE_DEFAULT_ERROR_MODE,NULL,"c:\\windows\\system32",&si,&pi);
DWORD id = pi.dwThreadId;
if(InstallHook(id))
MessageBox("Hook成功");
else
MessageBox("Hook失败");
}运行后弹出BOX说HOOK失败,但当我把DLL中改为全局HOOK时,即
SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, instance , 0);
运行则显示HOOK成功。
{
if(g_hhook == NULL)
{
g_hhook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, instance , ThreadId);
if(g_hhook != NULL)
return TRUE;
}
return FALSE;
}在EXE中调用代码:void CMainDlg::OnButton1()
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb=sizeof(si); si.lpReserved=NULL; si.lpDesktop=NULL;
si.lpTitle=NULL; si.cbReserved2=0; si.lpReserved2=NULL;
si.dwFlags=STARTF_USEPOSITION; si.dwX=0; si.dwY=0;
CreateProcess("c:\\windows\\system32\\notepad.exe",NULL,NULL,NULL,FALSE,
CREATE_DEFAULT_ERROR_MODE,NULL,"c:\\windows\\system32",&si,&pi);
DWORD id = pi.dwThreadId;
if(InstallHook(id))
MessageBox("Hook成功");
else
MessageBox("Hook失败");
}运行后弹出BOX说HOOK失败,但当我把DLL中改为全局HOOK时,即
SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, instance , 0);
运行则显示HOOK成功。
解决方案 »
- 使用WUA接口如何获取每个补丁包大小?
- 对话框背景
- 急急急!跪求高人!MFC连接数据库错误:unhandled exception in 文件名.exe (KERNEL32.DLL):0xE06D7363:...
- AfxMessageBox的使用
- CFtpFileFind获取远程文件的修改时间老是不对!急!急!急!急!
- CChildView若要断承CListBox而不是CWnd,怎么让VC生成代码?
- onhotkey问题
- CDaoWorkspace::RepairDatabase调用失败,请问原因!
- 我想学MFC,请教各位前辈。
- 请教vs2010调用DLL问题
- 我想要容量更小的BMP图!
- 如何执行带参数的返回数据集的存储过程?
我对exe中InstallHook(id)下断,并F11跟进DLL中,发现这时HOOK可以成功,ID可以正常传递
但当我除去断点直接调试时,HOOK又失败了,应该是ID没有传过去。