SetWindowLong(frmDll.Handle,GWL_STYLE,GetWindowLong(frmDll.Handle,GWL_STYLE) and not (WS_CAPTION or WS_THICKFRAME));
windows.SetParent(frmDll.Handle,frmExe.panWorkSpace.Handle);
其中WS_CAPTION和WS_THICKFRAME分别表示标题栏和边框,问题解决.
Q:[Delphi]关闭外部程序又一方法
A:假设要关闭 notepad.exe 程序,代码如下:
uses tlhelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
lppe:tprocessentry32;
sshandle:thandle;
hh:hwnd;
found:boolean;
begin
sshandle :=createtoolhelp32snapshot(TH32CS_SNAPALL,0);
found :=process32first(sshandle,lppe);
while found do
begin
if uppercase(extractfilename(lppe.szExeFile))=’NOTEPAD.EXE’ then //**
begin
hh:=OpenProcess(PROCESS_ALL_ACCESS,true,lppe.th32ProcessID);
TerminateProcess(hh,0);
end;
found:=process32next(sshandle,lppe);
end;
end;
-------------------------
Uses WinSvc
faq-it.org/delphi_vcl/ procedure RunService(ServiceName : String); //启动服务
procedure TASESWatch2002.RunService(ServiceName: String);
var
svcmgr,svc : Integer ;
temp : _SERVICE_STATUS;
s : Pchar ;
begin
svcmgr :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if svcmgr = 0 then
exit ;
svc :=OpenService(svcmgr,pchar(ServiceName),SERVICE_ALL_ACCESS);
if svc = 0 then
begin
CloseServiceHandle(svcmgr);
exit ;
end ;
QueryServiceStatus(svc,temp);
if temp.dwCurrentState = SERVICE_STOPPED then
begin
if StartService(svc,0,s) then
//服务:"'+ServiceName+'"启动成功' else
//服务:"'+ServiceName+'"启动失败';
end ;// ControlService(svc,SERVICE_CONTROL_STOP,temp);关闭服务
CloseServiceHandle(svcmgr);
CloseServiceHandle(svc);
end;
up
-------------------------------
3. 关闭已开启的外部应用程序
⑴ 通过调用两个API函数,可以实现该功能。这两个函数分别为:
① FindWindow函数 该函数用于查找与指定的类名和窗口名相匹配的高层窗口,如果查找成功,返回非0值,否则返回0。
② SendMessage函数 此函数向一个或多个窗口发送指定的消息。在此通过发送WM_CLOSE消息来关闭指定的外部应用程序。
⑵ 通过编写标题为“关闭已开启的外部应用程序”组件的OnClick事件,来关闭已开启的外部应用程序。代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
hWndClose: HWnd; file://存储指定的外部应用程序窗口句柄
str: String; file://存储指定的外部应用程序的窗口名
begin
str := InputBox('提示','请输入应用程序名:',''); file://获取要关闭的应用程序窗口名
if str <> '' then begin
file://根据窗口名查找要关闭的窗口句柄
hWndClose := FindWindow(nil, PChar(str));
if hWndClose <> 0 then file://如果查找成功,则发送消息,关闭指定的窗口
SendMessage(hWndClose,WM_CLOSE,0,0);
else file://否则,给出提示信息
ShowMessage('没找到指定的应用程序,所以无法关闭!');
end;
end;