2010-04-11 61 views
0

好的应用程序运行功能,所以我试图做的是本质上创建一个,在已经执行的时候,可以“执行”程序再次,检测和而不是创建另一个进程已经存在的过程中,在现有流程中执行一个功能。上运行的执行

任何想法?

这是可能的,我要在这个完全错误的。我正尝试将此开源虚拟打印机(http://sourceforge.net/projects/imageprinter/)改编为我的应用程序。打印机将例如PDF文件打印到文件中,并且它似乎也具有启动应用程序的功能。我需要将PDF抓到我自己的应用程序中进行处理,用户需要能够通过将其打印到本打印机来附加更多的pdf。

我正打算处理它的方式是让应用程序检查新文件的文件夹,每次打开和打印一个新的文件,当命令被调用。还有另一种更直接将pdf数据导入正在运行的进程的方法吗?

回答

4

1:典型的解决方案是使用一个名为互斥此。 See this question asked on MSDN了解更多详情。

2:使用one of these functions(可能是FindWindowEx?)和(如果需要)以某种方式获取用于在两个进程之间查找HWND的信息。对不起,我不能更清楚,有方式太多的方式来做到这一点,它因应用程序而异。

3:在知道其他应用程序正在运行后,您可以使用SendMessage和您自己的UINT message(确保它不与现有消息冲突),并确保在消息循环中处理特殊消息。

+0

答案阻止另一个进程,但是有可能然后发送命令到已经运行的进程? – hmind 2010-04-11 19:09:26

+0

@hmind:这是第二阶段,您需要使用进程间通信机制让第一个进程知道应该做什么。如果你有一个窗口句柄,使用SendMessage,WM_COPYDATA,如果你没有,则使用命名管道。这些是明显的选择,还有其他的。 – 2010-04-11 21:17:03

+0

对不起:我已经修改了我的答案,以澄清和whatnot。 – 2010-04-11 23:39:30

1

听起来像是你可能要开始围绕谷歌搜索有关运行对象表信息......这是样品与和MFC客户端调用与运行对象表本身注册一个.NET应用程序,使他们能够进行进程间通信。

Running Object Table: Provider in .NET, consumer in MFC

究竟是什么你想在这里做的,我相信你有一个很好的理由让你在做什么,但有可能是得到一个更简单的方法相同结果的其他方法。

0

有两个阶段答案:

我asumming一个Win32 API的程序,而不是MFC/.NET

  1. 命名mutexs,如指出。
  2. WM_USER消息。在你的消息循环中,设置一个case来处理你定义的消息。该消息将导致目标函数的执行。

基本上,在win32 api中查找进程间通信。