上下文菜单中的资源管理器集成,但使用已在运行的实例

Joh*_*mas 2 windows delphi explorer winapi

我想检查是否存在,如果它不存在,请在资源管理器的右键单击(上下文)菜单中添加一些操作.

除了上述要求(人们可以在网上轻松找到解决方案)之外,我想再添加一个:

假设我注册了以下命令:

  • "Command#1" - 触发'C:\ MyProg.exe/cmd1'
  • "Command#2" - 触发'C:\ MyProg.exe/cmd2'

......(aso.)

如何检查是否存在运行实例MYPROG.EXE并将其传递适当的命令/命令行参数一起与该用户点击文件名?

(IOW,我想使用已经运行的程序实例来完成我的任务,而不是打开一个新任务)

Delphi代码片段将不胜感激.

TIA

Jos*_*osh 5

执行此操作的最佳方法实际上是在exe的启动代码中.换句话说,让Explorer启动exe的第二个副本,然后继续检测它是否已经在运行并让它向正在运行的实例发送消息.

就个人而言,我几乎没有使用Delphi的经验,但我在.NET应用程序中这样做的方式是使用互斥和进程间通信通道.

一般的想法是应用程序的第一个实例将启动,并开始监听IPC通道.它还会创建一个命名的进程间互斥.当第二个实例启动时,它将无法创建相同名称的互斥锁,这意味着先前的实例正在运行并在IPC通道上侦听调用.第二个实例然后通过IPC将命令行参数发送到第一个实例,第一个实例对它们采取了操作.然后第二个实例退出而不显示任何UI.

我已经上传了这个组件的代码(C#),链接如下.我不相信它有任何外部依赖,我不知道Delphi中的等效通信机制是什么 - 但希望这会给你一些想法.

InstanceManager组件(C#)