我想做一个程序,具体的功能是,当程序运行时,它能禁止指定的某些进程的运行。比如,我如果不想QQ运行,它就能当QQ运行时,检测到QQ已经运行,并关闭该进程。请高手给出主要代码或则给出大体的设计思路。本人先谢谢大家了。。

解决方案 »

  1.   

    遍历进程,找到指定的进程就结束。
    类似的例子:
    http://community.csdn.net/Expert/topic/4726/4726211.xml?temp=.3132593
      

  2.   

    如果遍历进程的话,工作量太大了,而且我要实时进行遍历,因为我并不知道何时QQ会运行,这样对会影响cpu和内存工作。我是想,当进程运行的时候有没有方法能捕获,或则进程运行时会不会触发某些事件。大家再帮忙想想。。先谢谢大家了。
      

  3.   

    对于QQ来说,暂时还没有想到更好的办法,只能遍历进程,参考如下例子:
    uses
      TlHelp32;
    {$R *.dfm}function FindProcess(ExeName: string): Thandle;
    var
      m_hSnapshot: THandle;
      pe: TProcessEntry32;
      fend: Boolean;
    begin
      Result := 0;
      m_hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      pe.dwSize := SizeOf(pe);
      fend := Process32First(m_hSnapshot, pe);
      while fend do
      begin
        if CompareText(pe.szExeFile, ExeName) = 0 then
        begin
          Result := OpenProcess(PROCESS_ALL_ACCESS, False, pe.th32ProcessID);
          Break;
        end;
        pe.dwSize := SizeOf(pe);
        fend := Process32Next(m_hSnapshot, pe);
      end;
      CloseHandle(m_hSnapshot);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      PH: THandle;
    begin
      PH := FindProcess('QQ.exe');
      if PH <> 0 then
      begin
        TerminateProcess(PH,0);
        CloseHandle(PH);
      end;
    end;
      

  4.   

    不知道 Hook API, CreateProcess 成不成。
      

  5.   

    按楼上兄弟所说 Hook CreateProcess API,判断如果是 QQ 则不允许创建进程试试吧:)参考以下帖子中二楼的 woshihaoge(支离破碎) 兄弟的代码 ---
    http://community.csdn.net/Expert/topic/5297/5297937.xml?temp=.1683008