Delphi5でOfficeのバージョンを確認できる方法を模索中です。
Officeのバージョンが365なら機能の制限をかけ、それ以外のバージョンのものは制限なく使えるといったプログラムを作成したいです。
レジストリからバージョン情報を取得できるかと考えていたのですが、Office365の場合のレジストリ値がOffice2016と変わらないことで判別も難しく。
どなたかバージョンを取得できる方法をご教授いただけませんでしょうか。
どうかよろしくお願いします。
Officeのバージョンが365ではなく、365はサブスクを指すものでバージョンとは別物では?
Officeの実行ファイルのバージョン情報を取得するか
フォルダ構成に違いがあるのかは不明です
> Delphi5で
WindowsXPまでは動いた気がしますが、今動きますかね?
vram 様
返信ありがとうございます。
Office365がバージョンではなくサブスクであることを理解しました。
そのうえで、サブスクに加入しているかを判断することはできませんでしょうか。
ワケあって現在WindowsXPで作業しており、XP環境下でDelphi5を使っています。
だいぶ古いものなので今なら当たり前に使えていた関数などが使えず.....(;_;)
だいたい状況はわかりました
AIと実際に調べてみたところ3つほどあるようです
1.レジストリに「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun」があるか調べる
ある場合は 365の可能性が高いようです 100%ではない
2.上記と同様にインストールフォルダにClickToRunがあるようですが見つかりませんでした
ある場合は 365の可能性が高いようです 100%ではない
3.Microsof Office APIを使用する
http://mrxray.on.coocan.jp/Delphi/Others/A_Win32APIHelp02.htm
情報が少なすぎますが、これらで365かの判断が出来るかも知れません
VBS上の
Application.Version
を使ってみるとか?
vram 様、AAAAA 様
日を跨いでの返信すみません。また、確認ありがとうございます。
vram 様が回答されたように再度、レジストリから値を持って来る方法で試したところ365の判別がつきそうです。
以下のコードで試したところ、サブスク加入している場合は365の文字列を拾って来れました(拙いコードで恐縮です)。
const
KEY_WOW64_64KEY=$0100;
KEY_WOW64_32KEY=$0200;
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
sGetData: string;
begin
//Reg := TRegistry.Create;
Reg := TRegistry.Create(KEY_QUERY_VALUE or KEY_WOW64_32KEY);
Reg.Access := KEY_READ or KEY_WOW64_64KEY;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Office\ClickToRun\Configuration', False);
sGetData := Reg.ReadString('ProductReleaseIds');
Reg.CloseKey;
finally
Reg.Free;
end;
showmessage(sGetData);
end;
32bitのプログラムを64bit環境で動かすと、[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node]にリダイレクトしてしまうようでしたが、[KEY_WOW64_64KEY]を使うことでリダイレクトされずにレジストリを参照することができました。
ご回答して下さりありがとうございました!
解決しました
編集 削除