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

请问如何通过进程ID获得进程句柄?

楼主songsu(松鼠)2005-03-16 20:16:18 在 VC/MFC / 进程/线程/DLL 提问

我通过创建当前系统进程快照得到一个快照句柄,然后再用First和Next函数访问的!但是这些函数只能得到一个PROCESS32     进程结构信息,里面只有ID  
   
  请问如何通过这些ID得到这些进程的句柄?  
  但是我想实现一个像微软进程查看器的功能,比如关闭某个进程,请问用什么函数??  
   
  问题点数:20、回复次数:13Top

1 楼laiyiling(陌生人[MVP])回复于 2005-03-16 20:23:24 得分 10

用EnumWindows枚举所有的top窗口,然后在对应的回调函数用GetWindowThreadProcessId,比较这个得到的进程ID和你已经知道的ID  
   
  部分代码:  
  DWORD     dwProcessID;//你的进程号  
  VOID   GetWindowHandle()  
  {  
          EnumWindows(   EnumWindowsProc,   (LPARAM)NULL);  
  }  
  static   BOOL   CALLBACK   EnumWindowsProc(HWND   hwnd,LPARAM   lParam)  
  {  
          DWORD     pid   =   0;  
          //   取得窗口的进程号  
          if   (!GetWindowThreadProcessId(   hwnd,   &pid   ))    
          {  
                  return   TRUE;         //   继续玫举  
          }  
          //   查找窗口在任务列表中的对应项  
          if(dwProcessID   ==   pid)  
          return   FALSE;  
          return   TRUE;         //继续玫举  
  }  
  Top

2 楼songsu(松鼠)回复于 2005-03-16 20:38:43 得分 0

这个有点麻烦吧!  
   
  因为有些在进程管理器显视出来的,他们都没有窗口呢!!!  
  我只能得到他们的进程和线程ID号  
   
  有没有哪个函数可以直接通过这个ID号找到他的进程句柄,  
   
  然后我就可以关闭这个进程了!Top

3 楼songsu(松鼠)回复于 2005-03-16 20:50:44 得分 0

顶起来!!!!Top

4 楼songsu(松鼠)回复于 2005-03-16 21:03:42 得分 0

查到一个函数,但是不知道具体的用法!  
  MSDN上面好像说有两个返回值啊!!!  
   
  第一个:This   method   returns   an   interface   for   a   process   specified   by   identifier.  
   
  IOsAxsGeneric::GetProcessByID  
   
  HRESULT   GetProcessByID   (  
          [in]   DWORD   dwID,  
          [out]   IOsAxsProcess   **   ppiOsAxsProcess  
  );  
   
  dwID       Specified   identifier.   //ID标识符  
  ppiOsAxsProcess     Pointer   to   the   requested   process.   //好像说指向一个请求的进程吧  
   
  第二个  
  Return   Values  
  The   following   table   shows   the   return   values   for   this   method.  
   
  Value   Description    
  S_OK   Indicates   the   function   was   successful.    
  E_INVALIDARG   Indicates   one   or   more   invalid   arguments.    
  E_POINTER   Indicates   one   or   more   invalid   pointers.    
  E_OUTOFMEMORY   Indicates   an   out   of   memory   error.    
  E_ACCESSDENIED   Indicates   the   specified   object   is   no   longer   valid.    
  E_FAIL   Indicates   an   unspecified   failure.    
  Top

5 楼idAnts(此广告位招租)回复于 2005-03-17 08:01:19 得分 1

OpenProcess可以根据ID得到句柄Top

6 楼Fzergling(十二年的轮回)回复于 2005-03-17 13:51:27 得分 2

(CWnd*)::OpenProcess(PROCESS_ALL_ACCESS,FALSE,pi.dwProcessId)Top

7 楼songsu(松鼠)回复于 2005-03-18 16:02:55 得分 0

再试试!!  
  Top

8 楼ayanamiwww(咩~咩『抵制日货』)回复于 2005-03-18 17:43:13 得分 1

OpenProcess肯定可以Top

9 楼ayanamiwww(咩~咩『抵制日货』)回复于 2005-03-18 17:43:30 得分 1

但是系统进程好像就不行Top

10 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-03-18 18:35:25 得分 2

OpenProcess可以打开进程Top

11 楼weishenme1977(为什么)回复于 2005-03-20 16:12:52 得分 1

我也正想这个问题呢  
  帮你顶Top

12 楼junkuang(大头)回复于 2005-03-20 18:00:33 得分 2

OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId)Top

13 楼0011411(爱也许是假的,可是当时的快乐是真的。)回复于 2005-03-20 18:20:01 得分 0

upTop

相关问题

  • 请问如何获得指定进程(句柄或者ID)的图标?
  • 由进程句柄ID如何得到窗户句柄ID?
  • 请问可以用一个进程的ID获得该进程的窗口的句柄吗?
  • 请问是否可以在知道进程ID的情况下,获得该进程的窗口句柄?
  • 怎样从另一进程获得该进程的主线程ID和主窗体句柄?
  • 模糊查找进程,获得Excel进程句柄.获得标题不定进程的句柄?
  • 请问,通过CreateProcess函数创建一个进程,如何通过主线程ID获得主窗口句柄?
  • 如何根据进程ID得到进程句柄?
  • 如何通过进程句柄得到进程id?
  • 如何通过进程句柄得到进程ID?

关键词

  • 函数
  • 进程
  • 句柄
  • 请问
  • dwprocessid
  • openprocess
  • indicates
  • 号
  • 得到
  • lparam

得分解答快速导航

  • 帖主:songsu
  • laiyiling
  • idAnts
  • Fzergling
  • ayanamiwww
  • ayanamiwww
  • oyljerry
  • weishenme1977
  • junkuang

相关链接

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

广告也精彩

反馈

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