CFileDialogで右クリックできないようにするには?


あかうた  2005-10-06 03:54:47  No: 59217

VCでCFileDialogを使用してコモンダイアログを表示しています.
ファイルリストで特定のフォルダを右クリックするとエクスプローラ表示
が出来ますが,これを出来ないようにしたいのです.
右クリックできないようにするなど,何か方法はありませんでしょうか?

また,ファイルリストでディスクトップの表示とCドライブの表示を
させたくないのですが,それはCFileDialogで可能なんでしょうか?

よろしくお願いします.


雪花火  2005-10-10 14:07:56  No: 59218

右クリックしたとき、エクスプローラ表示を消す方法として、
まずコモンダイアログをフック化してください、
//クラス内のコモンダイアログ

CFileDialog *dlgFile;
dlgFile = new CFileDialog(TRUE,_T("txt"),_T("*.txt"),OFN_FILEMUSTEXIST, 
                  "テキスト(*.txt)|*.txt|""各ファイル(*.*)|*.*" "|");

dlgFile->m_ofn.lpfnHook=OFNHookProc;

if(dlgFile->DoModal()==IDOK) { 
//
}
delete dlgFile;
///ここまで

#define lpNM   ((LPNMHDR)lParam)

UINT CALLBACK OFNHookProc( HWND hdlg, UINT uiMsg, 
                                WPARAM wParam, LPARAM lParam )

_AFX_THREAD_STATE* pThreadState=AfxGetThreadState();
pThreadState->m_pAlternateWndInit=NULL;
if(uiMsg==WM_INITDIALOG)
{

}
if(uiMsg==WM_NOTIFY)
{
switch(lpNM->code)
{
case CDN_SELCHANGE:
//大体ファイル等を右クリックしたときのメッセージ

break;
}
}

return(1); 
}

次にレジストリ(Regedt32.exe または Regedit.exe)の
HKEY_CLASSES_ROOT\Folder\shell\explore以降を操作しますので
必ずレジストリの書き出して誤動作時の復旧に通常は使います。
復旧操作により他のファイルのデータを消去してしまうので作業直前に書き出しをしてください。必ず自己責任で、
OSが95や98なら、
RegDeleteKey(HKEY_CLASSES_ROOT, "Folder\\shell\\explore");
をWM_INITDIALOG等に追加すればエクスプローラは表示されません。
NT系ときは、
サブキーを持つキーは消去できないのでキーを消した後に実施してください。
また、RegSaveKey及びRegRestoreKey等を使い復旧作業も忘れずにしてください。


あかうた  2005-10-14 19:52:17  No: 59219

ご回答ありがとうございます.
レジストリを編集するんですか・・・怖いですね.
一度やってみます.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加