散分2:如何在多个文件上点击右键,选择我的程序后,我的程序可以同时打开这些文件呢?我已经做好了禁止同时运行多个程序实例,那么如果我的程序在运行着,如果使用右键打开新文件,它首先会尝试运行一个新实例,当检测到有实例已经运行,那么新实例会退出,但是如何将新实例启动时的文件名参数传递给已经运行的实例呢,这个问题,分不够的话还可以加,请给出示例。

解决方案 »

  1.   

    我的做法比较菜,
    当发现程序已经启动后,
    新程序不启动,并且记录到一个txt文档,
    而程序本身在空闲时监控那个txt文档。我后来听说,有一种消息传递的方式,我也尝试过一点类似的。
    不过是两个不同的程序,主程序启动后,可以发送消息给另一个程序。
    只是,最近没有时间试验。
      

  2.   

    在没有运行实例的情况下,你的程序已经可以取到选中的文件名了吗?你现在的问题是不是只是没有办法处理在已经运行一个实例的情况下怎样把文件名传到你已有的实例?那就要具体看你的只运行一次的代码怎么写的了,你可以通过在检测到以运行一次实例的时候不是马上退出,而是找到以运行实例的主窗口handle,然后向它发送一个自定义消息,这个时候就有多种办法了,可以向上面说的那样把文件名保存在一个文本中,然后发送给已运行实例消息后再退出,已运行的实例在收到消息后就可以到指定的地方取回文件名。当然也可以创建一个全局内存区域(用CreateFileMapping创建一个内存映向文件)把文件名保存在其中也可以。
      

  3.   

    hkbarton(→Beginner←) 不是已经说清楚了么不知道你是怎么防止多个实例运行的,不管怎么样,新实例只要监测到已经有实例运行,给那个实例的主窗体发消息就可以了,可以用WM_COPYDATA消息把文件名发过去。