代码之家  ›  专栏  ›  技术社区  ›  hookenz

将活动程序带到前面-扭曲

  •  0
  • hookenz  · 技术社区  · 15 年前

    我继承了一个用FoxPro编写的程序。

    问题是,它有一些COM控件。当您启动2个副本时,第二个副本将抛出错误。所以我想,这可以被清除,以将活动副本带到前端,只允许一个实例。

    这很好,但是程序接受一个命令行参数,允许它以不同的模式运行。每个模式下只能运行一个副本,例如

    1)

    "program /bos"   
    "program /pos"  = OK
    

    2)

    "program /pos"
    "program /pos"  = NOT OK
    

    我想要这个

    "program /pos"
    "program /pos" - Bring currently running pos instance to the front.
    
    "program /bos" - start a BOS instance.
    "program /bos" - bring the bos instance to the front.
    

    我希望这是有道理的。什么是一种优雅的方法来确定程序的运行实例是处于POS还是BOS模式,这样我就可以确定将哪个进程置于前端,还是在请求的模式下启动一个新的副本。

    我不一定需要这里的FoxPro代码-尽管那很好。这个概念正是我所追求的,关于实现它的Windows API函数的一些提示也会有所帮助。例如,您能确定正在运行的进程的命令行选项吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   stuartd saeed    15 年前

    命名的互斥体将完全满足您的需要。但是,如果您确实想查看所有可见进程的命令行,并且您的目标是Windows XP或更高版本,则可以使用WMI: WIN32_Process 具有在xp/server 2003中引入的命令行属性。

        2
  •  0
  •   Aaron    15 年前

    我认为除了您的程序之外,您无法获得其他程序的命令行。

    一种常见的方法是使用 named mutex .当一个程序启动时,它会捕获互斥体,如果不能,则另一个实例已经在运行。

    没有理由不能使用两个命名的互斥体-一个用于 /pos 模式和一个 /bos 模式。

        3
  •  0
  •   Eric Brown    15 年前

    GetCommandLine 将返回命令行参数;然后,我将使用 named mutex 作为唯一标识符来确定进程是否已在运行。如果将命令行参数(或要查找的特定部分)作为互斥名称的一部分,则可以获得要查找的行为。