У меня есть FileOpenDialog, который получает имя выбранной папки, это прекрасно работает, однако, когда я щелкаю правой кнопкой мыши по элементу в папке или другой папке, приложение вылетает и выдает необработанное исключение: модуль не найден. Я бы хотел использовать правую кнопку мыши, чтобы не блокировать ее. Я ищу решение для обработки ввода с помощью правой кнопки мыши, чтобы приложение не зависало.
HWND Hwnd;
std::vector<std::string> openFileDialog(std::vector<COMDLG_FILTERSPEC> filterSpec, bool allowMultiSelect)
{
std::vector<std::string> paths;
IFileOpenDialog *pFileOpen;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
if (SUCCEEDED(hr))
{
if (allowMultiSelect)
{
pFileOpen->SetOptions(FOS_ALLOWMULTISELECT);
}
pFileOpen->SetFileTypes(filterSpec.size(), filterSpec.data());
hr = pFileOpen->Show(Hwnd);
if (SUCCEEDED(hr))
{
IShellItemArray* results;
hr = pFileOpen->GetResults(&results);
pFileOpen->GetResults(&results);
DWORD itemCount = 0;
DWORD iterator = 0;
results->GetCount(&itemCount);
if (SUCCEEDED(hr))
{
for (iterator = 0; iterator < itemCount; iterator++)
{
PWSTR pszFilePath;
IShellItem *pItem;
results->GetItemAt(iterator, &pItem);
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
LPWSTR path = pszFilePath;
std::wstring file = path;
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
paths.push_back(convert.to_bytes(file));
}
pItem->Release();
}
}
}
}
pFileOpen->Release();
if (paths.size() == 0)
paths.push_back("FAILED");
return paths;
}
Задача ещё не решена.
Других решений пока нет …