我做了个键盘HOOK程序,做一个DLL,一个EXE程序,EXE程序调用了DLL,启动HOOK,但是我想把EXE程序中一个对话框中添入的数据传给Dll,怎么做啊

解决方案 »

  1.   

    把你的DLL导出函数中带上参数,EXE在调用的时候,通过参数传递给DLL即可。
      

  2.   

    楼主,你的问题是一个进程间数据的共享问题。现在好多网上关于HOOK的文章都有一个错误。那就是钩子回调函数中 CallNextHookEx中第一个参数的问题!其实只有你的EXE程序才能正确传递这个值。而被挂钩的程序这个值并不确定;如:
    全局变量 HHOOK hHook=0;LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam){
        if(!hHook) MessageBox(0,"hHook==0","!!",0);  //如果hHook==0则会提示
        return CallNextHookEx(hHook,nCode,wParam,lParam);
    }
      

  3.   

    使用
    #pragma data_seg("共享数据段的名字")
    这其中 共享数据初始化
    #pragma data_seg
      

  4.   

    现在问题是将EXE文件中的一个成员变量传到Dll中!就是键盘HOOK的处理函数HOOKProc中。
    我是做了个 Hook类,成员函数StartHook然后调用API SetWindowsHookEx,调用键盘处理程序HOOKProc
    EXE文件只是生成一个Hook对象,调用成员函数StartHook。
    现在我想根据EXE程序中一个成员变量值,决定HOOKProc中的处理!
      

  5.   

    使用
    #pragma data_seg("共享数据段的名字")
    这其中 共享数据初始化
    #pragma data_seg
    还是没用啊!我调试了值一直是0
      

  6.   

    在共享数据段之后加上编译选项:
    #pragma comment(linker,"/SECTION:共享数据段的名字,RWS")
    才能开启共享...在EXE中把你的数据做参数,调用DLL函数,这个函数再把参数赋给上面的共享变量,然后大家都可以用了...