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

Вниз

Получть из пути с короткими именами путь с длинными именами   Найти похожие ветки 

 
jTommy   (2006-11-02 01:22) [0]

Казалось бы простейшая задача... Вообщем возможно ли из пути с короткими именами получить путь с длинными именами? Например из "C:\PROGRA~1\THEBAT~1\" получить "C:\Program Files\The Bat\"


 
Джо ©   (2006-11-02 01:36) [1]

GetLongPathName, странно, да? ;)


 
Германн ©   (2006-11-02 01:38) [2]

Где-то, когда-то, кто-то мне подсказал вариант:
{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;


 
MikePetrichenko ©   (2006-11-02 02:18) [3]


> Германн ©   (02.11.06 01:38) [2]
> Где-то, когда-то, кто-то мне подсказал вариант:

Зачем же так автора пугать?


 
Ketmar ©   (2006-11-02 02:20) [4]

>[3] MikePetrichenko(c) 2-Nov-2006, 02:18
>Зачем же так автора пугать?
а чтобы не думал, что жить легко.


 
Германн ©   (2006-11-02 02:50) [5]


> MikePetrichenko ©   (02.11.06 02:18) [3]
>
>
> > Германн ©   (02.11.06 01:38) [2]
> > Где-то, когда-то, кто-то мне подсказал вариант:
>
> Зачем же так автора пугать?
>

Поясни, плиз! Чем и как я кого--то "испугал"?


 
MikePetrichenko ©   (2006-11-02 03:58) [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 13:25) [7]


> MikePetrichenko ©   (02.11.06 03:58) [6]
>
> Проще надо быть :)

Да я бы и не против, но в сабже указано Д6, а не Д2006!


 
jTommy   (2006-11-02 14:12) [8]

Определил функцию в 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 14:26) [9]

> Определил функцию в dpr-файле (программа консольная):
> Function GetLongPathName(ShortPathName: PChar; LongPathName:
> PChar; cchBuffer: Integer): Integer; external "kernel32.dll"
> name "GetLongPathNameA";


 
Джо ©   (2006-11-02 14:27) [10]

> Определил функцию в dpr-файле (программа консольная):
> Function GetLongPathName(ShortPathName: PChar; LongPathName:
> PChar; cchBuffer: Integer): Integer; external "kernel32.dll"
> name "GetLongPathNameA";
> Не работает...

А где stdcall?


 
jTommy   (2006-11-02 15:28) [11]


> Джо ©   (02.11.06 14:27) [10]
> А где stdcall?

Вот, я так и думал, что какая-нибудь мелочь.



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

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

Наверх




Память: 0.49 MB
Время: 0.042 c
15-1162366296
ANB
2006-11-01 10:31
2006.11.19
Че это за мясо ?


15-1162547532
Stanislav1
2006-11-03 12:52
2006.11.19
WinAPI программист


15-1162238370
Petr V.Abramov
2006-10-30 22:59
2006.11.19
нЕ или нИ?


15-1162486418
Kolan
2006-11-02 19:53
2006.11.19
Дайте определение полиморфизма


2-1162579625
Батя
2006-11-03 21:47
2006.11.19
Если пользователь с таким логином