このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。
Hi, Developers,
straightapps.com ロゴ
投稿 November 15, 2018、更新 February 17, 2021
トップページ > Windows トップ > フォルダやファイルを開く
line
Windows 開発
line

ここでは、フォルダやファイルを関連付けられたプログラムで開くためのコードについて、書いています。

ユーティリティ系のプログラムだと、 指定されたファイルのフォルダや、指定されたファイルそのものを開きたいことがあります。 指定されたファイルを開く場合は、(拡張子に)関連付けられているプログラムで、簡単に開けます。

また、ブラウザでウェブサイトを開きたい場合や、 指定のファイルが選択された状態で、エクスプローラーでフォルダを開く場合のコードも、書いています。

2021 年 2 月、ページの様式を変更し、2セクションを追加しています。

▼ セクション一覧

エクスプローラーでフォルダを開く
既定のプログラムでファイルを開く
ブラウザでウェブサイトを開く - February 17, 2021
ファイル選択状態でフォルダを開く - February 17, 2021

ご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。

エクスプローラーでフォルダを開く

投稿 November 15, 2018

重複ファイルを検出する DupliFileDetector ユーティリティでは、 重複ファイルの詳細ダイアログで、「フォルダを開く」ボタンを押すと、 そのファイルのあるフォルダを開けます。

次のコードは、strFolder にフォルダ名(フルパスを想定しています)が入っているとして、 そのフォルダを開くコードです。

// strFolder にフルパスを設定します(例です)。
CString strFolder;
strFolder = _T("C:\\data");

ShellExecute(GetSafeHwnd(), _T("open"), strFolder, NULL, strFolder, SW_SHOW);

_T マクロは、 マルチバイト文字セット ( Shift-JIS のような2バイトで1文字を表す文字セットです。 ) Unicode ( ユニコード。日本語に限らない全言語の文字を表せる文字コードセットです。 ) を切り替えるものですが、ここでは(プロジェクトの設定を変更して)マルチバイト文字セットを使用しています。 もし問題が起きるとすれば、このあたりは注意すべきかもしれません。

方法としては、コードの通り、ShellExecute API に、open コマンドとフォルダ名を渡して、それを開いています。 エクスプローラーでファイルを右クリックして、「開く」を選んでいるのと同じ動作となりますが、 指定がフォルダなので、フォルダが開かれている、ということです。

▲ページ先頭へ

既定のプログラムでファイルを開く

投稿 November 15, 2018

重複ファイルを検出する DupliFileDetector ユーティリティでは、 重複ファイルの詳細ダイアログに表示されたファイルをダブルクリックすると、そのファイルを開きます。 開くプログラムは、拡張子に関連付けられているものになります。

// strFolder にパスを、strFile にファイル名を設定します(例です)。
CString strFolder, strFile;
strFolder = _T("C:\\data");
strFile = _T("C:\\data\\readme.txt");

ShellExecute(GetSafeHwnd(), _T("open"), strFile, NULL, strFolder, SW_SHOW);

フォルダを開く場合と比べ、パラメータがファイル名(フルパス)になっている部分が異なるだけです。

エクスプローラーで右クリックから「開く」を選んだ動作と同じになります。 基本的には、ファイルのダブルクリックとも同じ動作になるようです。

.txt ならテキストエディタで、 .jpg や .bmp ならフォトで、 .wmv や .mp4 ならビデオプレーヤーで、 .docx ならワードで、のように、関連付けられたプログラムが使われます。

▲ページ先頭へ

ブラウザでウェブサイトを開く

投稿 February 16, 2021

追記です。 コードが散らばってしまったので、オープン系のコードをこのページにまとめておこうと思います。

ファイルを開く場合と同じと言えば同じですが、 ウェブサイトを開きたい場合のコードです。

ShellExecute(GetSafeHwnd(), _T("open"), _T("https://www.straightapps.com/win/"), NULL, NULL, SW_SHOWNORMAL);

ファイル名に開きたい URL 文字列を渡し、open コマンドで開きます。 作業フォルダは必要ないため、NULL にしています。

ちなみに、ダイアログ内にテキストコントロールを置き、 それをクリック ( この場合は、マウスポインタは手の形には変わりません。 ) した場合にその URL を開きたい場合は、 Notify プロパティを True に設定し、 OnClicked ハンドラーを追加して、上記関数呼び出しを行えば OK です。

▲ページ先頭へ

ファイル選択状態でフォルダを開く

投稿 February 16, 2021

あるファイルに注目して、エクスプローラーでフォルダを開きたいとき、 ファイルを選択した状態でフォルダを開くこともできます。

CString str, strFile;
strFile = _T("C:\\data\\readme.txt");
str.Format(_T("explorer.exe /e, /select, %s"), strFile);
WinExec(str, SW_SHOW);

エクスプローラーは Windows フォルダにあるシステムプログラムで、パスは通っていますから、 このように起動しても問題ありません。

/e オプションは、ウィンドウの左側にフォルダツリーを表示する指定です。 これがなければ、「フォルダを開いた」ような感じになります。

/select オプションは、そのファイルを選択状態とする指定です。

▲ページ先頭へ
line
関連トピックス
line

_sprintf でリンクエラーを回避する

Visual C++ の古いプロジェクトで sprintf 関数を利用していると、 VC++ 2015 以降 ではリンクエラーになってしまいます。 この回避方法について、書いています。

line
その他のおすすめ
line

Windows 操作と開発に関する記事をまとめた Windows 開発トップ もご覧ください。



© 2017-2021 StraightApps.com 無断転載を禁じます。No reproduction without permission.