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

解决方案 »

  1.   

    非当前进程,你能知道它的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...
      

  2.   

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

  3.   

    下面,就是我得系统各个线程的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;
    //////////////////////////////////////////////////////////////////////////////
      

  4.   

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