Я использую GetOpenFileName
, чтобы открыть файлы на C++, можно ли установить начальный каталог на виртуальном месте «Компьютер» с помощью lpstrInitialDir
?GetOpenFileName открыт в каталоге по умолчанию «Компьютер»?
Thanks, Lee.
Я использую GetOpenFileName
, чтобы открыть файлы на C++, можно ли установить начальный каталог на виртуальном месте «Компьютер» с помощью lpstrInitialDir
?GetOpenFileName открыт в каталоге по умолчанию «Компьютер»?
Thanks, Lee.
Это невозможно с GetOpenFileName
, потому что местоположение, которое вы хотите использовать, не является частью файловой системы. Скорее это часть более широкого пространства имен оболочки.
Если вы посмотрите на документацию для GetOpenFileName
, вы увидите, что она была заменена (более 10 лет назад на самом деле) в диалогах общих элементов. Эти диалоги позволяют указать начальную папку как элемент оболочки.
Если вам нужно поддерживать устаревшие Windows старше Vista, где IFileDialog
недоступен, попробуйте указать GUID папки оболочки. Например, GUID - 20D04FE0-3AEA-1069-A2D8-08002B30309D
. Вы можете указать это следующим образом:
ofn.lpstrInitialDir = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}";
Тем не менее, стоит отметить, что этот метод практически обречены на неудачу на Windows 7, а затем, из-за behavioral changes
Итак, вы лучше использовать IFileDialog
на Vista и позже.
Вы пробовали? Если нет: почему бы и нет? –
В Windows 7, если вы изменили текущий каталог в диалоговом окне открытия или сохранения, а lpstrInitialDir - это то же самое, что и первый lpstrInitialDir, используемый программой при вызове в первый раз диалоговых окон Open или Save, тогда используется последний «текущий каталог» вместо того, что указано в lpstrInitialDir https://msdn.microsoft.com/it-it/library/windows/desktop/ms646839(v=vs.85).aspx –
Я пробовал «Компьютер», который не работает, поскольку он недействительно. – user3725395