![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetCurrentDirectory глючит :( [D6, Win95/98]
Fanny © (2005-06-25 21:42:00)при старте программы из автозапуска (ярлык в Пуск -> программы -> автозагрузка) всё нормально, а при старте из реестра GetCurrentDirectory возвращает 'C:\'
Что за фигня ?
Grief (2005-06-26 22:52:00) [1]Удалено модератором
Grief (2005-06-26 22:51:00) [2]Удалено модератором
Alexander Panov (2005-06-26 22:38:00) [3]Grief © (26.06.05 22:25) [17]
Откуда вызываешь прогу, такой путь и будет.
Возвращаться будет текущий каталог, а не путь к программе.
Для демонстрации просто выполни последовательность действий:
1. Запусти cmd.exe.
2. c:
3. cd \
4. Запусти программу, указав полный путь к ней.
5. в программе получи текущий каталог.
6. Текущий каталог будет c:\
Grief (2005-06-26 22:25:00) [4]Касательно возвращения - она записывает в буфер. Не предирайся к словам, Reindeer. При етом именно текущую папку. Откуда вызываешь прогу, такой путь и будет. Кажется. Если человеку нужен путь к ехе - ParamStr(0)!
Anatoly Podgoretsky (2005-06-26 19:10:00) [5]Antonn © (26.06.05 18:51) [13]
Сказано же прочитай справку, уже пора.
Reindeer Moss Eater (2005-06-26 18:58:00) [6]Где присать каталог запуска у ShellExecute?
Заблудился в шести параметрах?
Reindeer Moss Eater (2005-06-26 18:56:00) [7]При чем здесь свойства ярлыка, если в ShellExecute у тебя передается имя самого exe модуля?
А если у меня 100 разных ярлыков есть на игру?
Antonn (2005-06-26 18:51:00) [8]Anatoly Podgoretsky © (26.06.05 17:47) [12]
мне больше кажется, что я неправильно юзаю ShellExecute...
Вот для примера - есть игра (NFSU2, не играли? :)), запускаю так:
ShellExecute(Handle, nil, 'D:\games\Need For Speed Underground 2\speed2.exe', nil, nil, SW_SHOW);
если моя прога лежит в каталоге с игрой - все работает, если программа лежит в другом месте(например C:\xlam\) то игра не запускается. Точнее запускается, но закрывается, в логе пишет не найдены ресурсы.
Такая же ботва с Grand Theft Auto - Vice City, Cold_Zero, Vietcong, FarCry. В ярлыках указывается путь к приложению и каталог запуска. Где присать каталог запуска у ShellExecute?
Anatoly Podgoretsky (2005-06-26 17:47:00) [9]Antonn © (26.06.05 17:35) [8]
У тебя неправильная программа, посмотри справку по ShellExecute и все найдется.
Reindeer Moss Eater (2005-06-26 17:43:00) [10]The GetCurrentDirectory function retrieves the current directory for the current process.
Независимо от того, чем и откуда и кого запустили.
Reindeer Moss Eater (2005-06-26 17:39:00) [11]а почему с автозапуском работает ?
Она всегда работает.
Fanny (2005-06-26 17:37:00) [12]а почему с автозапуском работает ?
из реестра другим методом функция вызывается ?
Antonn (2005-06-26 17:35:00) [13]Anatoly Podgoretsky © (26.06.05 17:31) [7]
У тебя не настроеный ярлык, установи в нем другую рабочую папку, например C:\ и все будет одинаково.
Папка из которой стартует программа ничего общего с текущей папкой не имеет.
кстати, давно хотел спросить о подобном. Использую ShellExecute и при запуске, некоторые игры не правильно определяют свой каталог, т.е. ресурсы свои не находят. В какой параметр запуска нужно прописывать каталог запуска?
Anatoly Podgoretsky (2005-06-26 17:31:00) [14]Fanny (26.06.05 17:24) [5]
У тебя не настроеный ярлык, установи в нем другую рабочую папку, например C:\ и все будет одинаково.
Папка из которой стартует программа ничего общего с текущей папкой не имеет.
Reindeer Moss Eater (2005-06-26 17:29:00) [15]тебе же сказали, ExtractFileDir(ParamStr(0))
Fanny (2005-06-26 17:24:00) [16]поясняю:
- при старте из автозагрузки (с ярлыка) - всё ОК
(как впрочем и просто запуск в любое время);
- при старте из реестра - GetCurrentDirectory(sizeof(s),s)
переменная s (: array[0..MAX_PATH] of char) получает
значение 'C:\' (без кавычек).
до зарезу нужен каталог из которого статует программа (там инишка лежит). неужели надо из GetModuleFileName придется выдёргивать (через ж...)? :(
Reindeer Moss Eater (2005-06-25 22:13:00) [17]Она не возвращает дворд.
Неужели?
The GetCurrentDirectory function retrieves the current directory for the current process.
DWORD GetCurrentDirectory(
DWORD nBufferLength, // size, in characters, of directory buffer
LPTSTR lpBuffer // address of buffer for current directory
);
Darkwing (2005-06-25 22:02:00) [18]Есть еще вариант запускать эту функцию самой первой строчкой в Form1.OnCreate. Тоже была такая проблема.
Grief (2005-06-25 22:00:00) [19]Она не возвращает дворд. Ошибка в том, что она работает правильно, указывая ТЕКУЩУЮ папку. Если тебе нужна папка с приложением - отрежь от ParamSTR(0) конец в виде именя файла.
Reindeer Moss Eater (2005-06-25 21:56:00) [20]GetCurrentDirecory не может возвратить 'C:\'.
Потому что она возвращает DWORD.