我有用C++編寫的Windows應用程序。 應用程序在隱藏的目錄中生成某些配置文件。 我想給用戶一個選項來從我的應用程序中打開該目錄。 單擊該選項應打開一個Windows資源管理器,如帶輸入目錄位置的對話框。 我花時間搜索類似的api,但最終得到了諸如「DlgDirListComboBoxW」或「GetOpenFileName」或「GetSaveFileName」之類的特定對話框。 我正在尋找一個API來打開普通的Windows資源管理器,如帶有輸入目錄位置的對話框。 如果API屬於CommonDialogs部分,那將非常有用。顯示來自C++應用程序的Windows資源管理器對話框
回答
如何:
HWND hWndOwner = NULL;
ShellExecute(
hWndOwner,
_T("explore"),
_T("c:\\some\\path"),
NULL,
NULL,
SW_SHOWNORMAL);
您可以設置hWndOwner
到主窗口句柄,如果你願意,可以從其他各種選項中進行選擇。
有關更多信息和使用的詳細信息,請查看ShellExecute
上的MSDN頁面。
修復了您的「探索」錯字。我不認爲修復'_T'是不對的,因爲它是你的代碼。但要教給別人,特別是新手,這是一件非常糟糕的事情。 – 2015-01-21 07:20:55
@ Cheersandhth.-Alf這不是一個錯字。正確的關鍵字是'explore'(根據MSDN頁面)。至於'_T'位:我不知道他的程序是MBCS還是UNICODE,而且由於'ShellExecute'有A和W兩種類型,所以我必須使用「便攜」方式。如果您知道通過一種更好的方式傳遞一個可能是MBCS或UNICODE的文字,具體取決於項目配置,請通過任何方式告訴我。 – 2015-01-21 09:03:08
比使用'_T'(付出沉重代價支持WIndows 9x)更好的方法是不使用'_T'。除了1990年代早期的遺留代碼外,您始終可以使用UNICODE。 '_T'支持Windows 9x,並且在2000年推出了Layer for Unicode,即現在已有15年過時的基於宏的宏技術,以支持20年前的時代錯誤。 – 2015-01-21 10:26:33
它顯示了一個類似的對話框:
這是如何使用它的一個例子:
BOOL GetFolder(LPCSTR folderpath,
LPCSTR szCaption,
HWND hOwner /*= NULL*/)
{
BOOL retVal = FALSE;
// The BROWSEINFO struct tells the shell
// how it should display the dialog.
BROWSEINFO bi;
memset(&bi, 0, sizeof(bi));
bi.ulFlags = BIF_USENEWUI;
bi.hwndOwner = hOwner;
bi.lpszTitle = szCaption;
// must call this if using BIF_USENEWUI
::OleInitialize(NULL);
// Show the dialog and get the itemIDList for the
// selected folder.
LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi);
if(pIDL != NULL)
{
// Create a buffer to store the path, then
// get the path.
char buffer[_MAX_PATH] = {'\0'};
if(::SHGetPathFromIDList(pIDL, buffer) != 0)
{
// Set the string value.
folderpath = buffer;
retVal = TRUE;
}
// free the item id list
CoTaskMemFree(pIDL);
}
::OleUninitialize();
return retVal;
}
- 1. 在MFC應用程序中顯示來自不同DLL的對話框資源
- 2. 在Windows中顯示文件的資源管理器屬性對話框
- 3. 如何在RCP應用程序中顯示Windows文件資源管理器?
- 4. Qt應用程序中的Windows資源管理器
- 5. 打開WPF應用程序目錄的Windows資源管理器
- 6. 開發類似於Windows資源管理器的應用程序
- 7. Windows資源管理器集成應用程序
- 8. 從Metro風格應用程序啓動Windows資源管理器
- 9. 在Windows資源管理器之前啓動應用程序
- 10. 如何從SL應用程序打開Windows資源管理器?
- 11. 從Java Swing應用程序拖放到Windows資源管理器
- 12. 自動關閉Windows資源管理器
- 13. 從C控制Windows資源管理器#
- 14. 在Windows資源管理器
- 15. 在Windows資源管理器
- 16. 在Windows資源管理器中顯示Windows搜索結果
- 17. 從Windows資源管理器拖放到實際適用於Windows 7的自定義C#應用程序
- 18. Windows資源管理器排序方法
- 19. 如何管理應用程序資源?
- 20. MFC對話框應用程序的佈局管理器
- 21. 通用Windows應用程序顯示爲對話框頁面
- 22. 顯示Tomcat管理器應用程序?
- 23. 資源管理器不顯示XML
- 24. 突出顯示Windows資源管理器窗口中的文件
- 25. 在eclipse rcp應用程序中沒有顯示項目資源管理器
- 26. 自定義對象資源管理器
- 27. 顯示Android應用程序對話框出來的應用程序
- 28. C#中的Windows資源管理器/ Aero樣式工具提示?
- 29. SpreadsheetGear範圍資源管理器在Windows應用程序中的用法
- 30. 資源管理器在我的應用程序中使用
剛剛火起來的'explorer' instance,u now – 2015-01-21 06:50:49
你可以使用系統調用作爲'system(「explorer c:\\ users」);' – Elvisjames 2015-01-21 07:06:20
是啊...... *請求se *不要使用'system(「explorer c:\\ users」);'。事實上,*請*根本不使用'system'。 – 2015-01-21 09:05:36