热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->vb 
站内搜索:
已知外部程序的hWnd,获取它的完整路径
作者:佚名 来源:不详 整理日期:2007-4-13
Option  Explicit 
Public  Declare  Function  GetWindowThreadProcessId  Lib  "user32"  (ByVal  hWn
d  As  Long,  lpdwProcessId  As  Long)  As  Long 
Public  Declare  Function  CloseHandle  Lib  "Kernel32.dll"  (ByVal  Handle  As  Long)  As  Long 
Public  Declare  Function  OpenProcess  Lib  "Kernel32.dll"  (ByVal  dwDesiredAccessas  As  Long,  ByVal  bInheritHandle  As  Long,  ByVal  dwProcId
  As  Long)  As  Long 
Public  Declare  Function  GetModuleFileNameExA  Lib  "psapi.dll"  (ByVal  hProcess
  As  Long,  ByVal  hModule  As  Long,  ByVal  ModuleName  As  String,  ByVal  nSize
  As  Long)  As  Long 
Public  Declare  Function  EnumProcessModules  Lib  "psapi.dll"  (ByVal  hProcess 
As  Long,  ByRef  lphModule  As  Long,  ByVal  cb  As  Long,  ByRef  cbNeeded  As 
Long)  As  Long 
  
Public  Const  PROCESS_QUERY_INFORMATION  =  1024 
Public  Const  PROCESS_VM_READ  =  16 
Public  Const  MAX_PATH  =  260 
  
Public  Function  GetPath(ByVal  hWnd  As  Long)  As  String 
       Dim  hProcess  As  Long 
       Dim  ProcID  As  Long 
       Dim  mModules(1  To  200)  As  Long 
       Dim  cbNeed  As  Long 
       Dim  ModuleName  As  String 
       Dim  nSize  As  Long 
       Dim  lRet  As  Long 
       GetWindowThreadProcessId  hWnd,  ProcID 
       hProcess  =  OpenProcess(PROCESS_QUERY_INFORMATION  Or  PROCESS_VM_READ,  0,  ProcID) 
       lRet  =  EnumProcessModules(hProcess,  mModules(1),  200,  cbNeed) 
       If  lRet  <>  0  Then 
               ModuleName  =  Space(MAX_PATH) 
               nSize  =  500 
               lRet  =  GetModuleFileNameExA(hProcess,  mModules(1),  ModuleName,
  nSize) 
               GetPath  =  Left(ModuleName,  lRet) 
       End  If 
       lRet  =  CloseHandle(hProcess) 
End  Function
相关文章