打开自己的程式 然后检测进程里面是否有QQ.exe QQ的主目录跟自己的程序在同一目录,如果进程里没有QQ 则帮它打开,如果有则帮它关闭delphi7应该如何实现? 意思就是要打开qq.exe 然后再自动帮它关掉

解决方案 »

  1.   

    历遍进程uses PsAPI;procedure TForm1.Button1Click(Sender: TObject);
    const
      n = 512;
    var
      IDArr: array[0..n-1] of DWORD;
      size,i: DWORD;
      buf: array[0..MAX_PATH] of Char;
      pHandle: THandle;
    begin
    //  FillChar(buf, n, #0); {这样可避免乱码}
      EnumProcesses(@IDArr, n, size);
      for i := 0 to size div SizeOf(DWORD) - 1 do
      begin
        pHandle := OpenProcess(PROCESS_ALL_ACCESS, False, IDArr[i]);
        GetModuleFileNameEx(pHandle, 0, buf, Length(buf)*SizeOf(buf[0]));
        CloseHandle(pHandle);
        Memo1.Lines.Add(buf);
      end;
    end;//强制关闭QQprocedure TForm1.Button1Click(Sender: TObject);
    var
      id: Cardinal;
      wh: HWND;
      ph: THandle;
      ExitCode: DWORD;
    begin
      wh := FindWindow('#32770', nil);
      GetWindowThreadProcessId(wh, id);
      ph := OpenProcess(PROCESS_TERMINATE, False, id);
      GetExitCodeProcess(ph, ExitCode);
      TerminateProcess(ph, ExitCode);
    end;end.//获取指定进程IDprocedure TForm1.FormCreate(Sender: TObject);
    var
      c: Cardinal;
    begin
      GetWindowThreadProcessId(Handle, @c);
      ShowMessage(IntToStr(c));                   {2792; 随机的}
      {在本例中相同于 GetCurrentProcessID 的结果}
      c := GetCurrentProcessID;
      ShowMessage(IntToStr(c));                   {2792}  c := GetWindowThreadProcessId(Handle, nil);
      ShowMessage(IntToStr(c));                   {2748}
      {在本例中相同于 GetCurrentThreadID 的结果}
      c := GetCurrentThreadID;
      ShowMessage(IntToStr(c));                   {2748}
    end;end.