问题:
1.请问如何判断用户系统里有没有装REALPLAY软件!如果没有安装,能弹出窗口要求用户安装!请问如何实现!
2.本程序里带有RM视频影像,在没有装REALPLAY运行就会出错!有什么办法解决吗?类似的功能!
uses shellapi;
if 没安装REALPLAY then
ShellExecute(Handle, 'Open', 'E:\rp8-cn-setup.exe', Nil, Nil, SW_HIDE);
end;

解决方案 »

  1.   

    试着查一下realplayer在注册表中的注册位置。
      

  2.   

    请说详细点好吗?我是希望客户在任意WINDOWS操作系统下都能判断;)
      

  3.   

    c:\C:\Program Files\Real\RealPlayer
      

  4.   

    查找注册表HKEY_CLASSES_ROOT\CLSID\{A06B0DBC-8272-4D72-A366-B8090BBE1871}\InProcServer32
    如果有. 说明安装了 RealPlay 组件而
    HKEY_CLASSES_ROOT\Applications\RealPlay.exe\shell\open\command
    说明注安装了 RealPlay .
    它有一个默认的键值: 
    d:\Real\RealPlayer\RealPlay.exe /m audio/x-pn-realaudio %1  //安装路径和可执行文件
      

  5.   

    只要在程序里加入
    uses RealAudioObjects_TLB;
    在没有装REALPLAY软件的机子里程序就运行不了! 
    连程序都运行不了,怎么判断?
      

  6.   

    其实可以通过查找媒体解码器来进行判断,看一下msdn上关于媒体解码器的部分上面有相关的内容:)
      

  7.   

    cmain83(龙行天下2008) 的方法不错的注册表是最简单的方法。
      

  8.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Registry, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function StrToReg(const RegName: String): DWORD; 
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}const
      //根主键字符串
      RootKeyList: array[0..6] of string=('HKEY_CLASSES_ROOT',
                                          'HKEY_CURRENT_USER',
                                          'HKEY_LOCAL_MACHINE',
                                          'HKEY_USERS',
                                          'HKEY_PERFORMANCE_DATA',
                                          'HKEY_CURRENT_CONFIG',
                                          'HKEY_DYN_DATA');{ TForm1 }function TForm1.StrToReg(const RegName: String): DWORD;
    var
      i: Integer;
    begin
      Result := $80000000;
      for i := Low(RootKeyList) to High(RootKeyList) do
          if UpperCase(RegName) = RootKeyList[i] then
          begin
             Result := $80000000 + DWORD(i);
             break;
          end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      Reg: TRegistry;
      DataInfo: TRegDataInfo;
    begin
      Reg := TRegistry.Create;
      Reg.RootKey := StrToReg('HKEY_CLASSES_ROOT'); //指定根主键
      //打开指定的主键,  False : 如果要打开的主键不存在时, 不创建它.
      //而用 True 则创建它.
      if NOT Reg.OpenKey('Applications\RealPlay.exe\shell\open\command', False) then
      begin
         Showmessage('没有安装 RealPlay');
         Reg.CloseKey;              //关闭注册表
         Reg.Free;
         Exit;
      end;  //取指定键值的数信息
      Reg.GetDataInfo('', DataInfo);        //查找默认键值.  if (DataInfo.RegData = rdString) or (DataInfo.RegData = rdExpandString) then//字符串类型
      begin                       //读取字符串数据
         //Reg.ReadString('') 为读取字符串数
         //参数为要读取的键值 ''表示读取默认键值
         Showmessage(Format('RealPaly 的安装位置和可执行文件及参数列表: %s', [Reg.ReadString('')]))
      end
      else begin
         Showmessage('没有安装 RealPlay');
         Reg.CloseKey;              //关闭注册表
         Reg.Free;
         Exit;
      end;  Reg.CloseKey;              //关闭注册表
      Reg.Free;
    end;
      

  9.   

    刚才进行了测试, 采用组件测试法精确一些function IsSetupRealPlay: Boolean;
    var
      Reg: TRegistry;
    begin
      Result := False;
      Reg := TRegistry.Create;
      Reg.RootKey := StrToReg('HKEY_CLASSES_ROOT'); //指定根主键
      //打开指定的主键,  False : 如果要打开的主键不存在时, 不创建它.
      //而用 True 则创建它.
      //RealPlay 组件
      if Reg.OpenKey('CLSID\{A06B0DBC-8272-4D72-A366-B8090BBE1871}', False) then
         Result := True;  Reg.CloseKey;              //关闭注册表
      Reg.Free;
    end;
      

  10.   

    刚才进行了测试.
    采用组件法可靠一些.
    方法如下:function IsSetupRealPlay: Boolean;
    var
      Reg: TRegistry;
    begin
      Result := False;
      Reg := TRegistry.Create;
      Reg.RootKey := StrToReg('HKEY_CLASSES_ROOT'); //指定根主键
      //打开指定的主键,  False : 如果要打开的主键不存在时, 不创建它.
      //而用 True 则创建它.
      //查找是否安装了 RealPlay 的 COM 组件
      if Reg.OpenKey('CLSID\{A06B0DBC-8272-4D72-A366-B8090BBE1871}', False) then
         Reslut := True;
      Reg.CloseKey;              //关闭注册表
      Reg.Free;
    end;