写了个钩子,该怎么处理

写了个钩子
自己写了个钩子,由于第一次写,有毛病也检查不出来!
大家帮个忙啊
先是建了个基于对话框的MFc工程,然后又在此工作区间上建了个Mfc 常规dll工程,从属于刚建的那个对话框工程

在Dll工程里面有这三个函数:
//////////////////////////.h

#define WM_PRSCRN WM_USER + 1

#include "resource.h" // main symbols
HHOOK g_hHook;
HWND g_hHwnd;

LRESULT CALLBACK PrScrn (int, WPARAM, LPARAM);
extern "C" BOOL EXPORT SetHook (HWND, HINSTANCE, DWORD);

/////////////////////////////.cpp
HMODULE WINAPI ModuleFromAddress(PVOID pv) 
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
LRESULT CALLBACK PrScrn (int nCode,WPARAM wParam,LPARAM lParam)
{
int t = 0;
PostMessage(g_hHwnd, WM_PRSCRN, wParam, lParam);///////////////////////////A
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
extern "C" BOOL EXPORT SetHook (HWND hwnd, HINSTANCE hmod, DWORD dwThreadID)
{
g_hHwnd = hwnd;
g_hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)PrScrn, ModuleFromAddress(PrScrn), dwThreadID);
return TRUE;
}




在对话框工程里面这样调用了上面的函数

HINSTANCE hinst;
typedef BOOL (*lpSetHook) (HWND, HINSTANCE, DWORD);
lpSetHook SetHook;
hinst = LoadLibrary("..\\hook\\debug\\hook.dll");
if (hinst != NULL)
{
SetHook = (lpSetHook)GetProcAddress(hinst, "SetHook");
if (SetHook != NULL)
{
int t = SetHook (m_hWnd, (HINSTANCE)GetWindowLong(m_hWnd, GWL_HINSTANCE), 0);
int m = 0;
}
}

而响应#define WM_PR_SCRN WM_USER + 1的函数为:

ON_MESSAGE(WM_PR_SCRN, OnPrScrnMsg)

afx_msg void CServerSocketDlg::OnPrScrnMsg (WPARAM wParam,LPARAM lParam)
{
////////////////////////////////////////B
}

在调试Dll工程时,我把断点设在了A处,当我按键时,显然程序卡了,好像是停在了某个地方,但不知道是哪儿,此时机子很卡,当我勉强把对话框关闭后,程序又在A片停下了!
当调试对话框工程时,跟上面一样,只是把断点设在了B
大家看看这是什么回事?



------解决方案--------------------
你既然是hook Keyboard消息,
又在debug,很麻烦阿,
建议输出想看得内容到文件中。
------解决方案--------------------
换成静态连接试试!
------解决方案--------------------
我这里有获取密码的hook代码,需要的话我发给你