有没有比较好的办法检测用户是否安装了Office软件(50分)

  • 主题发起人 主题发起人 lcdjj
  • 开始时间 开始时间
L

lcdjj

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序要调用Word 我想在调用前先检测一下
我用的是下面的办法
try
CreatObject(..word.)
word..
except
showmessage('你没有安装word')
end;
倒是可以用 不过我想要更好的办法
 
var v: Variant;
begin
try
v := GetActiveOleObject('Word.Basic'); //判断是否Wod已启动
 
except
showmessage(' no office word ');
end;
 
能不能检查注册表来做呢?
 
这个不是挺好的嘛
 
我写的获取Office路径的函数,空就是没有安装。
代码:
function GetAcrobatPath(var AcrobatPath: string): Boolean;
var
  key: hkey;
  AcrobatStatus: Integer;
  ExeFilePathPath: array[0..100] of char;
  valuebuffersize, valuedatasize: dWord;
  ValueData: array[0..100] of char;
  fg: Boolean;
  Index: Integer;
  IndexTop: Integer;
begin
  fg := False;
  Result := False;
  AcrobatPath := '';
  IndexTop := 0;
  AcrobatStatus := 0;

  while (IndexTop < 2) and (fg = False) do
  begin
    case IndexTop of
      0: AcrobatStatus := RegOpenKey(HKEY_CURRENT_USER, 'Software/Adobe/Adobe Acrobat/6.0/InstallPath', KEY);
      1: AcrobatStatus := RegOpenKey(HKEY_CURRENT_USER, 'Software/Adobe/Adobe Acrobat/5.0/InstallPath', KEY);
    end;

    if AcrobatStatus = 0 then
    begin
      Index := 0;
      ExeFilePathPath[0] := #0;

      while (Index < 2) do
      begin
        valuebuffersize := 100;
        valuedatasize := 100;

        if (RegEnumValue(key, Index, @ExeFilePathPath, valuebuffersize, nil, nil, @ValueData, @valuedatasize) = 0) then
        begin
          AcrobatPath := strpas(valueData);

          if (AcrobatPath[length(AcrobatPath)] <> '/') then
             AcrobatPath := AcrobatPath + '/';

          if FileExists(AcrobatPath + 'Acrobat.exe') then
          begin
            fg := True;
            Result := True;
            Exit;
          end
          else
          begin
            Index := Index + 1;
          end;
        end;
      end;

      RegCloseKey(KEY);
      IndexTop := IndexTop + 1;

      if fg = True then
      begin
        Result := True;
        Exit;
      end;
    end
    else
    begin
      IndexTop := IndexTop + 1;
    end;
  end;
end;
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
911
DelphiTeacher的专栏
D
后退
顶部