将积极的计划带到前面 - 扭曲

时间:2009-11-16 20:26:28

标签: windows foxpro

我有一个用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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为您不能获得除您之外的其他流程的命令行。

执行此操作的常用方法是使用named mutex。当程序启动时,它会抓取互斥锁,如果不能,则另一个实例已经在运行。

您无法使用两个已命名的互斥锁 - 一个用于/pos模式,另一个用于/bos模式。

答案 2 :(得分:0)

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