想做个DLL钩子,按下F5就弹出对话框。
代码如下
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
        if((wParam == VK_F5)&&((lParam&(1<<31))==0))
{
Cdddd mydlg;
mydlg.DoModal();
AfxMessageBox("3!");
}
return CallNextHookEx(NULL,code,wParam,lParam);
}
void SetHook()
{
HWND myhwnd=::FindWindow(NULL,"Plants vs. Zombies");
if(!myhwnd)
{
AfxMessageBox("游戏尚未运行!");
return;
}
DWORD Tid,Pid;
Tid = GetWindowThreadProcessId(myhwnd,&Pid);
SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
}
_declspec (dllimport) void SetHook();
#pragma comment(lib,"一键呼出.lib");
void CPvz_wgDlg::OnButton1() 
{
SetHook();
}
实际情况是按下F5后messagebox弹出,但无对话框弹出
若将上面的KeyboardProc函数改为
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if((wParam == VK_F5)&&((lParam&(1<<31))==0))
{
p=new wg;
p->Create(IDD_DIALOG1);
AfxMessageBox("3!");
        p->ShowWindow(SW_SHOW);
}
return CallNextHookEx(NULL,code,wParam,lParam);
}
则按下F5后无messagebox弹出,且原对话框消失。
求高手赐教。