0

-------------------------------- 2番目の更新プログラム-------------- ----------勝利7のアプリからWindowsエクスプローラを開いたときにだけ仮想フォルダを表示する方法は?

私が試した:これは動作しません

STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, void *) 
{ 
// Get the path and module name. 
WCHAR szModulePathAndName[MAX_PATH]; 
GetModuleFileName(hInstance, szModulePathAndName, ARRAYSIZE(szModulePathAndName)); 

std::ofstream outfile("DllMain.txt"); 
outfile << szModulePathAndName << std::endl; 
outfile.close(); 

if (dwReason == DLL_PROCESS_ATTACH) 
{ 
    g_hInst = hInstance; 
    DisableThreadLibraryCalls(hInstance); 
} 
return TRUE; 
} 

。 txtファイルに印刷される内容は次のとおりです。 00000000000CDEE0 dllを登録すると1回だけ印刷されます。その後、何度も仮想フォルダをブラウズして開いても、DllMainを実行して文字列を再度印刷することはできません。私は、ファイルブラウザダイアログを開くと enter image description here

が、それはこの仮想表示されます。私は次のように、「マイコンピュータ」上の仮想フォルダを作成するために、マイクロソフトのウィンドウズ7.0 SDKのサンプル(ExplorerDataProvider)を使用しています


フォルダ。 Microfostオフィスから「名前を付けて保存」をクリックすると、Windowsファイルエクスプローラのダイアログが表示され、この仮想フォルダが表示されます。 私はC++アプリケーションを作成しました。このアプリケーションは、「エクスポート」をクリックしたときにファイルを保存することもできます。 Windowsのファイルエクスプローラダイアログが開き、ユーザーがディレクトリを選択して保存をクリックすると、ファイルを保存できます。 私の問題は次のとおりです。私はC++プログラムを使ってファイルダイアログを開いたときにしか仮想フォルダを表示できないことを願っています。私のアプリケーションの外にWindowsエクスプローラを開くと、仮想フォルダは見えません。どうすればいい? 仮想フォルダのDLLを登録すると、仮想フォルダは常にそこにあるようです。 私の1つの解決策は、アプリケーションがWindowsファイルエクスプローラを開いているときに仮想フォルダdllを登録して、アプリケーションで閉じるときに登録を解除することですが、ユーザーがWindowsエクスプローラを開いているWindowsファイルエクスプローラがアプリケーションに表示されているときのアプリケーション。

SetVisibleのようなものは見つかりませんでした。IShellFolderにあります。

答えて

1

GetModuleFileName(NULL)によって返されたファイル名がC++プログラム以外の場合は、DLLMainでfalseを返すことができます。

+0

GetModuleFileName(NULL)?この関数には3つのパラメータがあります。 – beasone

+0

明らかに残りの2人はあなたのファイル名を取得するために用意しています。 –

関連する問題