2013-06-03 2 views
0

C++을 사용하여 Windows에서 외부 .exe로 신호를 보내는 방법을 생각하는 것입니다. "user1764961"라는 남자가 뮤텍스를 사용하도록 제안되었지만 작동 방식을 이해하지 못했습니다! http://www.tutorialspoint.com/cplusplus/cpp_signal_handling.htm가 하지만 이해가 안 ...응용 프로그램으로 신호 보내기 (Windows)

예를 들어

이 : 나는 .EXE는 "창문 없음"을 닫는 신호를 보내려는 내가 한 .exe에 대해 모든 걸 알고 은 또한이 페이지를 읽고 있었다 필요한 세부 사항이있는 경우.

+2

닫는 신호 란 무엇입니까? 그 용어는 일반적으로 사용되지 않습니다. 신호에 대해 모두 잊어 버리고 실제로하고 싶은 것을 알려주십시오. –

+0

DLL (실행중인 응용 프로그램) 프로세스를 종료하고 싶지만 종료 전에 응용 프로그램에서 비디오 스트림 기록을 중지해야합니다. – LppEdd

+0

자동화 API를 사용해야하는 것 같습니다. –

답변

3

시도해보십시오. 가장 우아하고 안전하지는 않지만 (매우 안전하지 않은) 가장 간단한 방법으로 문제를 해결할 수 있습니다. 응용 프로그램에서

이렇게 폐쇄한다 :

DWORD dwProcessID; 
HANDLE hProcess, hMutex; 
hProcess = GetCurrentProcess(); 
DuplicateHandle(hProcess, hProcess, hProcess, &hProcess, NULL, TRUE, DUPLICATE_SAME_ACCESS); 
// write retrieved handle somewhere in file. let it be "C:\sample.txt" 
// ... 
hMutex = CreateMutex(NULL, TRUE, L"Look at me! I'm a scarry MUTEX"); 
//... Your code 
// go close your video streams or do whatever you want 
// ... 
ReleaseMutex(hMutex); 

앱에서 :

// so now the distant proc works and you now it 
// it is time to terminate it. 
HANDLE hMutex, hProcess; 
// read hProcess from "C:\sample.txt" 
hMutex = OpenMutex(SYNCHRONIZE, FALSE, L"Look at me! I'm scary MUTEX"); 
WaitForSingleObject(hMutex, INFINITE); //if your "video app" will not release the mutex you will wait forever. 
TerminateProcess(hProcess, 0); //that's what you need 

뮤텍스는 핵심 개체입니다. 당신은 그것을 소유주가 조작 한 교통 신호등으로 생각할 수 있습니다. 그리고 보행자는 길 건너편에 서기를 원하면 복종해야합니다.

주어진 예에서 2 개 문제가 있습니다.

먼저 파일에 프로세스 핸들을 작성하면 안됩니다. 프로세스 처리 방법 음, here보세요.

두 번째로 내가 전에 말했듯이, 당신이 신이 아니면 영원히 기다릴 수 없습니다. 프로세스가 뮤텍스를 해제하거나 WaitForSingleObject(hMutex, TIME_INTERVAL)으로 설정해야합니다. TIME_INTERVAL은 (는) DWORD입니다. 그냥 선택하십시오.

답변이 도움이되기를 바랍니다.

+0

당신은 정상적으로 닫히기 위해 다른 프로세스에 신호를 보내지 않고 있습니다. 당신은'TerminateProcess'로 궤도를 누크하고 있습니다. 그것은 그 질문이 찾고있는 것 같지 않습니다. –

+0

아니, 내가 뭘 요구했는지는 모르지만 내가 찾은 뮤텍스의 가장 좋은 예다! 나는 그것을 적용 할 수 있다고 생각한다. 또는 silply 다음과 같이하십시오. HWND hWnd = FindWindow ("recoder_app", NULL); PostMessage (hWnd, WM_CLOSE, NULL, NULL); – LppEdd

+0

그리고 레코더 응용 프로그램에서 스트림을 WM_CLOSE 경우에 저장합니다. – LppEdd

관련 문제