Форум: "WinAPI";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
Внизчтение данных о ярлыке Найти похожие ветки
← →
_Alex_ (2002-04-03 06:27) [0]Привет Всем
Мучаюсь над решением вопроса - чтение данных о ярлыке т.е. путь,
рабочая папка и т.д. набрел на какой-то FAQ, пример не компилируется.
Помогите разобраться!
{
Can"t use Standard OpenDialog since it really
opens .lnk file and returns the command string,
associated with link.
}
unit SLI_Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, OLE2, ShlObj, ComCtrls, Menus;
type
TForm1 = class(TForm)
Edit0: TEdit;
Button1: TButton;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label7: TLabel;
Edit1: TEdit;
HotKey1: THotKey;
procedure Button1Click(Sender: TObject);
procedure ShowLinkInfo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowLinkInfo;
end;
procedure TForm1.ShowLinkInfo;
Var
Desc : Array[0..MAX_PATH] of Char;
SL : IShellLink;
PF : IPersistFile;
HRES : HRESULT;
FD : TWin32FindData;
begin
CoInitialize(Nil);
HRes := COCreateInstance(CLSID_ShellLink, Nil, CLSCTX_INPROC_SERVER,
IID_IShellLink, SL);
If Succeeded(HRes) Then
Begin
HRes := SL.QueryInterface(IID_IPersistFile, PF);
If Succeeded(HRes) Then
Begin
Edit0.Text := "D:\LINKDEMO.LNK";
PF.Load("D:\LINKDEMO.LNK", STGM_READ);
SL.Resolve(Handle, SLR_ANY_MATCH);
SL.GetPath(Desc, MAX_PATH, FD, SLGP_UNCPRIORITY);
Edit1.Text := StrPas(Desc);
SL.GetDescription(Desc, MAX_PATH);
Edit2.Text := StrPas(Desc);
SL.GetWorkingDirectory(Desc, MAX_PATH);
Edit3.Text := StrPas(Desc);
SL.GetArguments(Desc, MAX_PATH);
Edit4.Text := StrPas(Desc);
PF.Release;
SL.Release;
End;
End;
end;
end.
← →
Suntechnic (2002-04-03 07:30) [1]Попробуй так:
unit SLI_Unit;
{
Can"t use Standard OpenDialog since it really
opens .lnk file and returns the command string,
associated with link.
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ActiveX, ShlObj, ComCtrls, Menus;
const
IID_IPersistFile: TGUID = (
D1:$0000010B; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
type
TForm1 = class(TForm)
Edit0: TEdit;
Button1: TButton;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label7: TLabel;
HotKey1: THotKey;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure ShowLinkInfo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowLinkInfo;
end;
procedure TForm1.ShowLinkInfo;
Var
Desc : Array[0..MAX_PATH] of Char;
SL : IShellLink;
PF : IPersistFile;
HRES : HRESULT;
FD : TWin32FindData;
begin
CoInitialize(Nil);
HRes := COCreateInstance(CLSID_ShellLink, Nil, CLSCTX_INPROC_SERVER,
IID_IShellLinkA, SL);
If Succeeded(HRes) Then
Begin
HRes := SL.QueryInterface(IID_IPersistFile, PF);
If Succeeded(HRes) Then
Begin
Edit0.Text := "D:\LINKDEMO.LNK";
PF.Load("D:\LINKDEMO.LNK", STGM_READ);
SL.Resolve(Handle, SLR_ANY_MATCH);
SL.GetPath(Desc, MAX_PATH, FD, SLGP_UNCPRIORITY);
Edit1.Text := StrPas(Desc);
SL.GetDescription(Desc, MAX_PATH);
Edit2.Text := StrPas(Desc);
SL.GetWorkingDirectory(Desc, MAX_PATH);
Edit3.Text := StrPas(Desc);
SL.GetArguments(Desc, MAX_PATH);
Edit4.Text := StrPas(Desc);
End;
End;
end;
end.
← →
Dimka Maslov (2002-04-03 10:05) [2]Закачай файл http://dims.gpsm.ru/files/downloads/dimpas.zip, там находится класс TShellLink, который и читает и записывает в ярлык. Кроме того, там есть функция OpenShortcut, которая просто вернёт имя файла, на который ссылается ярлык.
← →
_Alex_ (2002-04-03 11:56) [3]Спасибо всем за ответы!
← →
_Alex_ (2002-04-03 11:56) [4]Спасибо за ответы!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c