帮忙:怎样关闭进程(100分)

  • 主题发起人 主题发起人 无限风
  • 开始时间 开始时间

无限风

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样关闭在ListView中选定的进程
程序:
type
TProcessInfo = Record
ExeFile : String;
ProcessID : DWORD;
end;
pProcessInfo = ^TProcessInfo;

type
; TForm1 = class(TForm)
; ; Button1: TButton;
; ; ListView1: TListView;
; ;
; ; procedure FormCreate(Sender: TObject);
; ; procedure Button1Click(Sender: TObject);
; private
; ; { Private declarations }
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;
; processlist:array of word ;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var p : pProcessInfo;
ContinueLoop:BOOL;
; ;ListItem: TListItem;

FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
i:integer;
begin

;FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
;FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
;ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
;while integer(ContinueLoop)<>0 do
; begin
; ;New(p);
; ; ;p.ExeFile := FProcessEntry32.szExeFile;
; ; ;p.ProcessID := FProcessEntry32.th32ProcessID;
; ; ;ListItem := listview1.Items.Add;
; ; ;ListItem.Caption := Format('%d',[p.ProcessID]);
; ; ;ListItem.SubItems.Add(Format('%s',[p.ExeFile]));
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
;end;
end;

procedure TForm1.Button1Click(Sender: TObject);//关闭进程
var Exehandle:thandle;
; ; ;s,str:string;
begin
;??? ; ; ;//s:=listview1.Items[listbox1.ItemIndex];
; ; ; ; ;//ExeHandle:=Findwindow(nil,pchar(s));
; ; ; ; //if ;ExeHandle<>0 then
; ; ; ;// PostMessage(ExeHandle,WM_CLOSE,0,0);
end;

end.
 
有没有 Uses TLhelp32, ShellAPI;
 
如果是98系统的话,可以用TERMINATEPROCESS,先用OPENPROCESS得到要关闭进程的句柄,
再TERMINATEPROCESS,不过这样用不安全。如果是2000下,可以看看我曾经贴过的一贴:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=583419
^_^
 
你在listview中显示的是进程id,而你用findwindow,当然不行了。如果你打开计算器,然后

; ;ExeHandle:=Findwindow(nil,pchar('计算器'));
; ;if ;ExeHandle<>0 then
; ; ; PostMessage(ExeHandle,WM_CLOSE,0,0);
就可以关闭计算器。
 
procedure TForm1.FormCreate(Sender: TObject);
var
; ;p : pProcessInfo;
; ;ContinueLoop:BOOL;
; ;ListItem: TListItem;
; ;FSnapshotHandle:THandle;
; ;FProcessEntry32:TProcessEntry32;
; ;i:integer;
begin

;FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
;FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
;ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
;while integer(ContinueLoop)<>0 do begin
; ;New(p);
; ; ;p.ExeFile := FProcessEntry32.szExeFile;
; ; ;p.ProcessID := FProcessEntry32.th32ProcessID;
; ; ;ListItem := listview1.Items.Add;
; ; ;//ListItem.Caption := Format('%d',[p.ProcessID]);
; ; ;ListItem.Caption := Format('%s',[p.ExeFile]);
; ; ;//ListItem.SubItems.Add(Format('%s',[p.ExeFile]));

; ; ; ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
;end;
end;
 
试试!
procedure TForm1.Button1Click(Sender: TObject);
var Exehandle: THandle;
with ListView do
begin
Exehandle:= OpenProcess(1,BOOL(0),StrToInt('$'+ItemFocused.SubItems[0]));
TerminateProcess(Exehandle,0);
ItemFocused.Delete;
end;
 
如:

unit Unit1;

interface

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

type
; TForm1 = class(TForm)
; ; Button1: TButton;
; ; ListBox1: TListBox;
; ; procedure Button1Click(Sender: TObject);
; private
; ; { Private declarations }
; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

type ;TProcessInfo = Record
; ; ExeFile ; ;: String;
; ; ;ProcessID ;: DWORD;
; ; ; end;
; pProcessInfo = ^TProcessInfo;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
; p: pProcessInfo;
; ContinueLoop: BOOL;
; FSnapshotHandle, hProcess: THandle;
; FProcessEntry32: TProcessEntry32;
; n: integer;
begin
; n:=1;
; New(p);
; FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
; FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
; ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
; while integer(ContinueLoop)<>0 do
; begin
; ; p.ExeFile:= FProcessEntry32.szExeFile;
; ; ListBox1.Items.Add(inttostr(n)+':'+inttostr
; ; ; ; ; ; ; (FProcessEntry32. th32ProcessID)+' ;* ;'+p.ExeFile);
; ; inc(n);
; ; if p.ExeFile='C:/WINDOWS/CALC.EXE' then
; ; begin
; ; ; hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE,
; ; ; ; ; ; ; ; ; ; ; ; ; ; ;FProcessEntry32. th32ProcessID);
; ; ; TerminateProcess(hProcess,0);
; ; end;
; ; ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
; end;
end;

end.
 
to YB_unique:
应该这么用吧:
var
; ;Exehandle: THandle;
; ;s : String;
begin
; ;s := Listview1.Selected.Caption;
; ;with ListView1 do begin
; ; ; //Exehandle:= OpenProcess(1,BOOL(0),StrToInt('$'+ItemFocused.SubItems[0]));
; ; ; Exehandle:= OpenProcess(1,BOOL(0),StrToInt(s));
; ; ; TerminateProcess(Exehandle,0);
; ; ; ItemFocused.Delete;
; ;end;
end;
 
我把你们的答案实验过,
只有hnzgf的可以,谢谢你们的回答
不好意思,我给hnzgf 80分
 
后退
顶部