请教高手 dephi 一个应用里怎么样关闭另一个一打开的应用?

loving 2002-10-23 04:41:10
请教高手 dephi 一个应用里怎么样关闭另一个一打开的应用?
具体的api ,最好给个例子!

万分感谢!
...全文
26 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnLANmagic 2002-10-27
  • 打赏
  • 举报
回复
Sorry,没看清楚,灌谁心切
cnLANmagic 2002-10-27
  • 打赏
  • 举报
回复
哈哈,一个小小的api就能搞定了。
这类的api太多了。

调用winexexc();参数省略,参见delphi的帮助吧,要注意第一个参数不是pchar,要用另一个api转一下
jxk 2002-10-23
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type
TProcessInfo = record
ExeFile: string;
ProcessId: DWORD;
end;
ProcessInfo = ^TProcessInfo;
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ProcessList(var pList: TList);
procedure My_RunFileScan(ListboxRunFile: TListBox);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
Current: TList;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ProcessList(var pList: TList);
var
p: ProcessInfo;
ok: Bool;
ProcessListHandle: THandle;
ProcessStruct: TProcessEntry32;
begin
PList := TList.Create;
PList.Clear;
ProcessListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ProcessStruct.dwSize := Sizeof(ProcessStruct);
ok := Process32First(ProcessListHandle, ProcessStruct);
while Integer(ok) < > 0 do
begin
new(p);
p.ExeFile := ProcessStruct.szExeFile;
p.ProcessID := ProcessStruct.th32ProcessID;
PList.Add(p);
ok := Process32Next(ProcessListHandle, ProcessStruct);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
a: DWORD;
p: PRocessInfo;
begin
if ListBox1.ItemIndex >= 0 then
begin
p := Current.Items[ListBox1.ItemIndex];
h := openProcess(Process_All_Access, true, p.ProcessID);
GetExitCodeProcess(h, a);

if Integer(TerminateProcess(h, a)) < > 0 then
begin
My_RunFileScan(ListBox1);
end;
end
else
Application.MessageBox('请先选择一个进程!', '黑洞', MB_ICONERROR + MB_OK);
end;

procedure TForm1.My_RunFileScan(ListboxRunFile: TListBox);
var
i: Integer;
p: PRocessInfo;
begin
current := TList.Create;
Current.Clear;
ListboxRunFile.Clear;
ProcessList(Current);
for i := 0 to Current.Count - 1 do
begin
new(p);
p := Current.Items[i];
ListboxRunFile.Items.Add(p.ExeFile);
end;
end;

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

end.
wxjh 2002-10-23
  • 打赏
  • 举报
回复
postmessage
wxjh 2002-10-23
  • 打赏
  • 举报
回复
SENDMESSAGE OR
PERFORM
bengbeng24 2002-10-23
  • 打赏
  • 举报
回复
学习
ZHENG017 2002-10-23
  • 打赏
  • 举报
回复
用FindWindow得到窗口句柄,再GetWindowThreadProcessId()得到进程id,用OpenProcess得到进程句柄,再ExitProcess();
或者直接给窗口句柄发送一个WM_CLOSE消息。SendMessage(FindWindow(NULL,"记事本"),WM_CLOSE,0,0);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧