VCでCFileDialogを使用してコモンダイアログを表示しています.
ファイルリストで特定のフォルダを右クリックするとエクスプローラ表示
が出来ますが,これを出来ないようにしたいのです.
右クリックできないようにするなど,何か方法はありませんでしょうか?
また,ファイルリストでディスクトップの表示とCドライブの表示を
させたくないのですが,それはCFileDialogで可能なんでしょうか?
よろしくお願いします.
右クリックしたとき、エクスプローラ表示を消す方法として、
まずコモンダイアログをフック化してください、
//クラス内のコモンダイアログ
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等を使い復旧作業も忘れずにしてください。
ご回答ありがとうございます.
レジストリを編集するんですか・・・怖いですね.
一度やってみます.
ツイート | ![]() |