我有一个小程序,被其他组态程序调用,但我的窗体运行后自动隐藏,我用了hide方法。
但是当关闭那个组态程序时,我的进程仍然在内存中,不能关闭,有时造成不能正常关机。如何关闭那个进程,比如叫tongxun.exe,请给出详细代码,在线等,谢谢!!
顺便说一下,我的系统是win2000或win2003,拜托!
但是当关闭那个组态程序时,我的进程仍然在内存中,不能关闭,有时造成不能正常关机。如何关闭那个进程,比如叫tongxun.exe,请给出详细代码,在线等,谢谢!!
顺便说一下,我的系统是win2000或win2003,拜托!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,TLHelp32, StdCtrls;type
TForm1 = class(TForm)
ListBox1: TListBox;
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation//关闭进程的函数
function KillTask(ExeFileName: string): Integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, 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;
CloseHandle(FSnapshotHandle);
end;
//函数结束{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
HWndCalculator: HWnd; //关闭文件
lppe: TProcessEntry32;
found: boolean;
Hand, myhandle: THandle;
w, d: Integer;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
found := Process32First(Hand, lppe);
while found do begin
listbox1.Items.Add(StrPas(lppe.szExeFile));
found := Process32Next(Hand, lppe);
end;
end;procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
edit1.Text:=listbox1.Items.Strings[listbox1.ItemIndex];
end;procedure TForm1.Button1Click(Sender: TObject);
begin
KillTask(edit1.Text); //关闭进程
end;end.程序一个listbox1 一个button1 一个edit1 程序窗口创建的时候,自动获到所有进程并显示在listbox1,,你双击列表中一个进程,,,进程名称显示在edit1.text中,点button1,,,删掉这个进程,,,,记得给分,哈
function KillTask(ExeFileName: string): Integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, 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;
CloseHandle(FSnapshotHandle);
end;
//函数结束
就是这个函数,,,,你用这个函数就行了调用
KillTask('tongxun.exe'); //关闭进程