CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

我现在得到一个别的程序的实列句柄,现在我想根据该句柄找到该程序 的文件名和路径,(在线等待!)

楼主Shikari(很久不来)2002-12-04 15:23:28 在 Delphi / Windows SDK/API 提问

我现在得到一个别的程序的实列句柄,现在我想根据该句柄找到该程序   的文件名和路径,(在线等待!) 问题点数:50、回复次数:4Top

1 楼lws0472(期待2008)回复于 2002-12-04 16:16:22 得分 30

var  
      buff   :   array[0..254]   of   char;  
      dd   :   string;  
  begin  
      GetModuleFileName(yourHandle,@buff,255);  
      dd   :=   strpas(@buff);  
      showmessage(dd);  
  end;Top

2 楼toplor(霜天晓竹)回复于 2002-12-04 17:13:40 得分 20

hWindow为窗口的句柄  
   
  function   uhfGetWindowModuleFileName(hWindow:THandle):   string;  
  type  
      TGetModuleFileNameEx=function(hProcess:THandle;hMod:THandle;szBaseName:PChar;iSize:Integer):Bool;stdcall;  
      TEnumProcessModules=function(hProcess:THandle;var   hMod:THandle;cSize:Cardinal;var   cSizeOut:Cardinal):Bool;stdcall;  
  var  
      cProcID:   DWORD;  
      hSSHandle:   THandle;  
      bContinue:   Boolean;  
      rProcEntry:   TProcessEntry32;  
      hProcHandle:   THandle;  
      szName:   array[0..1024]   of   Char;  
      GetModuleFileNameEx:   TGetModuleFileNameEx;  
      EnumProcessModules:   TEnumProcessModules;  
      hModPSAPI:   THandle;  
      hMod:   THandle;  
      cDummy:   Cardinal;  
  begin  
      result:='';  
      If   Win32Platform   =   VER_PLATFORM_WIN32_NT   then  
      begin  
          hModPSAPI   :=   LoadLibrary('psapi.dll');  
          if   hModPSAPI   <>   0   then  
          begin  
              GetModuleFileNameEx   :=   GetProcAddress(hModPSAPI,   'GetModuleFileNameExA');  
              EnumProcessModules   :=   GetProcAddress(hModPSAPI,   'EnumProcessModules');  
              if   Assigned(GetModuleFileNameEx)   and   Assigned(EnumProcessModules)   then  
              begin  
                  if   GetWindowThreadProcessID(hWindow,   @cProcID)   <>   0   then  
                  begin  
                      hProcHandle   :=   OpenProcess(PROCESS_QUERY_INFORMATION   or   PROCESS_VM_READ,   False,   cProcID);  
                      if   hProcHandle   <>   0   then  
                      begin  
                          try  
                              if   EnumProcessModules(hProcHandle,   hMod,   sizeof(hMod),   cDummy)then  
                                  if   GetModuleFileNameEx(hProcHandle,   0,   @szName,   sizeof   (szName))then  
                                      Result   :=   StrPas(szName)  
                          finally  
                              CloseHandle(hProcHandle)  
                          end;  
                      end;  
                  end;  
              end;  
              FreeLibrary(hModPSAPI);  
          end;  
      end  
      else   begin  
          if   GetWindowThreadProcessID(hWindow,   @cProcID)   <>   0   then  
          begin  
              hSSHandle   :=   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,   0);  
              if   (hSSHandle   <>   INVALID_HANDLE_VALUE)   then  
              begin  
                  rProcEntry.dwSize   :=   Sizeof(rProcEntry);  
                  bContinue   :=   Process32First(hSSHandle,   rProcEntry);  
                  while   bContinue   do  
                  begin  
                      if   rProcEntry.th32ProcessID   =   cProcID   then  
                      begin  
                          Result   :=   rProcEntry.szExeFile;  
                          Break;  
                      end;  
                      bContinue   :=   Process32Next(hSSHandle,   rProcEntry);  
                  end;  
                  CloseHandle(hSSHandle);  
              end;  
          end;  
      end;    
  end;  
   
  -------------------------------------------------------------  
  风过西窗客渡舟船无觅处  
  年年一川新草遥看却似旧  
  Top

3 楼l0f(凌风)回复于 2002-12-04 17:21:53 得分 0

诶呀吗呀!好长阿!!!Top

4 楼sowine(恐拜狼)回复于 2002-12-04 17:33:05 得分 0

 
  up!!!!!1Top

相关问题

  • 怎样根据实列句柄(HINSTANCE)得到该程序的文件名和路径?
  • 已知一个窗口的句柄,如何才能知道启动窗口的文件名和路径
  • 知道主窗口句柄,怎么能知道这个可执行文件在哪?它的路径和文件名。
  • 如何得到路径和文件名!
  • 怎样获取文件名及路径
  • 如何通过可执行文件名获取进程句柄???????
  • Application.ExeName 只能得到文件名,怎样得到它的路径+文件名?
  • 如何在OpenDialog结束后的“文件名”而不是“路径加文件名”?
  • 知道文件路径及文件名怎样取得路径?
  • 求由窗口句柄获取可执行文件名的完整原代码。。。

关键词

  • win32
  • 句柄
  • rprocentry
  • hmodpsapi
  • hsshandle
  • hprochandle
  • cprocid
  • thandle
  • enumprocessmodules
  • 程序

得分解答快速导航

  • 帖主:Shikari
  • lws0472
  • toplor

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo