自己写了个播放器,要求双击MP3文件后, 只允许打开一个应用程序来播放

jozosoft 2006-12-22 08:44:02
自己写了个播放器,现在有处问题不好解决:
  双击MP3文件后,我要求调用我的程序来放,可以实现。但是,每双击一个文件,系统就打开一个新的播放器,这当然是不允许的。
  1、同一时刻只允许打开一个应用程序我会,但是,当第二个应用程序打开后,如果让它把mp3文件名传递给第一次打开的程序?
  2、(此问题能解决一下更好) 如果让程序支持更多的音乐格式?如:rm之类。
谢谢!
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hai1039 2006-12-22
  • 打赏
  • 举报
回复
我是重载WndProc来截获消息的,如果你用别的办法就不知道了
hai1039 2006-12-22
  • 打赏
  • 举报
回复
可能你没有把播放器的Caption设成"语音播放器 "

需要有 Form1->Caption = g_szPlayerCaption;这样一句,不然找不到窗口
jozosoft 2006-12-22
  • 打赏
  • 举报
回复
用SendMessage 发送出消息后,第一个程序接收不到!
仅首次运行时,ParamStr(1); 才有用.
请一楼兄弟再帮忙
hai1039 2006-12-22
  • 打赏
  • 举报
回复
俺是用BCB的,delphi的改一下,原理是一样的。
hai1039 2006-12-22
  • 打赏
  • 举报
回复
HWND hVoicePlayerMutex; // The Mutex method
DWORD g_nMsgID = 0x3388;
AnsiString g_szCmdFileName = GetFileNameFromCMD();
AnsiString g_szPlayerCaption = "语音播放器 ";

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
hVoicePlayerMutex = CreateMutex(NULL, FALSE, "RunOnlyOneInstanceVoicePlayer");
if(hVoicePlayerMutex == NULL||ERROR_ALREADY_EXISTS == ::GetLastError())
{
SendNewFileMsg(g_szPlayerCaption, g_nMsgID, g_szCmdFileName);
return(0);
}

....
}

void SendNewFileMsg(AnsiString strPlayerName, int nMsgID,
AnsiString strFileName)
{
COPYDATASTRUCT sNewFileName;
HWND hPlayer = NULL;

sNewFileName.dwData = nMsgID;
sNewFileName.cbData = strFileName.Length() + 1;
sNewFileName.lpData = (void *) (strFileName.c_str());

hPlayer = FindWindow(NULL, strPlayerName.c_str());

if(NULL != hPlayer)
{
::SendMessage(hPlayer, WM_COPYDATA, (WPARAM) Application->Handle,
(LPARAM) &sNewFileName);
}
}

//---------------------------------------------------------------------------
AnsiString GetFileNameFromCMD(void)
{
AnsiString szFileName;

if(ParamCount > 0)
{
szFileName = ParamStr(1);
}

return(szFileName);
}


jozosoft 2006-12-22
  • 打赏
  • 举报
回复
Delphi自带的控件/
请一楼的详细说一下第一个问题的方法:如果把文件名传给第一次运行的程序
pikapig620 2006-12-22
  • 打赏
  • 举报
回复
rm似乎只有REALPLAYER支持的
你用啥插件做的啊
hai1039 2006-12-22
  • 打赏
  • 举报
回复
首先创建mutex来保证一个时间只有一个程序打开,如果不能创建,根据程序的title找到前一instance的handle,然后用sendmessage送新mp3文件名,同时把第二个instance关掉。
jozosoft 2006-12-22
  • 打赏
  • 举报
回复
BCB搞不懂.
现在想了个其它办法:
一打开新程序,就让新程序自动把旧程序给关了.
嘿.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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