我编写了一个截取所有键盘输入的钩子函数,该钩子函数在DLL中实现。而DLL又由一个基于对话框的应用程序来调用,该对话框应用程序一启动就被隐含。此时,在钩子函数中如果检测到从键盘输入了一个特殊的热键,则关闭对话框应用程序并卸载DLL。应如何实现?

解决方案 »

  1.   

    dll用改在对话框里卸载,所以你最好用进程通信。告诉对话框,由对话框自己结束并卸载dll
      

  2.   

    最好采用隐性调用DLL,然后在DLL初始化阶段传入进程句柄、窗口指针或句柄。由于是隐性调用,这个窗口指针或句柄将保留到进程结束,这样你就可以调用::TerminateProcess或::EndDialog 来结束进程。当然最好采用进程通信。
      

  3.   

    我是隐性调用DLL的,并在DLL中获取对话框的窗口句柄,然后用SendMessage给对话框发送WM_CLOSE消息。我发现当对话框窗口正常显示时,可以将其关掉。但当对话框被最小化或被隐含时,就不能关闭对话框应用程序了。我用ExitThread也不行。另外我的DLL被加载到对话框应用程序进程的地址空间中去了,应该不会涉及进程通讯的问题。