知道运行的可执行文件名,要如何通过Delphi程序来实现程序的关闭?
解决方案 »
- delphi+mysql统计单列价格和
- IdTcp中WriteBuffer和ReadBuffer的取数问题
- 请问这句定义是什么意思???
- 求助:如何把<a href="http://www.sohu.com" target="_blank">按钮 </a> 连接到iwtraweb的控件使之打开新窗口
- 用adoquery怎么建立lookup字段?
- 关于友元哪位朋友能给讲的详细点?
- 怎样把字符串S中的内容COPY到buf中从指定的位置开始处?
- 怎么把一个字符串转换为Int64类型?
- 赋值赋不了
- 快来领分拉-组件开发中的一个问题,UP有奖!
- 社区风云榜-Delphi
- 关于Windows.Sendmessage的问题,请教高手
var
h:HWnd;
begin
h := FindWindow(nil,'邮件群发系统');
if h <> 0 then
sendmessage(h,WM_CLOSE,0,0);
end;
'邮件群发系统'就是文件名吗?我认为这个是程序的CLASSNAME,而不是exe文件名--------------------------------
你试一下不就明了了吗
var
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
Ret: Boolean;
TmpProcessName: string;
TmpProcessID: DWORD;
begin
TmpProcessID := 0; //如果没有找到
//创建系统快照
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//先初始化 FProcessEntry32 的大小
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
Ret := Process32First(FSnapshotHandle, FProcessEntry32);
//循环枚举出系统开启的所有进程,找出“ProcessName”所指定的进程
while Ret do
begin
TmpProcessName := ExtractFileName(FProcessEntry32.szExeFile);
if TmpProcessName = ProcessName then
begin
TmpProcessID := FProcessEntry32.th32ProcessID;
Break;
end;
Ret := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result := TmpProcessID;
end;procedure TForm1.Timer1Timer(Sender: TObject);
var
ProcessID: THandle;
FHandle: THandle;
begin
ProcessID := MyFun_GetProcessID('你的应用程序的文件名');
FHandle := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID);
TerminateProcess(FHandle,0);
end;用这种方式,可以强行关闭你指定的exe文件,你试试看!
var
h:HWnd;
begin
h := FindWindow(nil,'你的窗口名称');
if h <> 0 then
sendmessage(h,WM_CLOSE,0,0);
function KillTask(ExeFileName:string):integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOLean;
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;
先根据文件名找是否有该进程,有则取得其句柄,在发送CLOSE消息
var
lppe: TProcessEntry32;
found: boolean;
Hand: THandle;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
found := Process32First(Hand, lppe);
while found do
begin
if UpperCase(AProcName) = UpperCase(lppe.szExeFile) then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE, False, lppe.th32ProcessID), 0);
found := false;
end
else
found := Process32Next(Hand, lppe);
end;
end;