Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-12-15

Re[7]: либо GetFullPathName тормозит, либо я :)

> Кто тормозит - это понятно. Вопрос, как правильно заметил Шматко,
> интересен тем, почему именно GetFullPathName не работает в данном случае.

Я ещё спрашивал, что она возвращает, и если FALSE, то чему равен
GetLastError()

> Тогда зачем вообще существует GetFullPathName?

Чтобы из "..\FAR\Far.exe" получить "D:\Program Files\Far\Far.exe". Не
важно при этом, есть ли действительно по этому пути far.exe А может быть и
часть самого пути к нему. Правда, не в курсе, как она отнесётся к UNC.
То есть, имея относительный путь, она его преобразует в полный. Так как
относительный путь наверняка будет считаться от текущего каталога (на
текущем томе, если иной не указан явно) твоего приложения, то подозреваю, в
этом и есть проблема. И примерно это имел ввиду Neco, ИМХО

--
С уважением, boroda

Номер выпуска : 5088
Возраст листа : 816 (дней)
Количество подписчиков : 543
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/490162
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   Шматко А.А. 2005-12-15 08:29:31 (#490162)

Re[6]: либо GetFullPathName тормозит, либо я :)

Здравствуйте, Neco.

Wednesday, December 14, 2005, 12:51:54 AM, Вы писали:

N> Ваабще-то в szEXENAME только в 98-й винде лежит путь к файлу. А в
N> ХРюше эту инфу надо нарывать из подключенных модулей - первый модуль
N> кажись и есть исполняемый файл - не помню счас. Там мона и
N> подгруженные библии для особо интересующихся посмотреть...
N> А тормозит здесь явно не функция. 8)

Кто тормозит - это понятно. Вопрос, как правильно заметил Шматко, интересен
тем, почему
именно GetFullPathName не работает в данном случае.

N> Кстати, GetFullPathName предназначена не для получения пути из
N> экзешника, а для получения полного пути из короткого. Сам подумай - у
N> тебя лежат два файла test.exe в папках "c:\folder 1" и "c:\folder 2" -
N> даже человек не сможет вернуть тебе правильный путь от одного лишь
N> имени экзешника - не то что винда! А в GetFullPathName ты сообщаешь
N> ТОЛЬКО имя exe - ни идентификатора процесса, ни хотя бы хэндла...

Тогда зачем вообще существует GetFullPathName?

N> Короче, вот те функция на VB6, а на сях я её засунул куда-то глубоко:

N> Public Function GetFileNameById(ByVal lngProcId As Long)
N> Dim i As Long, hProcess As Long, strBuf As String
N> Dim cb As Long, hModule As Long
N> hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0,
lngProcId)
N> If hProcess <> 0 Then
N> EnumProcessModules hProcess, hModule, 4, cb
N> strBuf = String$(256, vbNullChar)
N> cb = GetModuleFileNameEx(hProcess, hModule, strBuf, 256)
N> If cb > 0 Then
N> GetFileNameById = Left$(strBuf, cb)
N> End If
N> End If
N> Call CloseHandle(hProcess)
N> End Function

N> Куда уж понятнее - на С++ думаю труда не составит перевести.

Пример хорош и раньше я им пользовался, пока не возникла потребность поддержки
Win98.

   2005-12-15 06:02:29 (#490134)