Это мой код, чтобы проверить, если имя процесса существует или нет:Как я могу получить название окна из его имени процесса?
bool isRunning (LPCSTR processname)
{
HANDLE Snapshot;
Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(Snapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 ProcessEntry;
BOOL Succeed;
ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
Succeed = Process32First(Snapshot, &ProcessEntry);
while(Succeed)
{
if(lstrcmp(ProcessEntry.szExeFile,processname) == 0)
{
return true;
}
Succeed = Process32Next(Snapshot, &ProcessEntry);
}
CloseHandle(Snapshot);
}
}
Как я мог использовать его или изменить его, чтобы получить заголовок окна от его имени процесса (например, «notepad.exe»)? Если бы он существовал, программа вернула бы текст, как «Новый текстовый документ - Блокнот»
Процесс => threads => EnumThreadWindows(). Обычно процесс имеет только один поток, который создает окна, но это не правило. И, конечно, поток может создавать несколько окон, нет правила, которое одним из них является «основным» окном. Таким образом, вы можете сделать эту работу для * конкретной * программы, которая имеет четко определенное поведение, безусловно, для Notepad, это не универсальный подход. –