スタートメニューのアイコンから自分のディレクトリが見えない – プログラミング – Home

スタートメニューのアイコンから自分のデ...
 
通知
すべてクリア

[解決済] スタートメニューのアイコンから自分のディレクトリが見えない


小浜
 小浜
(@小浜)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

VS2005 VC++ MFC SDI アプリです。

ボタンを押したとき、自分と同じディレクトリにあるファイルを開くコードを書いてい
ます。

void CFushigiView::OnInitialUpdate()
{
_wgetcwd(m_wcCurPath, _MAX_PATH); // 自分のパスを取得
}

void CFushigiView::OnBnClickedBtnSearch()
{
_wchdir(m_wcCurPath); // 自分のパスに戻す
if (FindFirstFile(_T(FUSHIGI.CSV), &wfd) == INVALID_HANDLE_VALUE)
{
MessageBox(_T(見つからないよ));
}
else・・・・(ファイルを開く)
}

このアプリの実行ファイルを右クリック→「スタートメニューにアイコンを追加」で、
アイコンがスタートメニューの左上のグループ(インターネット等があるところ)に作
成されます。
このアイコンから起動すると、自分のディレクトリにあるファイルを見つけることが出
来ません。
実行ファイルまたはそのショートカットから起動すると、ちゃんと見つけます。
OSは Windows XP, Vista どちらも同じです。

右クリック→「スタートメニューにアイコンを追加」で作成されるアイコンは、エクス
プローラで探しても存在しません。どうやら仮想的なファイルのように思えます。
そして自分のディレクトリ情報を持っていないようです。

前期のコードをどのように変えたら、スタートメニューのアイコンからでも正しく動作
するようになるでしょうか?
よろしくお願いいたします。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

「作業ディレクトリ」なんぞが必要になることなど、
めったにありませんね。忘れちゃってもいいでしょう。

取得すべきは
「このアプリが起動されたディレクトリ」でしょう(たぶん)。
これは、直接取れないので、アプリケーションのフルパスを
  ::GetModuleFileName()

で取得して、それを加工したらどうでしょう。
もしかしたら、MFCに似たようなのがあるかもしれませんが。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

そのアプリケーションに必要なファイルであるなら
ショートカットで何処にでもなってしまうようなカレントディレクトリ
(ショートカットでは作業ディレクトリ)を当てにするような作りに
するべきでは無いと思います。

一般的には仲澤さんが書かれているように実行ファイルが格納されている
ディレクトリを取得してそのフォルダパスを元にフルパスでファイルを
読み込むようにするのが普通だと思います。


返信引用
小浜
 小浜
(@小浜)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

仲澤様、PATIO様
ありがとうございました。
出来ました。
::GetModuleFileName()を使うと、スタートメニューのアイコンからでも実行ファイルの
ディレクトリが得られました。
解決です。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

ちなみに、「スタートメニューにアイコンを追加」は、どこかにショートカットを作るよ
うなものではありません。
スタートメニューのあの部分に登録されているアイコンの情報はレジストリにあり、どこ
かにあるショートカットを参照しているだけです。
そのため、登録元になったショートカットのプロパティを変更すると、スタートメニュー
に追加した方も変更されています。

その情報がレジストリのどこに保存されているかは、アイコンを追加する前と後でレジス
トリのダンプを取って比較すればわかりますが、データはバイナリ形式で、そのフォーマ
ットは明らかにされていませんので、プログラムからアイコンを追加したり削除したりす
ることはできません。
また、あのアイコンを操作するような API もありません。
これについては、敢えて明らかにしていないのであると、以下の本に書かれています。
http://www.amazon.co.jp/dp/4756150004/

> そして自分のディレクトリ情報を持っていないようです。

これは違います。
試しに _wgetcwd の結果を表示してみれば、何らかのパスが表示されるはずです。
ただ、それが、アプリケーションが置かれているフォルダと異なるために、そこで
FUSHIGI.CSV を見つけることができないというだけです。
_wgetcwd の結果(作業ディレクトリ)は、常に exe が置かれているフォルダになるわけ
ではなく、どうにでも変わり得るということを知っておいてください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました