2009-11-16 5 views
0

나는 상속 한 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 함수를 구현하는 데 도움이 될 몇 가지 힌트입니다. 예 : 실행중인 프로세스의 명령 줄 옵션을 결정할 수 있습니까?

답변

1

명명 된 뮤텍스는 필요한 것을 정확하게 수행합니다. 모든 가시적 인 프로세스에 대한 명령 줄을보고 싶었고 Windows XP 이상을 대상으로하고 있었다면 WMI를 사용할 수있었습니다 : WIN32_Process에는 XP/Server 2003에 도입 된 CommandLine 속성이 있습니다.

0

당신이 아닌 다른 프로세스의 명령 줄을 얻을 수 있다고 생각하지 않습니다.

일반적인 방법은 named mutex입니다. 프로그램이 시작될 때 뮤텍스를 잡아 내지 못하면 다른 인스턴스가 이미 실행 중입니다.

/pos 모드와 /bos 모드에 대해 하나씩 두 개의 뮤텍스를 사용할 수 있습니다.

+0

저는 여러분이 ' 명명 된 뮤텍스가있는 무언가에 다시 들어가면 커맨드 라인에 관한 것입니다. 나는 텍스트 파일에 pos 또는 bos 프로세스 ID를 쓸 수 있다고 생각합니다. – Matt

+0

@Matt - 또는 이름이 지정된 공유 메모리 블록을 사용하여 HWND 또는 필요한 다른 정보를 공유 할 수 있습니다. – Aaron

0

GetCommandLine은 명령 줄 인수를 반환합니다. 그런 다음 프로세스가 이미 실행 중인지 확인하기 위해 고유 식별자로 named mutex을 사용합니다. 뮤텍스 이름의 일부로 명령 줄 args (또는 찾고자하는 특정 부분)를 포함하면 원하는 동작을 얻을 수 있습니다.

+0

GetCommandLine은 현재 프로세스의 명령 줄 인수 만 반환합니다. 그러나 뮤텍스라는 이름의 접근법이 유용합니다. – Matt

+0

맞지만 다른 프로세스의 명령 줄은 신경 쓰지 않아도됩니다. 당신이 신경 쓰는 것은 뮤텍스의 이름입니다; 두 프로세스 모두에서 동일한 코드가 실행 중이므로 명령 행 인수가 같으면 뮤텍스는 동일한 이름을 갖습니다. –

관련 문제