Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-31713
Ionv
2002-10-01 09:11
2002.10.10
Как максимально быстро очистить Image


4-32066
kerrik
2002-08-22 22:40
2002.10.10
Как управл. другим прилож., посылая ему комбинации сокр. клавиш?


6-31931
EViruS
2002-08-04 16:22
2002.10.10
Скорость передачи


14-31976
Ketmar
2002-09-15 13:32
2002.10.10
американцы - они кто?


3-31620
KIR
2002-09-18 11:03
2002.10.10
Снова о Paradox vs IB




   Наверх