3

ファイルダイアログ(開く/保存)を特定のフォルダ(winapi)に制限することは可能ですか?

OPENFILENAME fileDialogSettings;
...
fileDialogSettings.lpstrInitialDir = "Some path";
...
if(GetOpenFileName(&fileDialogSettings))
{
}

ダイアログのルートパスとして「Somepath」を設定し、ナビゲーションをこのフォルダーとそのサブフォルダーのみに制限したいと思います。これにlpfnHookを使用できますか?

4

2 に答える 2

2

Vista +のみを対象としている場合は、このIFileDialogEvents::OnFolderChangingメソッドを使用して変更を完全にブロックできます。

古いバージョンのWindowsの場合、OpenFileDialogを使用すると、CDN_FOLDERCHANGE通知を受け取ることができるフックプロシージャを指定できます。変更を許可しないメッセージは表示されませんが、メッセージを投稿して「戻る」か、「OK」ボタンを無効にするように指示できる場合があります。

もう1つのオプションは、CDN_FILEOK通知を処理し、必要なディレクトリ外のパスを拒否することです。

フック手順の詳細については、 このMSDNの記事を参照してください。この質問では、開いているダイアログでディレクトリを変更する方法についても説明しています。

于 2012-05-10T09:43:13.843 に答える
0

OFN_NOCHANGEDIRドキュメントには次のように書かれていますが、フラグを調べてください。

ユーザーがファイルの検索中にディレクトリを変更した場合、現在のディレクトリを元の値に復元します。

このフラグは、GetOpenFileNameには無効です。

編集:質問をもう一度読んでください。ユーザーがそのディレクトリから上に移動することは望ましくないと思います。GetOpenFileNameでこれが可能かどうかわからない場合は、ディレクトリリストビューを使用して独自のダイアログを作成し、そのように制限する必要があります。 。

于 2012-05-09T16:55:56.527 に答える