delphi,如何编程实现检测电脑上是否装有pdf阅读器?急用,谢谢大家了

解决方案 »

  1.   

    检测是否有程序关联pdf格式的文件即可。
      

  2.   


    能不能帮我找一段代码,或者写一段?对delphi不是很熟,谢谢了
      

  3.   

    var
      h: HKEY;
    begin
      if RegOpenKey(HKEY_CLASSES_ROOT, '.pdf', h) = ERROR_SUCCESS then
      begin
        RegCloseKey(h);
        ShowMessage('装有pdf阅读器')
      end else
        ShowMessage('未装pdf阅读器')
    end;
      

  4.   

    需要引入什么包吧?
    就是uses什么东西?谢谢了
      

  5.   


    这个是检测电脑上有没有.pdf格式的文件吧?我卸载了我的阅读器可是还是显示安装了啊,大神啊,救命啊
      

  6.   

    有个思路:
    1.读取HKEY_CLASSES_ROOT\.pdf下默认项的值,例如:AcroExch.Document.11
    2.读取HKEY_CLASSES_ROOT\AcroExch.Document.11\shell\Open\command下单默认项,例如:"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" "%1";
    3.分离应用程序的路径,判断文件是否存在即可,例如"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"。
    代码,参考上边的写一个,或者哪位高手给写个。
      

  7.   

    为什么不判断 【HKEY_Local_Machine\Software\Adobe\Acrobat Reader】呢?
      

  8.   

    procedure TForm1.buttonClick(Sender: TObject);
    var
         aregistry:TRegistry;
    begin
         aregistry:=TRegistry.Create;
         aregistry.RootKey:=HKEY_LOCAL_MACHINE;
         try
               if  aregistry.OpenKey('SOFTWARE\Adobe\Acrobat Reader',True) then
                     begin
                          ShowMessage('已安装');
                     end else
                          begin
                               ShowMessage('未安装');
                          end;     except
         end;
    end;
      

  9.   

    给个示例,输入扩展名,输出关联命令行,else可自己补齐。
    注: 某些文件格式无法获取。procedure TForm1.Button1Click(Sender: TObject);
    var
      MyRegistry : TRegistry;
      t1 , t2 : string;
    begin
      if Edit1.Text <> '' then //文件扩展名,例如pdf
      begin
        MyRegistry := TRegistry.Create;
        MyRegistry.RootKey := HKEY_CLASSES_ROOT;
        if (MyRegistry.OpenKey('.'+Edit1.Text,False)) then
        begin
          t1 := MyRegistry.ReadString('');
          MyRegistry.CloseKey;
          if t1 <> '' then
          begin
            if (MyRegistry.OpenKey(t1 + '\shell\Open\command',False)) then
            begin
              t2 := MyRegistry.ReadString('');
              Edit2.Text := t2; //关联的命令行
            end;
            MyRegistry.CloseKey;
          end;
        end;
        MyRegistry.Free;
      end;
    end;
      

  10.   

    我安装个小手阅读器也能打开pdf,楼上的办法同样适用吗?
      

  11.   

    我觉得LZ的问题本就是个伪命题。我以前做过一个,点击一条记录,就要打开其对应的PDF文件。
    但是我做了约定(而且用的控件也是Adobe的),如果没装Adobe reader就不能打开。而LZ的问题是为了什么? 判断所有的能打开pdf文件的软件是否安装? 你能告诉我有哪些软件吗?
      

  12.   

    我写了个pdf文档在网络上的某台机器上,软件上有个按钮是打开这个pdf文档,但是如果他机器上没有安装能打开pdf文档的软件就提示他打不开,如果安装了就打开。我觉得jaxdong的办法有道理,这个方法还可以检测.doc,.ppt,.xls等等的问题
      

  13.   

    jaxdong的思路和方法给100分也不为过啊。谢谢大家了,亲一个表示感谢
      

  14.   

    早说啊,其实直接调用ShellExecute就行了!如果返回值是SE_ERR_ASSOCINCOMPLETE或SE_ERR_NOASSOC,就说明没有软件关联pdf!