現在開いているファイルパスを取得する

[戻る]
めがね 2009/04/28(火) 16:08:11
お世話になります。

現在開いているファイルのファイルパスを取得するにはどうしたらよいでしょうか?

過去ログを参考に

char szPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szPath);

としましたが、デスクトップにあるファイルなのに
マイドキュメントのパスが返ってきてしまいます。

どなたかご教授ください。

環境:VC6.0 Win32dll 非MFC

aetos 2009/04/28(火) 16:17:09
現在実行している exe ファイルのパスですか?
であれば、GetModuleFileName を使います。

例えばメモ帳のようなアプリを作っているとして、取得したいのが notepad.exe のパス
ではなく、開いているテキストファイルのパスだという場合は、そういう API はありま
せんので、自分で覚えておくしかありません。

めがね 2009/04/28(火) 16:23:18
aetos様、ありがとうございました。

説明不足でした。
現在、MicrosoftOffice用のアドインを作成しています。

ファイル(例:Excel)を開いたメッセージを受け取るイベント内で
開いたExcelファイルのパスを取得したいと考えています。

>自分で覚えておくしかありません。
ぐぐったのですが、情報がなかったので、参考サイト等ありましたら
教えて頂けませんか?

宜しくお願いします。

YuO [E-Mail] 2009/04/28(火) 17:52:29
ExcelのApplication::WorkbookOpenイベントでパスを取得したいと言うことでしょうか。
そうであるなら,単純に,引数として渡されたWorkbookのFullNameプロパティで取得する
のではだめなのですか。

めがね 2009/04/28(火) 18:04:01
ありがとうございます。

>ExcelのApplication::WorkbookOpen
上記の関数はVBでしょうか?

http://support.microsoft.com/kb/230689/ja
上記サイトを参考にして、comaddin.exeのソースを修正して作成しようとしています。

ファイルパスの取得は「OnConnection」の中で行う予定です。

YuO [E-Mail] 2009/04/30(木) 17:21:25
> 上記の関数はVBでしょうか?

ExcelがCOMとして提供しているものを単純に使っているだけです。
Excel VBAもCOMに対して操作しますから,Excel VBAと同じと言えば同じです。
関係しそうなのは,このあたりとか。
http://support.microsoft.com/kb/309301/en-us

> ファイルパスの取得は「OnConnection」の中で行う予定です。

OnConnectionの中で行うならば,ApplicationからWorkbooks引っ張ってきて,その中の
WorkbookについてFullNameで取得,でしょうね。

ZCH 2009/05/02(土) 03:43:29
だいぶ前にCOMアドイン関連を弄っていたので下記は違うかもしれませんが、

OnConnection は Excel 起動時に1回だけ呼ばれるため、
OnConnection 内のみのファイル名取得では
・エクセル単体で起動後にファイルを開く
・ファイルを開き直す
などの場合にブックの変更に対応できません。
必要なときに Workbooks から毎回引っ張ってきた方がよいです。

めがね 2009/05/07(木) 13:39:43
ありがとうございます。
返信遅れて申し訳ありません。

Excelのファイルパスを取得方法はYuO様の提示してくださったサイトで
分かったのですが、Excel以外のOffice(word, PowerPoint)のパスを取得するには
どうしたらよいのでしょうか?

何度もすみませんが、宜しくお願い致します。

YuO [E-Mail] 2009/05/07(木) 13:54:13
原則VBAなので,詳しくはWord / PowerPointのVBAのヘルプを見てください。
というか,VBAで試してからC++で実装するのがよいかと。

WordならApplication::DocumentOpenイベントで得られたDocumentオブジェクトの
FullNameプロパティの値,
PowerPointならApplication::PresentationOpenイベントで得られたPresentationオブ
ジェクトのFullNameプロパティの値です。

古いスレッドには追加発言できません。