GetModuleFileName的第一个参数如何获得?

解决方案 »

  1.   

    用GetModuleHandle
    看msdn
    HMODULE GetModuleHandle(
      LPCTSTR lpModuleName   // module name
    );
      

  2.   

    hInstance
    直接用酒可以了。
      

  3.   

    可以为空,返回当前的
    或者用GetModuleHandle
    看msdn
    HMODULE GetModuleHandle(
      LPCTSTR lpModuleName   // module name
    );
      

  4.   

    我想根据进程信息得到对应的程序文件h:Thandle;
    Filename:array [0..255] of char;h := openProcess(Process_All_Access, true,p.ProcessID);//p.ProcessID是进程ID      
    GetModuleFileName(h,@Filename,255); 可得到的总是空值,不知为什么?  
      

  5.   

    var s:ShortString;
    begin
    GetModuleFileName(openProcess(Process_All_Access, true,GetCurrentProcess),@s,255);
    showmessage(s);
    end;
      

  6.   

    procedure RefreshList;  //刷新进程列表
    var
      h:THandle;
      procEntry32:TProcessEntry32;
      isEnd:Bool;
      s:ShortString;
    begin
      list1.clear;
      h:=createToolhelp32snapshot(TH32CS_SNAPPROCESS,0);
      procEntry32.dwSize:=sizeof(TProcessEntry32);
      isEnd:=Process32First(h,procEntry32);
      while isEnd do
      begin
        GetModuleFileName(openProcess(Process_All_Access, true,procEntry32.th32ProcessID),@s,255);
        list1.Items.Add(s);
        isEnd:=Process32Next(h,procEntry32);
      end;
      CloseHandle(h);
    end;但不知为什么list1中总是空值?
      

  7.   

    GetModuleFileName的API宣告如下:
    DWORD GetModuleFileName(
      HMODULE hModule,    // handle to module
      LPTSTR lpFilename,  // file name of module
      DWORD nSize         // size of buffer
    );
    Delphi宣告如下
    function GetModuleFileName(hModule: THandle; lpFileName: PChar; nSize: DWord): DWord; stdcall;hModule 參數是傳入在Process中所載入的Module(Exe, dll)的Handle, 可以由API 
      EnumProcessModules取得所有Process所載入的Module
    lpFileName, 必需傳入承接Module FileName的Buffer的內存位置
    nSize, 指出由lpFileName傳入的Buffer的大小, 以Byte來計算
    以下範例:
    function GetModuleName(hModule: THandle): string;
      var Buf: array[0..MAX_PATH] of Char;
    begin
      if GetModuleName(hModule, Buf, MAX_PATH) = 0 then RaiseLastWin32Error;
      Result := string(Buf);
    end;
      

  8.   

    我想知道GetModuleFileName的第一个参数是否用openProcess(Process_All_Access, true,procEntry32.th32ProcessID)来获得。