:: Visual Foxpro, Foxpro for DOS
Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Добрый день!
Понадобилось из программы смотреть в папку Downloads... Напрямую не нашёл как ни в Fso, ни в WSHShell...
Сделал вот так:
WSHShell = CreateObject("WScript.Shell")
lcDirDesktop = WSHShell.SpecialFolders("Desktop")
lcDirDownloads = STRTRAN(lcDirDesktop,"Desktop","Downloads")
IF FILE(lcDirDownloads + "\SaldoUpdate.zip")
=MESSAGEBOX("Есть контакт",64+0+0,"Проверка...")
ELSE
=MESSAGEBOX("Не найден файл SaldoUpdate.zip",64+0+0,"Проверка...")
ENDIF
И вроде нормально работает, но что-то мне не нравится. Нет ли более правильного способа?


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Alsim

Сообщений: 3636
Откуда: Екатеринбург
Дата регистрации: 17.11.2004
У меня на 11ой винде нормально работает.
Разве что файл сохранят в другом месте.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Alsim
У меня на 11ой винде нормально работает.
Не понял, что именно работает?
Тот код, что я привёл, у меня на 10-ке тоже нормально работает, просто странно, что вот так приходится этот путь вычислять...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
Давно не в теме, но порыл интернет, вроде как функция SHGetKnownFolderPath сгодится.
Ratings: 0 negative/1 positive
Re: Как определить путь к папке Загрузки
Alsim

Сообщений: 3636
Откуда: Екатеринбург
Дата регистрации: 17.11.2004
Каратаев
Не понял, что именно работает?
На всякий случай проверил у себя, мало ли.
Код вполне симпатичный, я бы гораздо тяжелее сделал через системные переменные винды.
Что мне НЕ нравится: то что папка загрузки может быть любой у пользователя. От рабочего стола, до совершенно другого места известного только ему.
В хроме, к примеру если начнёшь сохранять в папку "прогулки" на столе, так он туда и будет валить все остальное время
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
danton1973

Сообщений: 143
Откуда: Пермь
Дата регистрации: 10.08.2020
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
такой вариант?
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Alsim
Что мне НЕ нравится: то что папка загрузки может быть любой у пользователя.
В данном случае это не имеет значения: программа на терминальном сервере, там пользователи не имеют прав на изменение системных папок.
po2
функция SHGetKnownFolderPath сгодится
Особо не искал её описание, но так, навскидку погуглил и толком не понял как её использовать. Она же вроде в shell32.dll? Терминальный сервер x64... Но тут надо пробовать...
danton1973
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Если не ошибаюсь, для чтения ключей из реестра надо ещё и класс registry цеплять... Вот не хотелось бы лишнего накручивать...
Так, что скорее всего обойдусь своим примитивным кодом...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
К тому-же, папка Downloads в реестре прописана только ключом, а тот же Desktop - названием. Путь к Desktop из реестра получить легко, но я его и так получаю в своём коде.
А вот к Downloads... Ведь ключи реестра на разных машинах могут быть разные, даже на терминале и разных пользователей... В любом случае тут проблема...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Каратаев
К тому-же, папка Downloads в реестре прописана только ключом
Это нормально, так и должно быть.
docs.microsoft.com
FOLDERID_Downloads имеет GUID {374DE290-123F-4565-9164-39C4925E467B} и он во всех системах будет таковым.
Но лазить через реестр в эту ветку не следует - там прямо так и написано, между прочим

Есть способ проще, надеюсь и на терминалках будет работать.

oShell = CREATEOBJECT("Shell.Application")
? oShell.NameSpace('shellownloads').Self.Path

Правда толку от этого не очень много, т.к. браузеры (даже МС-овские) вольны сохранять загружаемые файлы куда угодно


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Игорь, спасибо, но это не работает. Выдаёт ошибку:
[attachment 35633 err.png]
Пробовал и объект создавать и ему уже задавать .Self.Path Не работает...
А потом, папки Downloads почему-то нет даже в перечне специальных папок... Смотрел примеры на VB.NET и др... Везде эта папка отсутствует...
Вот нет её в списке...
Или я что-то не так делаю...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Igor Korolyov
Правда толку от этого не очень много, т.к. браузеры (даже МС-овские) вольны сохранять загружаемые файлы куда угодно
Функция срабатывает из программы и просто молча загружает в папку Загрузки. Здесь у пользователей нет возможности изменить путь...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Каратаев
Игорь, спасибо, но это не работает. Выдаёт ошибку:
[attachment 35633 err.png]
Работает. Надо просто немного внимательней копировать отсюда в фокс. Должно быть shell:downloads

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
ssa
Работает. Надо просто немного внимательней копировать отсюда в фокс. Должно быть shell:downloads
Точно! Вот я косой! Работает!
Спасибо!


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Каратаев
А потом, папки Downloads почему-то нет даже в перечне специальных папок...
Это список CSIDL - цифровые идентификаторы "известных папок", применявшиеся в WinXP и ранее. Начиная с висты вместо них используются GUID, известные как KNOWNFOLDERID - их во-первых банально больше (и число растёт с каждой новой версией ОС, и даже просто с некоторыми большими обновлениями), а во-вторых эта система позволяет даже сторонним производителям регистрировать свои "известные местоположения", и организовывать их специфическую обработку в "расширениях" проводника - т.е. система гибкая и расширяемая.
В новых версиях АПИ даже не требуется "знать" возможные значения кодов - т.к. есть специальная функция для "перечисления" всех текущих известных системе "специальных папок". Правда это АПИ не доступно скриптовым языкам и фоксу в том числе.

Конкретно папка "загрузки" не имеет старорежимного CSIDL, потому её не получить "старинными" АПИ вызовами.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как определить путь к папке Загрузки
Каратаев
Автор

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
Игорь, спасибо!
Igor Korolyov
Это список CSIDL - цифровые идентификаторы "известных папок", применявшиеся в WinXP и ранее. Начиная с висты вместо них используются GUID, известные как KNOWNFOLDERID
Теперь понятно, почему я не находил эту папку в списке... А заодно, понял и совет po2, который предлагал использовать SHGetKnownFolderPath. Судя по названию - как раз с KNOWNFOLDERID работает...
Ваш код уже применил, отлично работает и на терминале. Ещё раз спасибо!


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 11 (Гостей: 11)

© 2000-2024 Fox Club 
Яндекс.Метрика