Windows 将活动程序带到最前面-带一个旋转

Windows 将活动程序带到最前面-带一个旋转,windows,foxpro,Windows,Foxpro,我继承了一个用foxpro(~shubder~)编写的程序 问题是,它有一些COM控件。启动两个副本时,第二个副本将抛出错误。所以我想,这可以被清理,以便将活动副本放在前面,只允许一个实例 这很好,但程序采用命令行参数,允许以不同的模式运行。每个模式下只能运行一个副本,例如 (一) (二) 我想要的是这个 "program /pos" "program /pos" - Bring currently running pos instance to the front. "program /bo

我继承了一个用foxpro(~shubder~)编写的程序

问题是,它有一些COM控件。启动两个副本时,第二个副本将抛出错误。所以我想,这可以被清理,以便将活动副本放在前面,只允许一个实例

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

(一)

(二)

我想要的是这个

"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代码——尽管那会很好。这个概念就是我想要的,一些关于WindowsAPI函数实现的提示也会有所帮助。e、 g.您能确定正在运行的进程的命令行选项吗?

我认为除了您的进程之外,您无法获得进程的命令行

实现这一点的常用方法是使用。当一个程序启动时,它会获取互斥锁,如果不能,那么另一个实例已经在运行


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

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

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

我认为您对命名互斥对象的了解是正确的,您对命令行的了解是正确的。我想我可以将pos或bos进程id写入文本文件。@Matt-或者您可以使用命名的共享内存块共享HWND或您需要的任何其他信息…GetCommandLine仅返回当前进程的命令行参数。但是,命名互斥方法很有用。对,但是您不关心另一个进程的命令行。您所关心的只是互斥体的名称;由于两个进程运行相同的代码,如果命令行参数相同,互斥锁将具有相同的名称。
"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.