Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

GetCurrentDirectory глючит :(   Найти похожие ветки 

 
Fanny   (2005-06-25 21:42) [0]

при старте программы из автозапуска (ярлык в Пуск -> программы -> автозагрузка) всё нормально, а при старте из реестра GetCurrentDirectory возвращает "C:\"
Что за фигня ?


 
Reindeer Moss Eater ©   (2005-06-25 21:56) [1]

GetCurrentDirecory не может возвратить "C:\".
Потому что она возвращает DWORD.


 
Grief ©   (2005-06-25 22:00) [2]

Она не возвращает дворд. Ошибка в том, что она работает правильно, указывая ТЕКУЩУЮ папку. Если тебе нужна папка с приложением - отрежь от ParamSTR(0) конец в виде именя файла.


 
Darkwing ©   (2005-06-25 22:02) [3]

Есть еще вариант запускать эту функцию самой первой строчкой в Form1.OnCreate. Тоже была такая проблема.


 
Reindeer Moss Eater ©   (2005-06-25 22:13) [4]

Она не возвращает дворд.
Неужели?

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
  );


 
Fanny   (2005-06-26 17:24) [5]

поясняю:
- при старте из автозагрузки (с ярлыка) - всё ОК
 (как впрочем и просто запуск в любое время);
- при старте из реестра - GetCurrentDirectory(sizeof(s),s)
 переменная s (: array[0..MAX_PATH] of char) получает
 значение "C:\" (без кавычек).
до зарезу нужен каталог из которого статует программа (там инишка лежит). неужели надо из GetModuleFileName придется выдёргивать (через ж...)? :(


 
Reindeer Moss Eater ©   (2005-06-26 17:29) [6]

тебе же сказали, ExtractFileDir(ParamStr(0))


 
Anatoly Podgoretsky ©   (2005-06-26 17:31) [7]

Fanny   (26.06.05 17:24) [5]
У тебя не настроеный ярлык, установи в нем другую рабочую папку, например C:\ и все будет одинаково.
Папка из которой стартует программа ничего общего с текущей папкой не имеет.


 
Antonn ©   (2005-06-26 17:35) [8]

Anatoly Podgoretsky ©   (26.06.05 17:31) [7]
У тебя не настроеный ярлык, установи в нем другую рабочую папку, например C:\ и все будет одинаково.
Папка из которой стартует программа ничего общего с текущей папкой не имеет.

кстати, давно хотел спросить о подобном. Использую ShellExecute и при запуске, некоторые игры не правильно определяют свой каталог, т.е. ресурсы свои не находят. В какой параметр запуска нужно прописывать каталог запуска?


 
Fanny   (2005-06-26 17:37) [9]

а почему с автозапуском работает ?
из реестра другим методом функция вызывается ?


 
Reindeer Moss Eater ©   (2005-06-26 17:39) [10]

а почему с автозапуском работает ?

Она всегда работает.


 
Reindeer Moss Eater ©   (2005-06-26 17:43) [11]

The GetCurrentDirectory function retrieves the current directory for the current process.

Независимо от того, чем и откуда и кого запустили.


 
Anatoly Podgoretsky ©   (2005-06-26 17:47) [12]

Antonn ©   (26.06.05 17:35) [8]
У тебя неправильная программа, посмотри справку по ShellExecute и все найдется.


 
Antonn ©   (2005-06-26 18:51) [13]

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?


 
Reindeer Moss Eater ©   (2005-06-26 18:56) [14]

При чем здесь свойства ярлыка, если в ShellExecute у тебя передается имя самого exe модуля?
А если у меня 100 разных ярлыков есть на игру?


 
Reindeer Moss Eater ©   (2005-06-26 18:58) [15]

Где присать каталог запуска у ShellExecute?
Заблудился в шести параметрах?


 
Anatoly Podgoretsky ©   (2005-06-26 19:10) [16]

Antonn ©   (26.06.05 18:51) [13]
Сказано же прочитай справку, уже пора.


 
Grief ©   (2005-06-26 22:25) [17]

Касательно возвращения - она записывает в буфер. Не предирайся к словам, Reindeer. При етом именно текущую папку. Откуда вызываешь прогу, такой путь и будет. Кажется. Если человеку нужен путь к ехе - ParamStr(0)!


 
Alexander Panov ©   (2005-06-26 22:38) [18]

Grief ©   (26.06.05 22:25) [17]
Откуда вызываешь прогу, такой путь и будет.


Возвращаться будет текущий каталог, а не путь к программе.

Для демонстрации просто выполни последовательность действий:

1. Запусти cmd.exe.
2. c:
3. cd \
4. Запусти программу, указав полный путь к ней.
5. в программе получи текущий каталог.
6. Текущий каталог будет c:\


 
Grief ©   (2005-06-26 22:51) [19]

Удалено модератором


 
Grief ©   (2005-06-26 22:52) [20]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.06 c
1-1122542872
sunsay
2005-07-28 13:27
2005.08.21
Проблема с видимостью полей объекта


14-1122473064
Андрей Жук
2005-07-27 18:04
2005.08.21
Почитав Софта, я подумал


14-1122486666
Starcom
2005-07-27 21:51
2005.08.21
Почему в Windows 98/Me енто не работает?


14-1122490026
Dimedrol
2005-07-27 22:47
2005.08.21
Bluetooth


14-1122629003
MaksimkaP
2005-07-29 13:23
2005.08.21
Доступ в локальную сеть с двух машин