2009. 5. 15. 18:14

GetModuleFileNameEx()



GetModuleFileNameEx() 함수는 현재 실행된 다른 프로그램의 실팽파일의 경로를 얻을 수 있는 함수이다.

DWORD WINAPI GetModuleFileNameEx( __in HANDLE hProcess,
                                                          __in_opt  HMODULE hModule,
                                                          __out LPTSTR lpFilename,
                                                          __in DWORD nSize
                                                         );
hProcess - 원하는 모듈을 가지고 있는 프로세스의 핸들.
hModule - NULL로 설정을 하여 실행중인 파일의 경로를 받아올수 있게 한다.
lpFilename - 실행되는 모듈의 경로를 받아올 버퍼.
nSize - 실행되는 파일의 경로를 가져올 버퍼의 크기.

ex) GetModuleFileNameEx(hProc, NULL, str, lstrlen(str));
이 함수를 사용하기 위해서는 'Psapi.h'라는 헤더파일을 포함해 주어야 한고, psapi.lib 파일을 추가해주어야 한다.
아래는 '팁소프트'의 게시판에서 가져온 자료이다.
// GetModuleFileNameEx 함수를 이용하여 경로를 얻기위한 함수
// 프로세스의 경로를 얻기 위해서는 프로세스 정보에 접근해야 하는데, 프로세스의 정보에 접근하기 위해선 해당
// 프로세스의 아이디가 필요하다.
// 프로세스 아이디는 해당 프로세스와 연결된 윈도우 핸들을 통해 알 수 있으며 원하는 프로그램의 윈도우핸들은
// FindWindow 또는 FindWindowEx 함수를 이용해서
찾을 수 있다.
//
// [ 프로세스 정보에 접근하는 순서 ]
// 1. FindWindow 함수로 원하는 프로세스의 윈도우 핸들을 찾는다.
// 2. 윈도우 핸들을 이용하여 프로세스 아이디를 구한다.
// 3. 프로세스 아이디를 이요아여 프로세스 정보를 오픈한다.
void 클래스명::GetExecuteFileName()
{
    // "Test"라는 이름을 가진 윈도우를 찾는다.
    HWND h_wnd = ::FindWindow(NULL, "Test");
    unsigned long process_id = 0;
    // 윈도우 핸들을 이용하여 프로세스 아이디를 구한다.
    GetWindowThreadProcessId(h_wnd, &process_id);
    char temp[256] = {0,};

    // 프로세스 아이디를 이용하여 해당 프로세스 핸들 값을 얻는다.
    HANDLE hwnd = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, process_id);
    if(hwnd != NULL){
        // 정상적으로 프로세스를 열었다면 프로세스의 경로명을 얻는다.       
        // 정상적으로 경로명을 얻었다면 해당 경로명을 그렇지 못했다면 파일명만을 출력한다.
        if(GetModuleFileNameEx(hwnd, NULL, temp, 256)) MessageBox(temp);
    }
}

더 많은 내용은 '팁소프트'에 방문하면 찾을 수 있을 듯 한데.. ^^; 광고 아님.. ㅎ

'Programmings > Windows Programming' 카테고리의 다른 글

서브클래싱  (0) 2009.05.26
GetWindowThreadProcessId()  (0) 2009.05.18
DllMain  (0) 2009.04.27
DLL 제작 (Explicit)  (0) 2009.04.24
DLL 제작 (Implicit 연결)  (0) 2009.04.23