2013-06-03 57 views
0

我瘋狂地想着如何使用C++將信號發送到Windows上的外部.exe文件。 一個男人「user1764961」,建議使用Mutex,但我真的不明白它是如何工作的! 我也閱讀此頁: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

不,這不是我所要求的,但它是我找到的互斥體的最好例子!我想我可以應用它。或者簡單地做這樣的事情: HWND hWnd = FindWindow(「recoder_app」,NULL); PostMessage(hWnd,WM_CLOSE,NULL,NULL); – LppEdd

+0

而在記錄器應用程序中,我將該流保存在WM_CLOSE案例中。 – LppEdd