請問各位了,這本書哪里有電子版的dowm,謝了!

解决方案 »

  1.   

    实际上,要探测某个程序是否正在运行不难,用API函数可以搞定。
    但是要关闭它,可不是件简单的事,因为你要考虑是否取得关闭的权限,或者
    被关闭者,本身就是需要人机应答才能关闭。也许我说的不会是废话吧。
      

  2.   

    SendMessage(FindWindow(nil,"Window Title"),WM_CLOSE,0,0);
      

  3.   

    嘿嘿,首先用findwindow 找到它,然后用post (handle,WM_CLOSE,0,0) (handle,WM_DESTROY,0,0) (handle,WM_ENDSESSION,0,true)
      

  4.   

    請問各位了,這本書哪里有電子版的dowm,謝了! 
      

  5.   

    我编了一个小工具——“魔法宝镜”,应符合你的要求,核心代码如下,希望对你有用(对了,解决问题后别忘给分呀,呵呵^-^):
    一、找到正运行的程序:
    procedure search;{注:ListView1为控件ListView}
     var
      ProcessInfo : tagPROCESSENTRY32;
      Handle : THandle;
      Node : TListItem;
         i : Integer;
    begin
      i :=1;
      ListView1.Items.Clear ;
      Handle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) ;
      ProcessInfo.dwSize := SizeOf(ProcessInfo);
      if Process32First(Handle,ProcessInfo) then
      begin
        Node := ListView1.Items.Add;
        Node.Caption :=(ProcessInfo.szExeFile);
        ProcId[0] :=ProcessInfo.th32ProcessID ;
      end;
      while Process32Next(Handle,ProcessInfo) do
      begin
        Node := ListView1.Items.Add;
        Node.Caption := (ProcessInfo.szExeFile);
         ProcId[i] := ProcessInfo.th32ProcessID ;
        i := i+1;
      end;
    end;二、关闭程序:
    Procedure ClosePrg;
     var
      Handle : THandle;
     
    begin
      if MessageDlg('是否要结束该进程?',mtWarning,[mbok,mbcancel],0)=mrok then
      begin
        if ListView1.Selected <> nil then
        begin
          Handle := OpenProcess(PROCESS_TERMINATE,False,ProcId[ListView1.Selected.Index]);
          TerminateProcess(Handle,0);
        end;  
      end;
    end;
      

  6.   

    function KillTask(ExeFileName: string): integer;
    const
    PROCESS_TERMINATE=$0001;
    var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
    begin
    result := 0;
    FSnapshotHandle := CreateToolhelp32Snapshot
     (TH32CS_SNAPPROCESS, 0);
    FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
    ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
    while integer(ContinueLoop) <> 0 do
    begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(ExeFileName))) then
    Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
    end;
    end;