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

WinXP下如何获得进程的全路径?

楼主titi_lima(titilima(李马)的马甲.net)2003-09-02 21:47:34 在 VC/MFC / 基础类 提问

PROCESSENTRY32结构之中的szExeFile可以在98之中显示进程的全路径,但是在XP之下就不能了。请问诸位高手,如何获得进程的全路径?谢谢! 问题点数:50、回复次数:17Top

1 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-09-02 21:58:44 得分 0

唉,顶Top

2 楼COKING(天晴)回复于 2003-09-02 22:55:57 得分 0

AfxGetApp()->m_pszExeName;Top

3 楼Kyle_Chen()回复于 2003-09-02 23:16:31 得分 1

char   szPath[_MAX_PATH];  
  GetModuleFileName(GetModuleHandle(NULL),   szPath,   _MAX_PATH);Top

4 楼masterz(www.fruitfruit.com)回复于 2003-09-02 23:43:08 得分 1

void   GetProcessName(DWORD   processid,LPTSTR   buf,int   len)  
  {  
  //make   sure   buf   is   valid   and   long   enough  
  if(buf==NULL||len<=0)  
  return;  
  buf[0]=0;  
  if(processid   ==8)  
  {  
  _tcscpy(buf,"System");  
  return;  
  }  
  if(processid==0)  
  {  
  _tcscpy(buf,"System   Idle   Process");  
  return;  
  }  
  HANDLE   hProcess   =OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,false,processid);  
  if(hProcess   ==NULL)  
  {  
  _tcscpy(buf,"unknown(OpenProcess   error)");  
  return;  
  }  
  HMODULE   hModule;  
  DWORD   cbReturned;  
  BOOL   bret=EnumProcessModules(hProcess   ,&hModule,   sizeof(hModule),   &cbReturned   );  
  if(bret)  
  {  
  DWORD   dwret=GetModuleFileNameEx(hProcess   ,hModule,buf,len);  
  //GetModuleBaseName(hProcess,hModule,buf,len);  
  }  
  else  
  _tcscpy(buf,"unknown(GetModuleBaseName   error)");  
  CloseHandle(   hProcess     )   ;  
  // GetProcessName2(processid,buf);  
  }Top

5 楼howtotell(从何谈起)回复于 2003-09-03 07:50:53 得分 1

Masterz的程序的代码在98下编译不过,即使在2k下编译过了在2K下执行也是出错.我试过.Top

6 楼yh824()回复于 2003-09-03 09:05:40 得分 30

我最近作了各类似的:   (我是获得若干进程的全路径,主要用到CreateToolhelp32Snapshot和GetModuleFileNameEx,path就是全路径,你自己把不要的去掉就可以了)  
  HANDLE     hSnapShot   =   NULL,   hExeFile   =   NULL;    
  BOOL bRet   =   FALSE   ;  
  CString   show   ;  
   
  hSnapShot   =   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,   0);  
   
  if   (hSnapShot   ==   INVALID_HANDLE_VALUE)    
                  return   bRet;    
   
  PROCESSENTRY32   info   ;  
          info.dwSize   =   sizeof(info);  
   
  if(Process32First(hSnapShot,   &info))  
  {  
  if(GetLastError()   ==   ERROR_NO_MORE_FILES   )  
  {  
  AfxMessageBox("没有进程信息   !")   ;  
  CloseHandle(hSnapShot);  
  return   bRet   ;  
  }  
  else  
  {  
  CString   ExeFile,   ExePath;  
  char   path[255]   ;  
  memset(path,   0,   sizeof(path))   ;  
     
  int   nCount   =   arry.GetSize()   ;  
  int   nIndex   =   0   ;  
  int   pos   =   0   ;  
  for   (int   i   =   0;   i   <   nCount;   i++)  
  {  
  nIndex   =   arry.GetAt(i)   ;  
  ExeFile   =   m_csArry.GetAt(nIndex)->name   ;  
  ExePath   =   ExeFile   ;  
  pos   =   ExeFile.ReverseFind('\\')   ;  
  pos   =   ExeFile.GetLength()   -   pos   -   1   ;  
  ExeFile   =   ExeFile.Right(pos)     ;    
   
  while   (Process32Next(hSnapShot,   &info))  
  {  
  if   (ExeFile   ==   info.szExeFile)  
  {  
  hExeFile   =   OpenProcess(PROCESS_ALL_ACCESS,   FALSE,   info.th32ProcessID);  
  if(hExeFile   !=   NULL)  
  {  
  GetModuleFileNameEx(hExeFile,   (HMODULE)(info.th32ModuleID),   path,   255)   ;  
  if   (ExePath   ==   path)  
  {  
  TerminateProcess(hExeFile,   0);  
  m_list2.SetItemText(nIndex,   1,   "未运行")   ;  
  m_list2.SetItemText(nIndex,   2,   "")   ;  
  m_csArry.GetAt(nIndex)->flag   =   false   ;  
  break   ;  
  }  
  }  
  }  
  }  
  }  
  bRet   =   TRUE   ;  
  }  
  }  
  else  
  {  
  AfxMessageBox("   系统错误   !")   ;  
  }  
          CloseHandle(hSnapShot);  
  return   bRet   ;Top

7 楼yinx(新星知我心)回复于 2003-09-03 09:06:27 得分 0

GetModuleFileName   不行么  
  Top

8 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-09-03 20:16:13 得分 0

Toyh824(啾啾虫):  
  为什么在MSDN中可以找到GetModuleFileNameEx,而我的VC   6.0不能使用?Top

9 楼Oversense(步步文)回复于 2003-09-03 20:53:11 得分 0

要包含头文件才可以用GetModuleFileNameExTop

10 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-09-03 20:56:35 得分 0

To   Oversense(步步文):  
  哪个头文件?我用Find   in   files...找过了,没找到哦。  
  谢谢!Top

11 楼ppyy()回复于 2003-09-03 21:08:06 得分 10

Requirements    
      Windows   NT/2000:   Requires   Windows   NT   4.0   or   later.  
      Header:   Declared   in   Psapi.h.  
      Library:   Use   Psapi.lib.  
      Unicode:   Implemented   as   Unicode   and   ANSI   versions   on   Windows   NT/2000.  
  Top

12 楼yh824()回复于 2003-09-04 09:57:46 得分 1

哦,是这样,#include   "psapi"   就OK了Top

13 楼yh824()回复于 2003-09-04 09:58:54 得分 1

#include   "psapi.h",   呵呵~Top

14 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-09-04 10:58:43 得分 0

谢谢诸位热心的解答,我的VC   6.0并没带有psapi.h和psapi.lib,我从VS.net   2003中复制了一份,运行正常。但是仍然无法获得那些系统服务(如svchost.exe等)的全路径,请问如何解决?Top

15 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-09-04 22:23:04 得分 0

请大家帮忙!如果分不够可以另开贴加分!Top

16 楼yh824()回复于 2003-09-05 08:58:09 得分 5

后台服务进程事受到操作系统保护的,出于安全性和稳定性的考虑,如果你只通过正常途径是不大可能让你获得他的句柄。Top

17 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-09-05 13:11:44 得分 0

OK,那谢谢了,结贴。Top

相关问题

  • ◆ 如何用进程ID 获得进程路径?
  • 我知道进程ID后怎样获得进程的路径
  • 怎样获得进程的绝对路径,急!急!在线等
  • 如何在COM组件中获得客户进程所在磁盘路径?
  • 关于CListCtrl数据的设置和如何获得进程的完整路径???
  • 请问如何获得系统所有的进程并获得这些进程的相关执行文件的路径?
  • 请问如何用WinAPI获得一个程序(进程) 的可执行文件名和路径
  • 怎么得到进程的路径?
  • 怎样获得路径
  • 如何获得windows路径

关键词

  • nt
  • null
  • hexefile
  • exefile
  • psapi
  • 获得
  • 谢谢
  • nindex
  • 进程的全路径
  • pos

得分解答快速导航

  • 帖主:titi_lima
  • Kyle_Chen
  • masterz
  • howtotell
  • yh824
  • ppyy
  • yh824
  • yh824
  • yh824

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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