고수닷넷 - 데미소다오렌지님
윈도우 NT 계열의 운영체제의 작업관리자에는 응용 프로그램란과 프로세스란이 구분되어 있습니다. 일반적으로 프로세스를 열거하는데 사용하는 PSAPI내지는 ToolHelp에 대해서는 잘 알면서도 응용 프로그램을 열거하는 방법을 잘 모르는 경우가 많습니다.
응용프로그램의 경우는 EnumWindows함수를 사용해서 열거하면 된다. 이때 주의해야 할 점은 EnumWindows의 경우 모든 Top 윈도우를 -- Destkop 윈도우를 직접적인 부모로 가지는 윈도우 -- 열거한다는 점입니다. 따라서 이 중에 작업관리자가 응용프로그램이라고 판단한 것들만 골라서 열거를 시켜야 합니다. 작업관리자의 경우는 그런 윈도우 중에서 보이는 것 중에서 CAPTION을 가진 것을 응용프로그램이라고 간주합니다. 따라서 해당 속성을 조사해서 적합한 것들만 출력하면 됩니다.
아래는 그러한 응용 프로그램을 열거하는 간단한 C 코드를 보여주고 있습니다.
#include "windows.h"
BOOL CALLBACK EnumTopWindow(HWND hwnd, LPARAM lParam)
{
DWORD dwStyle;
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
if((dwStyle & WS_VISIBLE) == WS_VISIBLE &&
(dwStyle & WS_CAPTION) == WS_CAPTION)
{
if(GetParent(hwnd) == NULL)
{
TCHAR szWindowName[MAX_PATH] = {0};
GetWindowText(hwnd, szWindowName, sizeof szWindowName);
printf("window %x, %s\n", hwnd, szWindowName);
}
}
return TRUE;
}
int main(int argc, char* argv[])
{
EnumWindows(EnumTopWindow, 0);
return 0;
}
"Win32 API" 카테고리의 다른 글
- TRACE 매크로를 구현하는 방법 (0)2007/01/02
- 윈도우 종료 시키기 (0)2007/01/02
- 작업관리자에 표시되는 응용프로그램 열거하기 (0)2007/01/02
- 트레이로 내려가는 애니메이션 출력 (0)2007/01/02
- XP 프로그램 호환성 정보 얻기 (0)2007/01/02
Tags 작업표시줄

수안이의 컴퓨터 연구실



Leave your greetings.