我写了一个多媒体程序可以播放我自己定义的文件格式 .abc,
我的问题是如何实现:双击 .abc文件,自动打开程序播放它,
下面代码,可以实现关联,但如何才能播放它???
下面的代码可以实现.me和Notepad关联,Delphi如何实现文件关联
关联是Windows的一个显著特性。比如安装了office后,后缀是.doc的文
件会和word关联在一起。如果我们想自己创建关联关系,就必须从注册表入手。下
面的代码会把后缀是.me的文件和Notepad关联在一起,请参阅:procedure  TForm1.Button1Click(Sender:  TObject);
var
    lphKey:  HKEY;
    sKeyName:  string;
    sKeyvalue:  string;
begin
    sKeyName  :=  'ReadMeFile';
    sKeyvalue  :=  '说明文档';
    RegCreateKey(HKEY_CLASSES_ROOT,  pchar(sKeyName),  lphKey);
    RegSetvalue(lphKey,  '',  REG_SZ,  pchar(sKeyvalue),  0);
    sKeyName  :=  '.me';
    sKeyvalue  :=  'ReadMeFile';
    RegCreateKey(HKEY_CLASSES_ROOT,  pchar(sKeyName),  lphKey);
    RegSetvalue(lphKey,  '',  REG_SZ,  pchar(sKeyvalue),  0);
    sKeyName  :=  'ReadMeFile';
    sKeyvalue  :=  'c:\Win95\NotePad.exe  %1';  {  注意路径  }
    RegCreateKey(HKEY_CLASSES_ROOT,  pchar(sKeyName),  lphKey);
    RegSetvalue(lphKey,  'shell\open\command',  REG_SZ,
    pchar(sKeyvalue),  MAX_PATH);
end;

解决方案 »

  1.   

    先取出ParamStr(1)值,里面是文件名,然后自己用代码播放该文件
      

  2.   

    BCB的例子~~//---------------------------------------------------------------------------
    // 注册文件关联
    // ExeName: 要检测的扩展名(例如: .txt)
    // AppName: 要关联的应用程序名(例如: C:\StarTask\StarTask.exe)
    // AppKey: ExeName扩展名在注册表中的键值(例如: txtfile)
    // Icon: 扩展名为ExeName的图标文件(例如: C:\StarTask\Task.ico)
    // Describe: 文件类型描述
    void __fastcall RegisterFileRelation(AnsiString ExtName, AnsiString AppName,
    AnsiString AppKey, AnsiString Icon, AnsiString Describe)
    {
    try
    {
    TRegistry *pReg = new TRegistry(); pReg->RootKey = HKEY_CLASSES_ROOT; // 打开主键 // 新建/打开以文件扩展名为名的项,并写入数据
    pReg->OpenKey(ExtName, true);
    pReg->WriteString("", AppKey);
    pReg->CloseKey(); pReg->OpenKey(AppKey, true);
    pReg->WriteString("", Describe);
    pReg->CloseKey(); pReg->OpenKey(AppKey + "\\DefaultIcon", true);
    pReg->WriteString("", Icon);
    pReg->CloseKey(); pReg->OpenKey(AppKey + "\\shell", true);
    pReg->WriteString("", "Open");
    pReg->CloseKey(); pReg->OpenKey(AppKey + "\\shell\\Open\\Command", true);
    pReg->WriteString("", + "\"" + AppName + "\" \"%1\"");
    pReg->CloseKey(); delete pReg;
    }
    catch(...)
    {
    MessageBox(NULL, "注册文件关联时发生错误", "注意", MB_OK|MB_ICONWARNING);
    }
    }
      

  3.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      if ParamStr(1) <> '' then
      begin
        Play(ParamStr(1));
      end;
    end;
      

  4.   

    谢谢大家的回复,
    我按照楼上朋友的方法取ParamStr(1)的值,
    已经可以播放我自定义格式的文件,但又有一个新问题:当文件路径名有空格时不行,
    比如:我想打开一个文件:D:\E bak\123.abc
    其中E和bak之间是空格,
    这时ParamStr(1)得到的值是:D:\E
    而不是完整的D:\E bak\123.abc请教如何解决呢?
      

  5.   

    楼主真不好意思,没有看短消息的习惯,呵呵
    var
      I: Integer;
      strFileName : string;
    begin
      strFileName := '';
      for I := 1 to ParamCount  do strFileName := strFileName + ' ' + ParamStr(I);
      strFileName := Trim(strFileName);
      //用自己的代码打开它Play(strFileName)
    end;