只是一个简单的可执行程序
比如notepad.exe我想请问一下如何通过程序获取它的句柄

解决方案 »

  1.   

    通过函数FindWindow可以得到它的句柄。
      

  2.   

    我不是很清楚你所说的“后台程序”是一个什么样的程序。就一般来说,
    用FindWindow函数应该是可以的,不知你试过没有。如果实在是不行,
    我考虑可以试一下这样:
    用EnumWindows函数,在回调函数获取句柄,再判别是否是所需获得的程
    序,否则继续查找。即使是Service程序,通过此法亦可查出。
      

  3.   

    uses TlHelp32;
    function GetProcHandle(ProcName: ShortString): THandle;
    var
      LP: TProcessentry32;
      HD: THandle;
      BF: Boolean;
    begin
      Result := nil;
      HD := Createtoolhelp32snapshot(TH32CS_SNAPALL,0);
      BF := Process32first(HD,LP);
      while BF
      do begin
        if AnsiCompareText(ExtractFileName(LP.szExeFile),ProcName) = 0
        then begin
          Result := LP.th32ProcessID;
          Break;
        end;
        BF := Process32next(HD,LP);
      end;
      CloseHandle(HD);
    end;例如: H := GetProcHandle('NOTEPAD.EXE');//注意大写
      

  4.   

    TlHelp32只能用于Win9x ,在NT2000等应该用什么?
      

  5.   

    通过 CAMELCN(驼子) 的方法得到的是这个进程的id而不是句柄。
      

  6.   

    如何从id得到句柄?
    openprocess?
    要得是指定的啊
    测试了一下
    好像不一样呢
      

  7.   

    openprocess不行吗?得到了指定的进程的id打开的当然是指定的进程的句柄了。
      

  8.   

    UP
    openprocess好像不行,我做过类似的程序,在连续的时间内多次调用openprocess获取一个ID的句柄,可是每次所得的句柄都不一样?而且局柄都是按阿拉伯数字增加的,怎么回事,是不是openprocess的问题,还是我调用的问题
    我是这样写的
    OpenProcess(STANDARD_RIGHTS_REQUIRED{PROCESS_VM_READ},false,FProcessEntry32.th32ProcessID);
    那里不对,请指点一下,我实在D7,Win2000下面
      

  9.   

    我使用openprocess也是出现同样的情况。
      

  10.   

    OpenProcess(STANDARD_RIGHTS_REQUIRED{PROCESS_VM_READ},false,FProcessEntry32.th32ProcessID);错误OpenProcess(PROCESS_ALL_ACCESS,true,FProcessEntry32.th32ProcessID);
    返回的为已打开的进程句柄