我试图在我自己运行的程序的可执行文件上调用GetFileInformationByHandle。这意味着我需要获取启动程序的.exe文件句柄。有没有办法做到这一点?
如果失败了,有没有办法让正在运行的可执行文件获得nFileIndexHigh和nFileIndexLow?
答案 0 :(得分:5)
DWORD WINAPI GetModuleFileNameEx(
__in HANDLE hProcess,
__in_opt HMODULE hModule,
__out LPTSTR lpFilename,
__in DWORD nSize );
第二个参数应为NULL,您将获得当前可执行文件的名称。
编辑:
然后打开文件。
答案 1 :(得分:4)
这是一种方法。我希望这会有所帮助:
#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;
}
答案 2 :(得分:0)
您应该尝试GetCommandLine获取可执行文件的路径。然后打开,这是你的手柄。
答案 3 :(得分:0)
GetModuleHandle就是解决方案。
http://msdn.microsoft.com/en-us/library/ms683199(VS.85).aspx
如果此参数为NULL,则GetModuleHandle返回用于创建调用进程(.exe文件)的文件的句柄。