簡體   English   中英

查找要在FindWindow wniapi C ++中使用的已啟動應用程序的lpClassName?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM