我做了个DLL,安装了键盘全局钩子。
但是我想在用键盘事件的时候和主程序通信:开始我用的回调函数
后来我用sendmessage WM_COPYDATA。
但是都有点问题。就是当前窗口是主程序时可以,是其他程序的时候却不行了。
开始我以为是我的钩字弄错了。所以我在dll的键盘过程加入MessageBox后,发现,DLL工作是正常的,但是好想就是无法和主程序通信。。请问,我应该怎么样和主程序通信呢???

解决方案 »

  1.   

    钩子是安装在所有进程中的,包括本进程,只有构在本进程的钩子用WM_COPYDATA可以得到指定的数据,构在其他进程中的钩子发来的WM_COPYDATA消息提供的内存地址是其他进程的,本进程不能访问。还有sendmessage的窗口一般是安装钩子的时候由主程序传给钩子dll,由钩子dll保存,应该创建共享数据断并保存在该段中
      

  2.   

    把sendmessage的窗口句柄放在共享段中,然后在主程序载入DLL时赋值.
      

  3.   

    把窗口句柄放到data_seg共享数据段中,然后通过消息来与主程序通信