2014-11-11 3 views
1

Это мой код, чтобы проверить, если имя процесса существует или нет:Как я могу получить название окна из его имени процесса?

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»)? Если бы он существовал, программа вернула бы текст, как «Новый текстовый документ - Блокнот»

+0

Процесс => threads => EnumThreadWindows(). Обычно процесс имеет только один поток, который создает окна, но это не правило. И, конечно, поток может создавать несколько окон, нет правила, которое одним из них является «основным» окном. Таким образом, вы можете сделать эту работу для * конкретной * программы, которая имеет четко определенное поведение, безусловно, для Notepad, это не универсальный подход. –

ответ

1

Это фактически адресовано в Microsoft's description of CreateToolhelp32Snapshot.

В нем говорится: «Вы можете использовать функцию QueryFullProcessImageName для получения полного имени исполняемого изображения для 32- и 64-разрядных процессов из 32-разрядного процесса».

Вам нужно будет пройти итерацию, проверив HANDLE с помощью QueryFullProcessImageName.

+0

Не спрашивает ли вопрос название окна, а не имя исполняемого файла? –

Смежные вопросы