Главная страница
    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.47 MB
Время: 0.031 c
2-1162308816
doooooo
2006-10-31 18:33
2006.11.19
DWord => 2Word


15-1162274206
syte_ser78
2006-10-31 08:56
2006.11.19
gps приемник


15-1162462262
psa247
2006-11-02 13:11
2006.11.19
Договор купли-продажи программы


2-1162417174
Gyrus
2006-11-02 00:39
2006.11.19
Конвертировать JPEG


11-1138885890
Igi
2006-02-02 16:11
2006.11.19
Не могу поменять Caption у формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский