已知进程名如何获取此进程窗口句柄啊?

解决方案 »

  1.   

    var 
      FSnapshotHandle, ProcessHndle: THandle; 
      FProcessEntry32: TProcessEntry32; 
      ContinueLoop: BOOL; 
      ProcessID : integer; 
      ItemName : String; 
    begin 
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
      Result := True; 
      Try 
        FProcessEntry32.dwSize := Sizeof(FProcessEntry32); 
        ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32); 
        while integer(ContinueLoop) <>0 do 
        begin 
          ItemName := ExtractFileName(FProcessEntry32.szExeFile); 
          ProcessID := FProcessEntry32.th32ProcessID; 
          If UpperCase(ItemName) = 'QQ.EXE' Then//比較进程的名稱 
          Begin 
            ProcessHndle:=OpenProcess(PROCESS_ALL_ACCESS,BOOL(0),ProcessID); //进程的句柄       
          End;       ContinueLoop :=Process32Next(FSnapshotHandle,FProcessEntry32); 
        end; 
      Finally 
        CloseHandle(FSnapshotHandle); 
      End; 
    end; 
      

  2.   

    procedure TForm1.teminate_excel;
    var
      lppe: TProcessEntry32;
      found : boolean;
      Hand : THandle;
      hh:hwnd;
      s:string;
    begin
      Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
      found := Process32First(Hand,lppe);
      while found do
      begin
        s:=strpas(lppe.szExeFile);
        if uppercase(s)='EXCEL.EXE' then
        begin
          hh:=openprocess(PROCESS_ALL_ACCESS,true,lppe.th32ProcessID);
          terminateprocess(hh,0); //中止进程
          exit;
        end;
        found := Process32Next(Hand,lppe);
      end;
    end;
      

  3.   

    先用HelpTool弄个进程快照,然后遍历进程,找到目标进程,然后用FindWindow获得句柄