![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получть из пути с короткими именами путь с длинными именами [D6, XP]
jTommy © (2006-11-02 01:22:00)Казалось бы простейшая задача... Вообщем возможно ли из пути с короткими именами получить путь с длинными именами? Например из "C:\PROGRA~1\THEBAT~1\" получить "C:\Program Files\The Bat\"
jTommy (2006-11-02 15:28:00) [1]
> Джо © (02.11.06 14:27) [10]
> А где stdcall?
Вот, я так и думал, что какая-нибудь мелочь.
Джо (2006-11-02 14:27:00) [2]> Определил функцию в dpr-файле (программа консольная):
> Function GetLongPathName(ShortPathName: PChar; LongPathName:
> PChar; cchBuffer: Integer): Integer; external 'kernel32.dll'
> name 'GetLongPathNameA';
> Не работает...
А где stdcall?
Джо (2006-11-02 14:26:00) [3]> Определил функцию в dpr-файле (программа консольная):
> Function GetLongPathName(ShortPathName: PChar; LongPathName:
> PChar; cchBuffer: Integer): Integer; external 'kernel32.dll'
> name 'GetLongPathNameA';
jTommy (2006-11-02 14:12:00) [4]Определил функцию в dpr-файле (программа консольная):
[code]
Function GetLongPathName(ShortPathName: PChar; LongPathName: PChar; cchBuffer: Integer): Integer; external 'kernel32.dll' name 'GetLongPathNameA';
[/code]
Не работает... Перенес в отдельный модуль:
[code]
interface
Function GetLongPathName(ShortPathName: PChar; LongPathName: PChar; cchBuffer: Integer): Integer; stdcall;
implementation
Function GetLongPathName(ShortPathName: PChar; LongPathName: PChar; cchBuffer: Integer): Integer; external 'kernel32.dll' name 'GetLongPathNameA';
[/code]
Работает... Странно, видимо надо обновить свои знания о дин. библиотеках.
Вариант Германна конечно тоже работает, даже все ясно что там и для чего :)
Вообщем, всем большое спасибо.
Германн (2006-11-02 13:25:00) [5]
> MikePetrichenko © (02.11.06 03:58) [6]
>
> Проще надо быть :)
Да я бы и не против, но в сабже указано Д6, а не Д2006!
MikePetrichenko (2006-11-02 03:58:00) [6]
> {function GetFullPathNameW(lpFileName: PWideChar; nBufferLength:
> DWORD;
> lpBuffer: PWideChar; var lpFilePart: PWideChar): DWORD;
> stdcall;}
> function GetLongFName(FName: String): String;
> var
> Str2: String;
> GetLongPathName: Function (ShortPathName: PChar; LongPathName:
> PChar;
> cchBuffer : Integer): Integer Stdcall;
> Handle : THandle;
> begin
> Result:='';
> GetLongPathName:=nil;
> SetLength(Str2,256);
> Handle:=GetModuleHandle('kernel32.dll');
> if Handle = 0 then exit;
> @GetLongPathName := GetProcAddress(Handle, 'GetLongPathNameA');
>
> if Assigned(GetLongPathName) and (GetLongPathName(PChar(FName),
> PChar(Str2),256) <> 0)
> then Result:=Str2;
> end;
Проще надо быть :)
Германн (2006-11-02 02:50:00) [7]
> MikePetrichenko © (02.11.06 02:18) [3]
>
>
> > Германн © (02.11.06 01:38) [2]
> > Где-то, когда-то, кто-то мне подсказал вариант:
>
> Зачем же так автора пугать?
>
Поясни, плиз! Чем и как я кого--то "испугал"?
Ketmar (2006-11-02 02:20:00) [8]>[3] MikePetrichenko(c) 2-Nov-2006, 02:18
>Зачем же так автора пугать?
а чтобы не думал, что жить легко.
MikePetrichenko (2006-11-02 02:18:00) [9]
> Германн © (02.11.06 01:38) [2]
> Где-то, когда-то, кто-то мне подсказал вариант:
Зачем же так автора пугать?
Германн (2006-11-02 01:38:00) [10]Где-то, когда-то, кто-то мне подсказал вариант:
{function GetFullPathNameW(lpFileName: PWideChar; nBufferLength: DWORD;
lpBuffer: PWideChar; var lpFilePart: PWideChar): DWORD; stdcall;}
function GetLongFName(FName: String): String;
var
Str2: String;
GetLongPathName: Function (ShortPathName: PChar; LongPathName: PChar;
cchBuffer : Integer): Integer Stdcall;
Handle : THandle;
begin
Result:='';
GetLongPathName:=nil;
SetLength(Str2,256);
Handle:=GetModuleHandle('kernel32.dll');
if Handle = 0 then exit;
@GetLongPathName := GetProcAddress(Handle, 'GetLongPathNameA');
if Assigned(GetLongPathName) and (GetLongPathName(PChar(FName),PChar(Str2),256) <> 0)
then Result:=Str2;
end;
Джо (2006-11-02 01:36:00) [11]GetLongPathName, странно, да? ;)