Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-17835
uncle_m16
2002-05-16 20:23
2002.06.06
Раздуплите как в базе создать генератор


3-17808
ABRVALG
2002-05-16 11:30
2002.06.06
FindKey в InterBase...


1-17955
Fareader
2002-05-28 11:36
2002.06.06
Цвета RX Library


1-18008
DenNNis
2002-05-24 12:29
2002.06.06
SaveDialog ???


1-18010
Dino
2002-05-23 15:49
2002.06.06
Как сделать...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский