Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо