关闭外部程序,用FindWindow()无法实现,无奈中。 我是从asm来的,不会写delphi代码,给你一点建议,用enumwindows函数遍历非弹出式窗口,再编写回调函数关闭之. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 既然 能 得到句柄.发wm_destroy,或wm_quit给它试试.sendmessage如果不行,用postmessage. 我遇到过,好像用 WM_SYSCOMMAND 就可以了。SendMessage(ExeHandle, WM_SYSCOMMAND, SC_CLOSE, 0); procedure CloseApp(appName: Pchar);var HWnd: HWnd; begin //Find the exist app window HWnd := FindWindow(nil, appName); if HWnd <> 0 then // close the exist app SendMessage(HWnd, WM_CLOSE, 0, 0);end; 谢谢各位大侠的鼎力相助,经过试验,一下两条语句能实现在win2000上关闭资源管理器:SendMessage(ExeHandle, WM_SYSCOMMAND, SC_CLOSE, 0); postmessage(ExeHandle,WM_CLOSE,0,0);再次感谢各位的帮忙。 //==============================================================================//强制终止某应用程序运行********************************************************//==============================================================================procedure AppForceExit(const AppName: string);var lppe: TProcessEntry32; ssHandle: THandle; Wnd: HWND; AppFound: Boolean;begin ssHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0); AppFound := Process32First(sshandle, lppe); while AppFound do begin //其中lppe.szExefile就是程序名********************************************** if UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AppName) then begin Wnd := OpenProcess(PROCESS_ALL_ACCESS, true, lppe.th32ProcessID); TerminateProcess(Wnd, 0); end; AppFound := Process32Next(ssHandle, lppe); end;end;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~procedure TForm_Main.Button18Click(Sender: TObject);begin case (Sender as TButton).Tag of 0: ShellExecute(Handle, 'Open', PChar('ping.exe'), PChar('192.168.1.11 -t'), nil, SW_SHOWNORMAL); 1: AppForceExit('ping.exe'); end; (Sender as TButton).Tag := (Sender as TButton).Tag xor 1;end; 将SENDMESSAGE改为POSTMESSAGE就可以了 点击DBGrid某条记录,说白了就是修改数据。详细资料下看。 RooyeeMessenger由Delphi开发的XMPP即时通讯客户端(开源) 使用ImgScan控件控制扫描仪报“扫描仪或扫描仪处理程序错误”!!! 关于RadioGroup的问题 高手请进,急求!!!! 这个sql语句如何写?非高手莫进。 ADO主从表问题 如何取消删除??? 灵活查询有什么好的方法? 紧急求助,SQL高手请进:INSERT INTO FOX表中,生成一个字串,数字字段如何处理:不吝高分! 一个排序的问题,请教更快的算法。 关于MFC类库和VCL类库的问题?
sendmessage如果不行,用postmessage.
SendMessage(ExeHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
var
HWnd: HWnd;
begin
//Find the exist app window
HWnd := FindWindow(nil, appName);
if HWnd <> 0 then // close the exist app
SendMessage(HWnd, WM_CLOSE, 0, 0);
end;
postmessage(ExeHandle,WM_CLOSE,0,0);
再次感谢各位的帮忙。
//强制终止某应用程序运行********************************************************
//==============================================================================
procedure AppForceExit(const AppName: string);
var lppe: TProcessEntry32;
ssHandle: THandle;
Wnd: HWND;
AppFound: Boolean;
begin
ssHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
AppFound := Process32First(sshandle, lppe);
while AppFound do
begin
//其中lppe.szExefile就是程序名**********************************************
if UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AppName) then
begin
Wnd := OpenProcess(PROCESS_ALL_ACCESS, true, lppe.th32ProcessID);
TerminateProcess(Wnd, 0);
end;
AppFound := Process32Next(ssHandle, lppe);
end;
end;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm_Main.Button18Click(Sender: TObject);
begin
case (Sender as TButton).Tag of
0: ShellExecute(Handle, 'Open', PChar('ping.exe'), PChar('192.168.1.11 -t'), nil, SW_SHOWNORMAL);
1: AppForceExit('ping.exe');
end;
(Sender as TButton).Tag := (Sender as TButton).Tag xor 1;
end;