如何在程序中监控多个程序即关闭我不想运行的程序窗口(50分)

  • 主题发起人 goodflag
  • 开始时间
G

goodflag

Unregistered / Unconfirmed
GUEST, unregistred user!
本人刚学delphi,写了个小程序,代码如下:
unit watchsystem;

interface

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

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

var
Form1: TForm1;
hWnd:longword;
wintext:pchar;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.WindowState:=wsMinimized;
Timer1.Enabled:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

hWnd:=findwindow(nil,wintext);
if (hWnd<>0) then
PostMessage(hWND,WM_CLOSE,0,0);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;
wintext:='登录信息';//'联众游戏'启动窗口名称
end;

end.
这个程序运行后,"联众游戏"无法运行,如果我想同时使qq也无法运行,该怎麽办?另外
把程序写成系统托盘,该如何写?请高手赐教!!!!!!!
 
为什么没人回答?????
 
用hook吧。有好多种hook可以利用的。
有一种启动程序的hook,可以在hook函数中
作出判断再次定是否关闭。
 
to dedema
请详细一些,我是初学者,谢谢
 
请看以下示例:

120. 获得进程列表,并终止 Excel 进程
procedure TForm1.Button1Click(Sender: TObject);
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
Memo1.clear;
while Ret do
begin
Memo1.lines.add(FProcessEntry32.szExeFile);
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='EXCEL.EXE' then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1);
s:='';
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;

 
to jsxjd
首先谢谢你的发言,你贴出的示例是先枚举系统运行的进程,再kill excel.exe 如果要kill
几个进程, 是否在if语句后,把要kill的进程都一一列出,还有更好的办法吗?
我的想法是当我的程序运行时,我的程序中规定的不能运行的程序(多个)都关闭窗口,目前
我的程序运行时,只能关闭'联众游戏'的窗口,如何使多个程序的窗口都关闭??????
请大家多多发言!!谢谢!!!!!!!.
 
//---------[中止进程]-------------------------------------------------------------------
FUNCTION FkProcessKill(vName:STRING;vCheck:BOOL):BOOL;
VAR
boolFind:Boolean;
hdlFind,hdlClose,hdlCancel:THandle;
tpe32Find:TProcessEntry32;
sTemp,sProc:STRING;
bTemp:pCHAR;
BEGIN
hdlFind:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
tpe32Find.dwSize:=Sizeof(tpe32Find);
boolFind:=Process32First(hdlFind,tpe32Find);
WHILE boolFind DO
BEGIN
IF GetCurrentProcessID=tpe32Find.th32ProcessID THEN
BEGIN boolFind:=Process32Next(hdlFind,tpe32Find); Continue; END;
sTemp:=UpperCase(TRIM(tpe32Find.szExeFile));
sProc:=UpperCase(TRIM(vName));
IF NOT vCheck THEN
BEGIN
sTemp:=ExtractFileName(sTemp);
sProc:=ExtractFileName(sProc);
END;
IF sTemp=sProc THEN
BEGIN
hdlClose:=OpenProcess(PROCESS_ALL_ACCESS,True,tpe32Find.th32ProcessID);
GetExitCodeProcess(hdlClose,hdlCancel);
IF terminateProcess(hdlClose,hdlCancel) THEN
BEGIN Result:=true; END
ELSE Result:=false;
END;
boolFind:=Process32Next(hdlFind,tpe32Find);
END;
END;
//----------------------------------------------------------------------------
FkProcessKill('你想关的程序',False);
FkProcessKill('你想关的程序',False);
FkProcessKill('你想关的程序',False);
FkProcessKill('你想关的程序',False);
FkProcessKill('你想关的程序',False);
FkProcessKill('你想关的程序',False);
..........................................
 
顶部