如何从窗口句柄得到文件名称,不是可执行文件的名称,以下的方法得到是可执行文件的名称
  GetWindowThreadProcessId(hWnd, @hProcessID);
  hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, hProcessID);
  EnumProcessModules(hProcess, @hMod, SizeOf(hMod), Size);
  GetModuleFileNameEx(hProcess, hMod, Buf, SizeOf(Buf));
  CloseHandle(hProcess);
  Result:= StrPas(Buf);  比如,我打开一个c:\a.txt文件, 现在只知到打开a.txt文件后的窗口的句柄,我想从窗口句柄得到C:\a.txt 这个文件名  并不是想要得到notepad.exe 

解决方案 »

  1.   

    DWORD   GetModuleFileName(   
        
              HMODULE   hModule, //   handle   to   module   to   find   filename   for     
              LPTSTR   lpFilename, //   pointer   to   buffer   for   module   path     
              DWORD   nSize   //   size   of   buffer,   in   characters     
            );
    这个API似乎可以满足要求
      

  2.   

      GetWindowThreadProcessId(hWnd, @hProcessID);
      hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, hProcessID);
      EnumProcessModules(hProcess, @hMod, SizeOf(hMod), Size);
      GetModuleFileName(hMod,Buf,SizeOf(Buf));
      CloseHandle(hProcess);
      Result:= StrPas(Buf);  是这样吗??
      

  3.   

    GetModuleFileName(GetWindowLong(hwnd,   GWL_HINSTANCE),   PChar(s),   Length(s));
      

  4.   

    如果是要得到文件名而不需要文件的路径的话,发送消息吧var
      buf: PChar;
    begin
      buf := StrAlloc(MAX_PATH+1);
      SendMessage(Handle, WM_GETTEXT, MAX_PATH+1, integer(@buf[0]));
      ShowMessage(buf);  //得到 a.txt - 记事本
      StrDispose(buf);
    end;
      

  5.   

    试试先获取PID,然后再获取PID的命令行
      

  6.   

    用OpenDialog//文件路径及文件名(有后缀,即文件类型)
    OpenDialog1.FileName//文件名(有后缀,即文件类型)
    ExtractFileName(OpenDialog1.FileName);//文件后缀,即文件类型
    ExtractFileExt(OpenDialog1.FileName);//文件所在的磁盘盘符
    ExtractFileDrive(OpenDialog1.FileName);//文件路径(不含文件名)
    ExtractFilePath(OpenDialog1.FileName);
      

  7.   

    word的命令行中,有doc文件的路径吗?我试了txt文档,是可以取得txt文件的路径,但是word取得的不是路径
      

  8.   

    delphi help:Call GetModuleFileName to obtain the fully qualified name of a module, given its handle. 
    This function is not available on Windows.