내 실행 프로그램의 실행 파일에서 GetFileInformationByHandle을 호출하려고합니다. 즉, 프로그램을 시작한 .exe 파일 핸들을 가져와야합니다. 이 일을 할 수있는 방법이 있습니까?실행중인 실행 파일에 대한 파일 핸들 가져 오기
실행 실패 실행 파일에 대해 nFileIndexHigh 및 nFileIndexLow를 가져 오는 방법이 있습니까?
내 실행 프로그램의 실행 파일에서 GetFileInformationByHandle을 호출하려고합니다. 즉, 프로그램을 시작한 .exe 파일 핸들을 가져와야합니다. 이 일을 할 수있는 방법이 있습니까?실행중인 실행 파일에 대한 파일 핸들 가져 오기
실행 실패 실행 파일에 대해 nFileIndexHigh 및 nFileIndexLow를 가져 오는 방법이 있습니까?
여기이 방법이 있습니다. 이 도움이 되었기를 바랍니다 :
#include <Windows.h>
#include <iostream>
using namespace std;
//declare a BY_HANDLE_FILE_INFORMATION structure
BY_HANDLE_FILE_INFORMATION fileinfo;
int main()
{
// clear everything in the structure, this is optional
ZeroMemory(&fileinfo, sizeof(BY_HANDLE_FILE_INFORMATION));
// obtain a handle to the file, in this case the file
// must be in the same directory as your application
HANDLE myfile = NULL;
myfile = CreateFileA("example.exe",0x00,0x00,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
// if we managed to obtain the desired handle
if(myfile!=INVALID_HANDLE_VALUE)
{
//try to fill the structure with info regarding the file
if(GetFileInformationByHandle(myfile, &fileinfo))
{
// Ex: show the serial number of the volume the file belongs to
cout << endl << hex << fileinfo.dwVolumeSerialNumber << endl;
}
// you should close the handle once finished
CloseHandle(myfile);
}
system("pause");
return 0;
}
DWORD WINAPI GetModuleFileNameEx(
__in HANDLE hProcess,
__in_opt HMODULE hModule,
__out LPTSTR lpFilename,
__in DWORD nSize);
두 번째 매개 변수는 NULL이어야하며 현재 실행 파일의 이름을 가져야합니다.
편집 :
파일을 엽니 다.
그건 내가 요구 한 것이 아닙니다. GetFileInformationByHandle을 호출 할 수 있도록 파일 핸들이 필요합니다. 너는 그 질문을 읽었 니? – Sparafusile
@Sparafusile 그가 당신의 질문을 이해하지 못한다고해도 그것은 무례하다고 변명의 여지가 없습니다. – Andrey
질문을 읽지 마십시오. 나는 너의 어떤 것도 더 이상 대답하지 않을 것이니 걱정하지 마라. – James
실행 파일의 경로를 얻으려면 GetCommandLine을 시도해야합니다. 그런 다음 열면 여기가 당신 손잡이입니다.
내 실행 파일에 CreateFile이나 OpenFile이있을 때마다 응용 프로그램이 충돌합니다. – Sparafusile
@Sparafusile 트릭이'dwDesiredAccess'와'dwShareMode' – Andrey
의 올바른 값을 고르는 데 어떤 가치가 있는지 알고 있습니까? – Sparafusile
GetModuleHandle이 해결책입니다. 이 매개 변수가 NULL 인 경우
http://msdn.microsoft.com/en-us/library/ms683199(VS.85).aspx
은 GetModuleHandle 함수 호출 프로세스 (.exe 파일)을 만드는 데 사용되는 파일에 대한 핸들을 반환합니다.
'GetModuleHandle'은 메모리에 매핑 된 모듈에 대한 핸들을 반환하지만 실제로는 파일에 반환하지 않습니다. 매개 변수가 NULL 인 경우 ImageBase에 대한 포인터를 반환합니다. – DReJ
HMODULE을 반환합니다. 반환 값으로 GetFileInformationByHandle을 호출하면 "The handle is invalid."오류가 발생합니다. – Sparafusile
@sparafusile :'HMODULE'은'HANDLE'을위한 merly 별칭입니다. 실제로 ** file ** 핸들이 아니라 매핑 된 메모리 핸들 – Necrolis
파일 이름이 'example.exe'라는 것을 어떻게 알 수 있습니까? – bobbogo
나는 그것을 "example.exe"라고 불렀습니다. : OP –
당신이 @ bobbogo를 이해하지 못한다고 생각합니다. 내 생각에 그는 사용자가 좋아하는 곳 어디에서나 실행할 수 있다는 점을 감안할 때 .exe의 파일 이름을 어떻게 확보 할 수 있을지 생각합니다. 대답은'GetModuleFileName'입니다. –