谁能帮我写一个小程序,隐藏调用一个外部播放器!

sglong 2008-12-30 07:40:42
隐藏调用一个外部播放器!
播放器的名字叫mubox.exe
程序的功能比较简单
这个程序运行起来之后,在。20秒之内自动关闭他开启的mubox.exe
然后自己也跟着关闭,就这样,谢谢!
...全文
147 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑白赵 2008-12-31
  • 打赏
  • 举报
回复
忘了还要关闭Desktop
CloseDesktop(FDesktop);
lcgboy 2008-12-31
  • 打赏
  • 举报
回复
楼上正解
黑白赵 2008-12-31
  • 打赏
  • 举报
回复
StartupInfo.wShowWindow := SW_HIDE;
这一句就是让播放器窗口隐藏的,如果隐藏不掉那就用虚拟Desktop吧
也就是把你的mubox.exe运行在另外一个虚拟桌面上,藏在后面那就看不到了


var
StartupInfo :TStartupInfo;
ProcessInfo :TProcessInformation;
sFileName:string;
FirstTickCount: Longint;
FDesktop:HDESK;
begin
FDesktop:=CreateDesktop('MyDesk',nil,nil,0,GENERIC_ALL,nil);

sFileName:='D:\Program Files\Kingsoft\PowerWord Lite\XDict.exe';
FillChar(StartupInfo,SizeOf(TStartupInfo),0);
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.lpDesktop :=PChar('MyDesk');

//StartupInfo.wShowWindow := SW_HIDE;
if CreateProcess(PChar(sFileName), nil, nil, nil, false,
CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
begin
//SwitchDesktop(FDesktop);
FirstTickCount := GetTickCount();
repeat
Application.ProcessMessages;
until GetTickCount() - FirstTickCount >= 20000;

TerminateProcess(ProcessInfo.hProcess,0);
end;
self.Close;
end;
sglong 2008-12-31
  • 打赏
  • 举报
回复
楼上的大哥,真是对不起,你好像没有理解我的意思。
我是指程序调用的mubox.exe隐藏。而不是把程序本身隐藏!播放器隐藏!
黑白赵 2008-12-31
  • 打赏
  • 举报
回复
用GetTickCount延时的特点是占用CPU,程序不挂起,可以用Sleep(20000)来延时20秒,但是程序会挂起

或者用Timer + 全局变量



var
FDesktop:HDESK;
ProcessInfo :TProcessInformation;

....

procedure TForm1.FormShow(Sender: TObject);
var
StartupInfo :TStartupInfo;
sFileName:string;
begin
sFileName:='D:\GreenSofts\Foobar2000\foobar2000.exe';
FillChar(StartupInfo,SizeOf(TStartupInfo),0);
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
FDesktop:=CreateDesktop('MyDesk',nil,nil,0,GENERIC_ALL,nil); //创建虚拟桌面 'MyDesk'
StartupInfo.lpDesktop := PChar('MyDesk');

//创建进程调用外部程序sFileName
if CreateProcess( nil,PChar(sFileName), nil, nil, false,
NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
begin
tmr1.Interval:=20000;
tmr1.Enabled:=True;
end;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
tmr1.Enabled:=False;
TerminateProcess(ProcessInfo.hProcess,0); //结束创建的进程
CloseDesktop(FDesktop); //关闭创建的虚拟桌面
Application.Terminate; //退出主程序
end;
sglong 2008-12-31
  • 打赏
  • 举报
回复
大哥帮帮忙!!CPU点用很高!而且主程序不能在关闭播放器之后自动退出。
关闭虚拟桌面加在那里。给个注泽让菜鸟我学学!
sglong 2008-12-31
  • 打赏
  • 举报
回复
CloseDesktop(FDesktop);放在那里。
还有主程序不能自动退出。
麻烦大哥再帮我改一下。
谢谢!!!
黑白赵 2008-12-30
  • 打赏
  • 举报
回复
var
StartupInfo :TStartupInfo;
ProcessInfo :TProcessInformation;
sFileName:string;
FirstTickCount: Longint;
begin
sFileName:='mubox.exe';
FillChar(StartupInfo,SizeOf(TStartupInfo),0);
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_HIDE;
if CreateProcess(PChar(sFileName), nil, nil, nil, false,
Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
begin
FirstTickCount := GetTickCount();
repeat
Application.ProcessMessages;
until GetTickCount() - FirstTickCount >= 20000;

TerminateProcess(ProcessInfo.hProcess,0);
end;
self.Close;
end;


不用sleep() 延时
oyljerry 2008-12-30
  • 打赏
  • 举报
回复
CreateProcess()创建进程
TerminateProcess()结束进程
黑白赵 2008-12-30
  • 打赏
  • 举报
回复

var
StartupInfo :TStartupInfo;
ProcessInfo :TProcessInformation;
sFileName:string;
FirstTickCount: Longint;
begin
sFileName:='mubox.exe'; //外部程序名,不在同目录下要加路径
FillChar(StartupInfo,SizeOf(TStartupInfo),0);
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_HIDE;
if CreateProcess(PChar(sFileName), nil, nil, nil, false,
Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
begin
sleep(20000); //等待20秒,会另主程序挂起,可以用其它方法避免挂起
TerminateProcess(ProcessInfo.hProcess,0);
self.Close;
end;
end;
黑白赵 2008-12-30
  • 打赏
  • 举报
回复
隐藏调用是指主程序自己隐藏还是播放器隐藏?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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