Hook的那个函数?把问题写清楚一些

解决方案 »

  1.   

    哦,是WH_KEYBOARD钩子,真是想不明白
      

  2.   

    是发送出错还是根本没发送?
    全局钩子之所以要做成DLL是因为要让其他应用程序调用。钩子一下,系统运行的所有调用了系统USER32.DLL的应用程序都要调用你的DLL,并且是在第一次激活窗口时才载入。被下了钩子的应用程序只有激活窗口得到焦点,得到WM_KEYDOWN,KEYUP等消息时才会调用你的sendto。系统有n个应用程序运行,你的DLL就被调用了<=n次,并且其中函数都运行在不同进程中,所以DLL中的全局变量如果不内存共享的话,每次调用都是会被重置的,这点需要注意。
      

  3.   

    果然是高手....
    但是我用的是全局钩子,应该可以截取所有的键盘消息啊!
    我开始时,用
    if(sendto(sock,keybuf,strlen(keybuf),0,(struct sockaddr*)&toaddr,sizeof(toaddr))==-1)
    {
       MessageBox(NULL,"send udp error","error",MB_OK);
    }
    结果,当焦点移到另一个接收字符的窗口,输入字符,它就显示出MessageBox的框,
    我改成
    if(sendto(sock,keybuf,strlen(keybuf),0,(struct sockaddr*)&toaddr,sizeof(toaddr))==-1)
    {
       char str[100];
       wsprintf(str,"send udp error :%s ",WSAGetLastError);
       MessageBox(NULL,str,"error",MB_OK);
    }
    运行后却没有出现MessageBox的框了,正如:ringphone(临风) 兄说的那样,它根本就没有调用DLL...
    真是令人头痛.....
      

  4.   

    SetWindowsHookEx的最后一个参数是否为零,我写的键盘钩子可以收到,不过我做的只是将按键信息记录在文件中