|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Народ, вопрос: Как определить внутри приложения каталог, из которого это приложение запустили? Приложение на PB, надо в момент выполнения знать, из какого каталога его запустили. Например, лежит приложение в каталоге C:\Progra~1\MyApp\, после запуска надо, чтобы приложение знало, что оно запущено из каталога C:\Progra~1\MyApp\ ... WinAPI-шные функции не предлагать, т.к. они разные для разных виндов, и тогда встанет проблема определения версии виндов и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2003, 16:43 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Определение откуда работает в PFC: n_cst_filesrv lnv_filesrv f_SetFileSrv(lnv_filesrv, TRUE) is_runfromdirectoty = lnv_filesrv.of_GetCurrentDirectory () f_SetFileSrv(lnv_filesrv, FALSE) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2003, 17:08 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Ничего сложного - функция GetLibraryList() возвращает все библиотеки с описанием их путей, по библиотеке, в которой лежит Application и можно определить путь запущенного приложения. Приведу свою реализацию. Функция f_StrToArray - используется для перевода стрингового списка значений с разделителем в массив значений: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
Собственно сама функция f_GetLibraryPath, возвращающая путь к указанной библиотеке: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Пример использования: Код: plaintext
Исходники содраны с source глобальных функций, так что их спокойно можно мигрировать в PB. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2003, 17:08 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Автор: Анатолий Московский (avm@trais.com.ua) Имя каталога определяется так: string ls_AppPath string ls_FullPath, ls_RevPath int li_Pos, li_Pos2 // получение полного имени ClassDefinition lcd n_dummy_obj u If IsNull(u) Then u = Create n_dummy_obj // если не autoinstantiated lcd = u.ClassDefinition ls_Fullpath = lcd.LibraryName // выделение имени каталога ls_RevPath = Reverse(ls_FullPath) li_pos = Pos( ls_RevPath, "\") li_pos2 = Pos(ls_RevPath, "/") If li_pos2 > 0 and li_pos > li_pos2 Then li_Pos = li_Pos2 End If If li_pos > 0 Then ls_AppPath = Left(ls_FullPath, Len(ls_FullPath) - li_pos) Else ls_AppPath = "." End IF return ls_AppPath Вместо "n_dummy_obj" можно подставить любой(почти) класс, который находится в исполняемом модуле. Для того чтобы при компиляции объект поместился в EXE надо в проекте снять галку в поле "DLL/PBD" напротив библиотеки с этим объектом. Хотя если все библиотеки находятся в одном каталоге, можно не заботиться об этом. Есть еще и другой вариант (win32): Описываешь external function: function long GetModuleFileNameA (long module, ref string path, long length) library "kernel32.dll" А потом вызываешь ее: ls_Fullpath = Space (255) li_Ret = GetModuleFileNameA (Handle(GetApplication()), ls_FullPath, 255) Здесь мы имеем полный путь к EXE. Далее разбор пути как показано выше. Хотя мне больше нравится первый вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2003, 18:37 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
А вот откуда вот это бредятное :-) WinAPI-шные функции не предлагать, т.к. они разные для разных виндов взялось? http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getmodulefilename.asp The GetModuleFileName function retrieves the fully qualified path for the specified module. Requirements Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95. Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2003, 00:41 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Полностью потдерживаю Филиппа! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2003, 10:00 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Поставь первым оператором в open event объекта аппликации messagebox("",getcurrentdirectory()) и узнаешь откуда стартовал... Проверено. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2003, 14:28 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
2 Филипп Филипп, из какой библиотеки функция GetModuleFileNameA ? Не из kernel32.dll ли ? И почему это при обращении к функции GetModuleFileNameA в 98-х виндах я получаю ругань? (Сейчас под рукой 98-х нет, проверить и точно сказать, какая ругань, не могу, надо дома проверить, но смысл ругани - не могу загрузить dll или вызвать из нее функцию, точно не помню). В NT, 2K, XP - без проблем. Вот только клиент норовит поставить приложение под те винды, которые у него есть, и сильно не хочет менять на другие... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 10:32 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Анатолий Московский (avm@trais.com.ua) (Выход с логина Sergey Schwarz) ! В какой версии PB появился тип ClassDefinition ? В 6.5 его не обнаружено... Или надо подключать PFC? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 10:43 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
ASCRUS ! В какой версии PB появилась функция GetLibraryList() ? В PB 6.5 такой красивой штуки нет... ИМХО, впервые она появляется только в версии 7.0, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 11:00 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
KOLCHOZ_POSTEVENT! И тот же вопрос к Вам: ф-ция getcurrentdirectory() живет в KERNEL32.DLL? Объявление такое? Function ulong GetCurrentDirectory (ulong nBufferLength, ref string lpBuffer) Library "KERNEL32.DLL" Alias for "GetCurrentDirectoryA" Тогда где же параметры? Или есть билдерная прокладка, делающая подстановку параметров? Или это какая-то билдеровская функция? Тогда в какой версии она появилась? В 6.5 ее нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 11:14 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Это родная Powerbuilder функция из 8 версии. У меня уже нет горячо любимой шестерки. Дайте немножко подумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 11:41 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Значится так,докладываю,что проверено и что отработало. Делается вшивый bat файл c:\katalog.bat с таким содержанием dir >c:\katalog.txt Первой выполняемой командой поставлена run("c:\katalog.bat") Четвертой строкой в c:\katalog.txt искомый маршрут. Kак вы его потянете,последовательным чтением или importfile в datawindow-ваши дела. Должен сказать ,что на восьмерке run иногда капризулит,на шестерке за ним это не водилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 12:45 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
2 Kaban16 А может, если уж в 98-х виндах проблемы, определить окружение (т.е., версию Windows)? GetEnvironment, OSType, OSFixesRevision, OSMajorRevision, OSMinorRevision - вот эти слова должны помочь :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2003, 13:01 |
|
Путь к каталогу, откуда запустили данное приложение, нужен
|
|||
---|---|---|---|
#18+
Kaban16 , декларация приблизительно такая же как вам сообщил Sergey Schwarz ещё 11 августа, работает на ВСЕХ клиентах упомянутых в Майкрософтовской доке: Function ulong GetModuleFileName (ulong hinstModule, ref string lpszPath, ulong cchPath ) Library "KERNEL32.DLL" Alias for "GetModuleFileNameA" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2003, 00:07 |
|
|
start [/forum/topic.php?fid=15&fpage=115&tid=1339545]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 173ms |
0 / 0 |