Вывод активной программы на передний план - с изюминкой - PullRequest
0 голосов
/ 16 ноября 2009

У меня есть программа, написанная на foxpro (~ shudder ~), которую я унаследовал.

Проблема в том, что в нем есть некоторые элементы управления 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 ]

1 голос
/ 17 ноября 2009

Именованный мьютекс будет делать именно то, что вам нужно. Если вы все же хотели видеть командную строку для всех видимых процессов и нацеливались на Windows XP или более позднюю версию, вы могли бы использовать WMI: WIN32_Process имеет свойство CommandLine, появившееся в XP / Server 2003.

0 голосов
/ 16 ноября 2009

GetCommandLine вернет аргументы командной строки; затем я бы использовал с именем mutex в качестве уникального идентификатора, чтобы определить, запущен ли уже процесс. Если вы включите аргументы командной строки (или определенную часть, которую вы ищете) как часть имени мьютекса, то вы можете получить искомое поведение.

0 голосов
/ 16 ноября 2009

Не думаю, что вы можете получить командную строку процесса, отличного от вашего.

Обычный способ сделать это - использовать с именем mutex . Когда программа запускается, она захватывает мьютекс, а если не может, другой экземпляр уже запущен.

Нет причин, по которым вы не могли бы использовать два именованных мьютекса - один для режима /pos и один для режима /bos.

...