2009-11-23 4 views
1

나는 백그라운드에서 실행중인 프로세스/exe/응용 프로그램을 찾는 작업을 수행해야합니다. ie : 프로세스가 실행 중이지만 Windows GUI 응용 프로그램이지만 UI/Window가 표시되지 않습니다. EXEheader를 읽는 중입니다. 헤더에는 '서브 시스템'이라는 필드가 있으며 응용 프로그램은 필요한 인터페이스 유형으로 실행됩니다. 하지만 Windows GUI를 반환하므로 그대로입니다. 하지만 그 응용 프로그램이 윈도우를 가지고 있는지 아닌지를 알아 내고 싶습니다. 또한이 응용 프로그램은 마치 정보를 쉽게 읽을 수있는 서비스 인 것처럼 서비스가 아닙니다. 만약 당신 중 누군가가 명시된 뚜렷한 부분에 약간의 빛을두면 나는 기뻐할 것입니다.window less 응용 프로그램

따뜻한 인사 .. Sarfu

답변

3

내가 제대로 질문을 이해한다면, 당신은 실행중인 응용 프로그램이 눈에 보이는 창문이 있는지 알고 싶습니다.

이렇게하려면 EnumWindows으로 전화하여 모든 최상위 창을 가져올 수 있습니다. 각 창에 대해 GetWindowThreadProcessId을 호출하여 프로세스 ID를 얻고 GetWindowLong(hwnd, GWL_STYLE)을 사용하여 창 스타일을 가져옵니다. WS_VISIBLE의 스타일을 테스트하여 창이 표시되는지 확인합니다. 모든 창을 통해 실행하고 프로세스가 보이는 것을 소유하고 있는지 확인하십시오. 프로세스 ID가없는 경우 EnumProcesses을 사용하여 프로세스 ID를 모두 얻을 수 있습니다.

+0

아니요, 작동하지 않습니다. 애플리케이션에는 창이 전혀 없을 수도 있습니다 (예 : 'CreateWindow'를 아직 호출하지 않았기 때문입니다. – MSalters

+0

... (이 시점에서) 창없는 응용 프로그램입니다. 미래를 예측하는 방법을 알지 못하면 그 이상으로 나아갈 수 없습니다. – interjay

0

"subssytem"GUI는 응용 프로그램에 창이 있음을 알려주지 않습니다. 사실, 그 반대는 진실에 가깝습니다. 콘솔 응용 프로그램이 콘솔 창을 가져옵니다. GUI 응용 프로그램은이 필요할 때 의 창을 생성해야합니다. CreateWindow()을 호출하지 않은 GUI 프로세스에는 창이 없습니다.

분명히 당신은 찾고있는 실행 파일을 알고 있습니다. 이 경우 EnumProcesses()으로 전화하여 모든 프로세스를 찾고 각 프로세스 호출에 대해 EnumProcessModules()을 호출하십시오. Windows에서 "모듈"은 DLL과 EXE입니다. 각 프로세스에는 정확히 하나의 EXE 모듈 만 있습니다. 따라서 어떤 프로세스의 하나의 EXE 모듈이 찾고있는 실행 파일이면 응용 프로그램이 실행 중입니다.

관련 문제