200分送给你,一个很简单的问题:请过目!!!!(200分)

  • 主题发起人 主题发起人 挨题
  • 开始时间 开始时间

挨题

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做个小的点歌台,用超级解霸做播放歌曲
但我不知到怎么更好的控制他

如用exec,每放一首歌,就会启动一个超级解霸进程

有办法可以只运行一个超级解霸吗,当然不能多启动一个进程,就删除一个
老的进程,

还有这个问题:
executefile('winamp.exe','D:/经典歌曲/齐秦/9.mp3','C:/Program Files/Winamp',sw_hide);

这句话正确吗?
有executefile这个函数吗(delphi4。0)
 
没人理我吗?
 
好像没有executefile,有一个shellexecute,先uses shellapi
 
你的问题可以分为两个:
1、执行外部程序:没有executefile方法,在WIN32下推荐使用shellexecute函数,
WIN16下使用winexec。但是在delphi4的demos/doc/filmanex/fmxutils.pas单元
中有一个函数exectefile封装了shellexecute,可以把该单元放入你的程序并直接
引用,或者把下面一段加入程序:
function ExecuteFile(const FileName, Params, DefaultDir: string;
ShowCmd: Integer): THandle;
var
zFileName, zParams, zDir: array[0..79] of Char;
begin
Result := ShellExecute(Application.MainForm.Handle, nil,
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
end;
2、保证外部程序只执行一次,需要调用API函数findwindow
在调用超级解霸时比如按下某个按钮button1:
procedure TForm1.Button1Click(Sender: TObject);
var
Hold: String;
Found: HWND;
begin
Found := FindWindow('解霸的类名',nil); // 查找窗口
if Found<>0 then
// 若找到则激活已运行的程序并结束自身
ShowWindow(Found, SW_RESTORE)
else executefile(‘解霸路径名’,‘音乐文件名’,‘’,
SW_SHOWNORMAL);
end;
 
我会这个题,但不如王安鹏回答的好。
查询一下就有答案。
 
同意王的,不过第二题有其它的办法,你可以去找找
 
看我的,兄弟
要想不在运行超级解霸那就得直接控制他的菜单!!!

procedure TForm1.Button1Click(Sender: TObject);
var
hh,hh1:hwnd;
a:integer;
begin
hh:=FindWindow('SthVCDClass','豪杰超级2000'); ///查找超级解霸
if hh<>0 then
begin
postmessage(hh,WM_COMMAND,40001,0);//40001为打开文件菜单
for a:=0 to 100 do
begin
hh1:=FindWindowEx(FindWindow('#32770','打开影视文件'),0,'Edit',nil);///得到编辑筐
if hh1=0 then
sleep(50) //sleep是防止还没打开对话筐就发送了消息
else
break;
end;
sendMessage(hh1,WM_SETTEXT,0,LongInt(pchar('c:/mtv/4.mpg')));//在对话筐的edit中添加字符
sendMessage(FindWindow('#32770','打开影视文件'),WM_COMMAND,IDOK,0); ///#32770为窗口classname
//sleep(1000);
sendMessage(hh,WM_COMMAND,40003,0);///40003为播放
end
else
showmessage('not find sthsvcd!!');
end;


哈哈哈,摆平了
绝对能用!!!!!
拿分来
 
安鹏的解决不了问题,但是谢谢你的关注
中原问鼎给了我完整的解决方案,尽管思路不同于我!!
 
后退
顶部