質問: ### 前提・実現したいこと C/C++ ( Windows API あり ) で Excel がインストールされているかどうかを調べたい あるソフトがインストールされているかどうかを調べる方法ってありませんか? Excelがインストールされているかどうかを調べる -> true のとき バージョン をチェック -> C++で作成したプログラムからExcel操作... です。 調べてみると 「レジストリを読み込んで書き込まれていればインストールされている」 といった感じのものがあった気がします。 なので、 コマンドプロンプトからレジストリの検索 ( コマンド忘れましたが... ) を一度やってみて、 Excel関係のものをチェックしてみましたが、複数ありどれがどれか... また、レジストリの操作用の関数もちんぷんかんぷん... ( 定数はどれを使えばいいのやら... またキーの階層?もよくわからない... ) 普通のINIファイルとかテキストファイルとかなら復元可能ですが、 レジストリは誤って書き換えてしまうと厄介なので試そうにも... ( バックアップとればいいかもしれませんが、レジストリ関連は初めて使うため、使い慣れてないので。 ) それともレジストリを読み込まずに、インストールされているかどうかをプログラムから調べる 方法ってあるのでしょうか? ソースコードっていうより、 たとえば、(例はわかっていないので適当ですが。) --- 1. まず RegOpenKeyEx関数でレジストリを開く。 第一引数:どれでもいい 第二引数: ファイル名 第三引数: KEY_ALL_ACCESS 第四引数: 戻り値用 HKEY 2. RegQueryValueEx関数で読み込む。 第二引数: "VERSION" ... --- といった具合になるべく細かく説明していただけたら嬉しいです。 ( あまりにも情報が少ないので できませんが、そういう情報さえあればなんとかできると 思います。 ) これは追加 ( オプション。なくてもいいです。 ) ですが、 Excelだけでなく、他のソフトのインストールもチェックする方法も知りたいです。 ( 上記のレジストリの説明の 1の 第三引数を KEY_*** に書き換えるとか。 ) [環境等]: 言語: C/C++ ( Windows API 実装あり ) コンパイラ: g++ 宜しくお願い致します。
回答: ttyp03様の回答されている方法に私も賛成します。 インストールの確認と、その後に操作等の制御まで行うとなると、製品が備えている外部インターフェイスを介してのアクセスが必須となるでしょう。Excel を含む Office 製品は OLE/COM/ActiveX などのインターフェイスを昔から備えていますので、単純に直接つなげてみて判定するのが製品の細かいバージョンにもあまり依存せずに判断できる無難な方法と考えます。 確認のための具体的な方法については、C++ からだと GetActiveObject API で Excel オブジェクトの取得ができるかどうかで判断するのが手です。以下、具体的なコードもあるため参考になるでしょう。 Visual C++ を使用した Office オートメーション