大家好!又遇到问题了……--!我在DLL里写了个键盘HOOK函数,但是好像起不到作用。调试的时候一步步走,能进一次键盘消息的处理函数,如果直接运行函数则一点效果也没有,我把代码简化后在下面,希望大家帮我看看哪出了问题。---DLL中的函数(Server程序调用该DLL中的SetHook函数,没有写卸载DLL的代码)----void SetHook(SOCKET s,PVOID pvoid)
{
sock = s;
lpmessage = (MY_MESSAGE*)pvoid;
g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInst,0);//这里设断点
//如果这里设断点,则停一会再按F10运行下一行代码,弹出KeyboardProc中调用的对话框;
//如果这里没有断点或直接运行程序,则没有反应。KeyboardProc函数简化后好下:
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MessageBox(NULL,"aaaaaaaaa","1111111",0);//验证函数是否执行
return 1;
}
{
sock = s;
lpmessage = (MY_MESSAGE*)pvoid;
g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInst,0);//这里设断点
//如果这里设断点,则停一会再按F10运行下一行代码,弹出KeyboardProc中调用的对话框;
//如果这里没有断点或直接运行程序,则没有反应。KeyboardProc函数简化后好下:
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MessageBox(NULL,"aaaaaaaaa","1111111",0);//验证函数是否执行
return 1;
}
大概是这样引起DLL资料被释放?这个线程函数代码如下:unsigned __stdcall jpjl(void* lpvoid)
{
MY_MESSAGE* lpmessage = (MY_MESSAGE*)lpvoid; //以后再处理窗口于鼠标监视
SOCKET s = sock;
DWORD numbersend;
DWORD FLAG = 0; SetHook(s,lpmessage); delete lpmessage;
while(1)//这是我后来加的,这样键盘勾子就能使用了。不过这方法似乎不太好
{ //希望能改进,不知道大家有什么好方法吗?
Sleep(4000);
}
return 0;
}这个帖子就当散分吧,随便接分表客气啊各位!!
恩,坦白了,我是来接分的
http://topic.csdn.net/u/20101113/15/b35ffd08-6c41-4b81-9b85-fc00992fb3e3.html?92813