Главная страница
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.011 c
1-31806
Diman-Far
2002-10-02 09:37
2002.10.10
RichEdit select


14-31989
ребенок
2002-09-14 16:02
2002.10.10
Регистрация


14-31949
NetBreaker666
2002-09-14 14:38
2002.10.10
Есть ли здесь кто-нибудь с МтМеха СПбГУ ??? Да, и фидошники ?


14-31995
JohnnyJ
2002-09-17 04:49
2002.10.10
Давно мучает вопрос %))))))))


1-31761
Alexander Vasjuk
2002-10-01 11:32
2002.10.10
WideString - проблемы с кодировкой