如何使用已有的程序实例自定义右键单击?

时间:2012-01-11 05:39:41

标签: c++ mfc c++builder

我需要自定义右键单击,以便我可以使用我的防病毒扫描目录。我知道如何使用注册表项来做到这一点,但问题是我不希望每次要扫描目录时都启动我的程序的新实例。我的防病毒软件需要加载一些签名数据库,因此程序加载这些数据库大约需要15秒。我需要使用我已经打开并正在运行扫描目录的程序实例。我怎样才能做到这一点?

我正在使用C ++ Builder。

感谢。

2 个答案:

答案 0 :(得分:1)

考虑到您已经知道如何将项目添加到右键单击上下文菜单中,我建议实现一组客户端/服务器应用程序:

  • 当您打开计算机并进行扫描时加载的服务器,
  • 客户端告诉它使用IPC做什么 - 进程间通信。

然后将客户端应用程序添加到各种上下文菜单中,并根据您右键单击的内容向其传递指示服务器应该执行的操作的参数。

IPC在对接方面有点痛苦,最简单的方法是使用TCP / IP并使用网络库进行本地网络连接。有很多,但鉴于你可能想要其他功能,如UI元素和托盘图标,我建议你看看Qt,即以下组件:

  • QtNetwork:用于在客户端和服务器可执行文件之间执行通信。

  • QSystemTrayIcon:用于在托盘上显示小图标。

你肯定会遇到很多其他的小问题(比如所有神话般的用户界面),幸运的是Qt有很好的文档记录,并且可以从Qt开发者网络获得帮助。您可以通过下载并安装SDK来开始使用Qt:

http://qt.nokia.com/downloads/

祝你好运:)。

答案 1 :(得分:1)

在防病毒中实施DDE服务器,然后在注册表项中添加ddeexec子项。或者,将OLE Automation对象添加到实现IDropTarget接口的应用程序,然后向注册表项添加DropTarget子项,以指定对象的CLSID

无论哪种方式,无论何时调用您的菜单项,Windows都会调用您现有的应用程序实例(如果它已在运行),否则它将启动一个新实例然后调用它。无论哪种方式,Windows都在为您处理所有这些问题。您所做的只是为Windows提供一个入口点。

我建议使用IDropTarget方法,因为DDE已被弃用,因为IDropTarget更灵活。当您的应用程序运行时,您可以重复使用相同的IDropTarget对象来处理应用程序的UI窗口和任务栏按钮上的OLE拖放操作,并支持其他应用程序对扫描程序的自动调用。