Определение того, к какому процессу относится MessageBox - PullRequest
0 голосов
/ 02 сентября 2011

Можно ли узнать, какому процессу принадлежит MessageBox?Если да, то как?

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

Вы хотите использовать GetWindowThreadProcessId. Вот пример.

#include <windows.h>

static const TCHAR g_cszClass = TEXT("#32770"); // dialog box class

// returned handle must be closed with CloseHandle() when no longer used
HANDLE GetMessageBoxProcess(__in_z LPCTSTR lpcszTitle, __in DWORD dwAccess)
{
  HWND    hWnd;
  DWORD   dwProcessId = 0;
  HANDLE  hRET;

  hWnd = FindWindow(g_cszClass, lpcszTitle);
  if (hWnd != NULL)
  {
    GetWindowThreadProcessId(hWnd, &dwProcessId);
    if (dwProcessId != 0)
      hRET = OpenProcess(dwAccess, FALSE, dwProcessId);
  }
  return hRET;
}

Не знаю, зачем вам этот процесс. Причины, о которых я могу думать:

  • полностью завершает окно сообщения
  • обнаружение процесса
  • обнаружение определенного окна сообщения

Все они имеют превосходные и более оптимальные альтернативные решения.

1 голос
/ 02 сентября 2011

Другой ответ дает программное решение. Если это одноразовая вещь для отладки, вы можете выбрать окно с помощью Spy ++, получить идентификатор процесса из окна свойств, а затем найти процесс в диспетчере задач.

...