Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // opens idlaog
- std::wstring openFileDialog() {
- std::wstring selectedFilePath;
- // Initialize COM library
- HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
- if (FAILED(hr)) {
- return selectedFilePath; // Return empty string if COM initialization fails
- }
- // Initialize COM object
- IFileOpenDialog* pFileOpen;
- hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
- if (FAILED(hr)) {
- CoUninitialize(); // Uninitialize COM before returning
- return selectedFilePath; // Return empty string if object creation fails
- }
- // Configure dialog to allow multiple file selection
- DWORD dwOptions;
- hr = pFileOpen->GetOptions(&dwOptions);
- if (SUCCEEDED(hr)) {
- hr = pFileOpen->SetOptions(dwOptions | FOS_ALLOWMULTISELECT);
- }
- // Show the file dialog
- hr = pFileOpen->Show(NULL);
- if (SUCCEEDED(hr)) {
- // Get the selected files
- IShellItemArray* pItems;
- hr = pFileOpen->GetResults(&pItems);
- if (SUCCEEDED(hr)) {
- DWORD dwNumItems;
- hr = pItems->GetCount(&dwNumItems);
- if (SUCCEEDED(hr)) {
- for (DWORD i = 0; i < dwNumItems; ++i) {
- IShellItem* pItem;
- hr = pItems->GetItemAt(i, &pItem);
- if (SUCCEEDED(hr)) {
- PWSTR pszFilePath;
- hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
- if (SUCCEEDED(hr)) {
- // Use pszFilePath as the selected file path
- selectedFilePath = pszFilePath;
- CoTaskMemFree(pszFilePath);
- }
- pItem->Release();
- }
- }
- }
- pItems->Release();
- }
- }
- pFileOpen->Release();
- // Unload COM
- CoUninitialize();
- return selectedFilePath;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement