[英]find lpClassName of started application to be used in FindWindow wniapi c++?
如果我使用CreateProcess API函數啟動應用程序,如何查找FindWindow API調用的lpClassName字符串
PROCESS_INFORMATION ProcessInfo; //This is what we get as an [out] parameter
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess("c:\\temp\\application1.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
MessageBox("The process could not be started...");
}
我也可以如何在FindWindow中僅設置名稱的一部分? 例如,如果我知道該應用程序的名稱為“ application <某些版本號> .exe”,那么它可以是:
應用程序1.exe
應用程序1.1.exe
application1.2.1.exe
我的最終目標是使用Windows消息系統和SendMessage API方法將消息發送到應用程序。
聽起來您真正想要的是啟動的應用程序創建的窗口的句柄。
問題是,您的過程可能會創建許多窗口。 您可以使用SetWindowsHookEx函數在進程創建新窗口時得到通知。
未經測試的代碼傳入:
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) {
if(nCode == HCBT_CREATEWND) {
// wParam is a handle to a window your app just created.
}
return 0;
}
CreateProcess("c:\\temp\\application1.exe", NULL,
NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,
NULL,&StartupInfo,&ProcessInfo);
SetWindowsHookEx(WH_CBT, procHook, NULL, ProcessInfo.hThread);
ResumeThread(ProcessInfo.hTread);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.