2016-11-23 13 views
1

Я использую GetOpenFileName, чтобы открыть файлы на C++, можно ли установить начальный каталог на виртуальном месте «Компьютер» с помощью lpstrInitialDir?GetOpenFileName открыт в каталоге по умолчанию «Компьютер»?

Thanks, Lee.

+0

Вы пробовали? Если нет: почему бы и нет? –

+1

В Windows 7, если вы изменили текущий каталог в диалоговом окне открытия или сохранения, а lpstrInitialDir - это то же самое, что и первый lpstrInitialDir, используемый программой при вызове в первый раз диалоговых окон Open или Save, тогда используется последний «текущий каталог» вместо того, что указано в lpstrInitialDir https://msdn.microsoft.com/it-it/library/windows/desktop/ms646839(v=vs.85).aspx –

+0

Я пробовал «Компьютер», который не работает, поскольку он недействительно. – user3725395

ответ

3

Это невозможно с GetOpenFileName, потому что местоположение, которое вы хотите использовать, не является частью файловой системы. Скорее это часть более широкого пространства имен оболочки.

Если вы посмотрите на документацию для GetOpenFileName, вы увидите, что она была заменена (более 10 лет назад на самом деле) в диалогах общих элементов. Эти диалоги позволяют указать начальную папку как элемент оболочки.

1

Если вам нужно поддерживать устаревшие Windows старше Vista, где IFileDialog недоступен, попробуйте указать GUID папки оболочки. Например, GUID - 20D04FE0-3AEA-1069-A2D8-08002B30309D. Вы можете указать это следующим образом:

ofn.lpstrInitialDir = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"; 

Тем не менее, стоит отметить, что этот метод практически обречены на неудачу на Windows 7, а затем, из-за behavioral changes

Итак, вы лучше использовать IFileDialog на Vista и позже.