2016-12-23 3 views
0

Firefox가 있고 Firefox 시작 페이지를 열면 "Mozilla Firefox 시작 페이지 - Mozilla Firefox"라는 제목의 창이 있어야한다고 가정 해보십시오.exe ​​파일 이름에서 창 핸들을 찾는 방법

내가

HWND hwnd = ::FindWindow(0, _T("Mozilla Firefox Start Page - Mozilla Firefox")); 

하지만 내가 원하는 것은이

HWND hwnd = FindWindowFromExe(_T("firefox.exe"));//How to make this function? 

합니까 윈도 API와 같은 윈도우의 EXE 파일의 이름에서 창 핸들을 찾을 수 있습니다 아래의 코드 창 핸들을 찾을 수 있습니다

는 기능 등이있다 FindWindowFromExe()? 그렇지 않다면, EXE에서 창을 찾는 가장 좋은 방법은 무엇입니까? 읽기

감사합니다 :)

+0

[MSDN] (http://msdn.microsoft.com)을 검색하면 'FindWindow'로 시작하는 함수의 존재에 대해 어떻게 알 수 있습니까? –

+0

실행중인 프로세스에서 열려있는 모든 창을 충분한 권한으로 열거 할 수 있어야합니다. 그러나 "exe 파일"에서 하나의 창을 가져 오는 것은 불가능합니다. (예 : 프로세스에 여러 창이 열리면 어떨까요? 또한 여러 번 프로그램을로드 할 수 있다는 것을 알고 있습니까?) 또한이 주석에는 몇 가지 힌트가 포함되어 있습니다. about * 열거 *. –

+0

WinAPI를 사용하여이 작업을 수행하는 방법을 보여주는 [게시물은 다음] (http://stackoverflow.com/q/6806911/62576)을 참조하십시오. 델파이 코드이지만 API는 C++에서도 사용되었습니다. –

답변

3

소유하는 프로세스의 파일 이름으로 창을 찾을 수있는 단일 API 기능이 없습니다. 수동으로 검색해야합니다.

EnumWindows()을 사용하여 모든 최상위 창을 열거 나 FindWindow()/FindWindowEx()을 사용하여 특정 유형의 창을 찾고 열거 할 수 있습니다. 각 창에 대한

, 다음 중 하나를 수행 할 수 있습니다 후 다음 창을 소유하는 프로세스 ID를 얻을 수

또는

  • 사용 GetWindowModuleFileName() 의도 윈도우가 EXE 의해 사용되는 실제 EXE 아닌 DLL에 의해 생성 가정 (하여 만든 모듈의 전체 경로 및 파일 이름 윈도우를 조회).

일단 창 파일 이름이 있으면 대상 파일 이름과 비교할 수 있습니다.

관련 문제