请问,各位大哥!怎样才能得到一个,非当前进程的句柄?(进程名和进程的ID已知道了) 回复内容

1 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-06-01 13:48:31

什么句病??句柄有好多种的  
  窗口句柄,设备上下文句柄,文件句柄,设备句柄,注册表键句柄.................Top

2 楼d0347(旭日升群枭)回复于 2003-06-01 14:15:32

我说,得主要是指;窗口句柄,和文件句柄Top

3 楼deanchang(鱼)回复于 2003-06-01 19:56:19

非当前进程,你能知道它的PID??????  
  最多只能知道进程名吧,PID每次都不一样的;  
  你想要得到他的句柄用findwindow(窗口类名,nil)或是findwindow(nil,窗口名)但都不是很好用  
  最好是枚举所有的进程,来查找你要的进程,然后得到它的句柄;  
   
  下面的代码你可以参考一下:  
  ------------------------------  
  ...  
  FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
          FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);  
          Con_Loop:=Process32First(FSnapshotHandle,FProcessEntry32);  
          while   Con_Loop   do  
          begin  
   
          if   FProcessEntry32.szExeFile='你想要处理的进程名'   then  
          begin  
          OPenProcess(PROCESS_TERMINATE,false,FProcessEntry32.th32ProcessID)  
                                  //这里是请求关闭进程的访问请求码PROCESS_TERMINATE;  
                                  //其它的自己去查DH;  
                                  //OPendProcess()返回的就是你要处理进程的句柄;  
          ...  
          end;  
  ...  
   
  GOOD   LUcK...Top

4 楼xiaoyuer0851(红旗下的蛋)回复于 2003-06-01 20:59:07

谢谢!~~~  
   
  收藏ing   ,高手请进……Top

5 楼d0347(旭日升群枭)回复于 2003-06-01 21:35:22

下面,就是我得系统各个线程的Id   和   名称,但还要得到各个线程的句柄,  
  请问   各路英雄豪杰   怎么做?,先谢谢了  
   
  /////////////////////////////////////////////////////////////////////////////  
  Var  
        Snapshot:   DWord;  
        MsgProcess:   PROCESSENTRY32;  
  begin  
              Snapshot   :=   CreateToolhelp32Snapshot(   TH32CS_SNAPPROCESS   ,GetCurrentProcessId()     )   ;  
              MsgProcess.dwSize   :=   296   ;  
   
              //   获得第一个进程  
              Process32First(Snapshot,   MsgProcess)   ;  
              Memo1.lines.Add  
                  (   Format('进程ID号:%d       文件名:%s',  
                      [MsgProcess.th32ProcessID,  
                          MsgProcess.szExeFile])  
                  );  
   
              //   循环取列举的进程名称  
              While   (True)   Do  
                  Begin  
                          If   Process32Next(Snapshot,MsgProcess)=   False   Then   Exit;  
                          Memo1.lines.Add  
                              (   Format('进程ID号:%d               文件名:%s',  
                                  [MsgProcess.th32ProcessID,  
                                  MsgProcess.szExeFile])  
                              );  
                  End   ;  
  end;  
  //////////////////////////////////////////////////////////////////////////////Top

6 楼d0347(旭日升群枭)回复于 2003-06-01 21:59:23

哦!刚才看了一下帮助  
  用OpenProess()   可以获得句柄的,  
   
  谢谢     deanchang(鱼)     的例子   ThanksTop