var Exehandle: THandle; s : String; begin s := '进程名'; Exehandle:= OpenProcess(1,BOOL(0),StrToInt(s)); TerminateProcess(Exehandle,0); end; 上面的应该可以, 不行的话你可以试试消息 HWND h:=::FindWindow(0,"窗口名称"); if (h<>nil)then PostMessage(h,WM_CLOSE,0,0);
to bobdylan(风) 我就是要对主窗体发WM_CLOSE消息 to ysai(大海呀,真TM的大) 由于某种原因不能用TerminateProcess to longchaohui(阿龙) 窗体类名和窗体名都有可能变,他们不确定 to master_jt(天堂狗) 我的是7,我能获取进程列表,但没办法得到它的句柄
WM_CLOSE只对窗口句柄生效
Exehandle: THandle;
s : String;
begin
s := '进程名';
Exehandle:= OpenProcess(1,BOOL(0),StrToInt(s));
TerminateProcess(Exehandle,0);
end;
上面的应该可以,
不行的话你可以试试消息
HWND h:=::FindWindow(0,"窗口名称");
if (h<>nil)then
PostMessage(h,WM_CLOSE,0,0);
只知道exename的话那就枚举所有进程
如果用delphi 8的话就简单了
.net类库中有getprocessbyname方法
to ysai(大海呀,真TM的大) 由于某种原因不能用TerminateProcess
to longchaohui(阿龙) 窗体类名和窗体名都有可能变,他们不确定
to master_jt(天堂狗) 我的是7,我能获取进程列表,但没办法得到它的句柄
进程不一定有界面,也就是不一定有窗口
进程必然有一个或一个以上线程,线程可能拥有窗口
OperProcess是取得进程句柄,而WM_CLOSE是发向窗口句柄......
就算可以通过进程句柄取得窗口句柄(如果进程有窗口的话,EnumThreadWindows可能有点帮助),一般也是多个窗口,你既不知道窗口的类名又不知道窗口的标题,你怎么知道往哪个窗口发消息?
Exehandle:= OpenProcess(1,BOOL(0),StrToInt(s));报错呀,字符串无法转换成整型呀
aProcess: Cardinal;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOWNORMAL;
if CreateProcess(nil, 'notepad.exe', nil, nil, false, Create_new_console or
Normal_priority_class, nil, nil, StartupInfo, ProcessInfo) then
aProcess := processinfo.hProcess;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
TerminateProcess(aProcess, 0)
end;
你可以用 TerminateProcess 啊