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

Вниз

Как прочитать путь к файлу из *.lnk (ярлыка)   Найти похожие ветки 

 
vulsims   (2002-08-25 12:17) [0]

Я читаю простым образом открываю файл *.lnk и по байтам извлекаю
путь. Все было бы хорошо если бы структура файла была все время
одинаковой, так нет Форточки пишут ярлыки как хотят.

Вот сам вопрос, как продвинуто прочитать ярлык, Винда его читает
как то?


 
Song ©   (2002-08-25 16:54) [1]

См. методы класса iShellLink


 
Mike_Z   (2002-08-27 10:20) [2]

Не будем так лаконичны ;-)))
В Uses добавь, по моему, ShlObj, ComObj, ActiveX.


Procedure CreateLink(Const LinkFile: String; Const IcoIndex: Integer; Const ShowCmd: DWORD;
Const Path, Params, WorkDir, Description, IconPath: String);
Var
IObject : IUnknown;
SLink : IShellLink;
PFile : IPersistFile;
Begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject As IShellLink;
PFile := IObject As IPersistFile;
With SLink Do
Begin
SetArguments(PChar(Params));
SetDescription(PChar(Description));
SetPath(PChar(Path));
SetIconLocation(PChar(IconPath), IcoIndex);
SetShowCmd(ShowCmd);
SetWorkingDirectory(PChar(WorkDir));
End;
PFile.Save(PWChar(WideString(LinkFile)), False);
End;

Function GetLinkParams(LinkFile: String; Var IcoIndex: Integer; Var ShowCmd: DWORD;
Var Path, Params, WorkDir, Description, IconPath: String): Boolean;
Var
WideFile : WideString;
Buf : Array[1..1024] Of Char;
I : Integer;
fd : TWin32FindData;

DefObject : IUnknown;
DefSLink : IShellLink;
DefPFile : IPersistFile;
Begin
Result := False;
DefObject := CreateComObject(CLSID_ShellLink);
DefSLink := DefObject As IShellLink;
DefPFile := DefObject As IPersistFile;
WideFile := LinkFile;
If DefPFile.Load(PWChar(WideFile), 0) = S_OK Then
With DefSLink Do
Begin
If GetDescription(@Buf, SizeOf(Buf)) = NOERROR Then
Description := Copy(Buf, 1, lstrlen(@Buf)) Else Description := "";
If GetArguments(@Buf, SizeOf(Buf)) = NOERROR Then
Params := Copy(Buf, 1, lstrlen(@Buf)) Else Params := "";
If GetPath(@Buf, SizeOf(Buf), fd, 0) = NOERROR Then
Path := Copy(Buf, 1, lstrlen(@Buf)) Else Path := "";
If GetWorkingDirectory(@Buf, SizeOf(Buf)) = NOERROR Then
WorkDir := Copy(Buf, 1, lstrlen(@Buf)) Else WorkDir := "";
If GetIconLocation(@Buf, SizeOf(Buf), I) = NOERROR Then
Begin
IconPath := Copy(Buf, 1, lstrlen(@Buf));
IcoIndex := I;
End Else Begin IconPath := "";
IcoIndex := 0;
End;
If GetShowCmd(I) = NOERROR Then
ShowCmd := I Else ShowCmd := SW_SHOW;
Result := True;
End;
End;


 
Dimka Maslov ©   (2002-08-27 14:17) [3]

http://delphibase.endimus.com/?action=viewtopic&topic=filelink



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
1-31770
Link
2002-10-01 18:41
2002.10.10
Нормальный вид числа


1-31740
Chlavik
2002-09-27 20:12
2002.10.10
Броблемы с сохранением масива.......


4-32056
Delphi 5.01
2002-08-21 13:31
2002.10.10
Ukazat sisteme chto bil izmenenon shrift


4-32102
fester
2002-08-28 01:36
2002.10.10
CaptionBar


14-31960
Ассемблерист
2002-09-15 05:25
2002.10.10
IRQ