Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Shortcuts [D7, Win2k]


NetKnight ©   (2003-02-05 09:37:00) 

Как сделать функцию создания shortcut"ов на десктопе ?


Style   (2003-02-08 23:52:00) [1]

const
CLSID_LINK: TGUID = "{00021401-0000-0000-C000-000000000046}";
CLSID_PST: TGUID = "{0000010B-0000-0000-C000-000000000046}";

implement..

procedure ButtonClick
begin

Dir := GetRegStringValue("Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","Desktop",HKEY_CURRENT_USER);

CreateLinkFile("C:\program.exe",dir + "Програмулька.lnk");

end;

procedure TForm1.CreateLinkFile(Prog,Link: string);
var
NewLink: IShellLInk;
hRes: THandle;
pf: IPersistFile;
begin

NewLink := CreateComObject(CLSID_LINK) as IShellLink;
NewLink.SetPath(pchar(Prog));
NewLink.SetWorkingDirectory(Pchar(ExtractFilePath(Prog)));
NewLink.SetDescription(PChar("Ярлык для " + Prog));
hRes := NewLink.QueryInterface(CLSID_PST, pf);
if Succeeded(hRes) then
pf.Save(PWideChar(WideString(Link)), False);

end;



Gigabyte   (2003-02-08 10:25:00) [2]

Не знаю Пишел ли примерчик,так я его здесь отсавлю.
implementation
Uses ComObj,SHFolder;

const A:Array[0..15] of Integer = (
SHFolder.CSIDL_PERSONAL,{ My Documents }
SHFolder.CSIDL_APPDATA, { Application Data, new for NT4 }
SHFolder.CSIDL_LOCAL_APPDATA, { non roaming, user\Local Settings\Application Data }
SHFolder.CSIDL_INTERNET_CACHE,
SHFolder.CSIDL_COOKIES,
SHFolder.CSIDL_HISTORY,
SHFolder.CSIDL_COMMON_APPDATA, { All Users\Application Data }
SHFolder.CSIDL_WINDOWS, { GetWindowsDirectory() }
SHFolder.CSIDL_SYSTEM, { GetSystemDirectory() }
SHFolder.CSIDL_PROGRAM_FILES, { C:\Program Files }
SHFolder.CSIDL_MYPICTURES, { My Pictures, new for Win2K }
SHFolder.CSIDL_PROGRAM_FILES_COMMON, { C:\Program Files\Common }
SHFolder.CSIDL_COMMON_DOCUMENTS, { All Users\Documents }
SHFolder.CSIDL_FLAG_CREATE, { new for Win2K, or this in to force creation of folder }
SHFolder.CSIDL_COMMON_ADMINTOOLS, { All Users\Start Menu\Programs\Administrative Tools }
SHFolder.CSIDL_ADMINTOOLS); { <user name>\Start Menu\Programs\Administrative Tools }

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var S:PChar;i:integer;
T,F:Cardinal;
begin
T:=0;F:=0;
GetMem(S,Max_Path);
try
For i:=0 to High(A) do
begin
OleCheck(SHFolder.SHGetFolderPath(Self.Handle,A[i],T,F,S));
Listbox1.Items.Add(S);
end;
finally
FreeMem(S,Max_Path);
end;
end;
end.


Gigabyte   (2003-02-07 11:36:00) [3]

Напишу примерчик и пришлю...
"Ждите ответа"


NetKnight   (2003-02-07 11:28:00) [4]

--> Gigabyte ©
Присылай, я понятия не имею как работать с интерфейсами..
В SDK нашёл функцию SHGetDesktopFolder, но дельфи не понимает её, наверное как-то по другому она работает..


Gigabyte   (2003-02-07 11:11:00) [5]

Если не поможет - пришлю пример


Gigabyte   (2003-02-07 11:08:00) [6]

SHGetSpecialFolderLocation(SHGetSpecialFolderPath) одно из двух


NetKnight   (2003-02-07 10:31:00) [7]

--> Gigabyte
Сянькс! То что надо! :)

Ещё вопрос как узнать где находится папка Desktop ? В разных виндах она в разных местах находится.. В WINNT - в юзверевской папке, а в 98 в каталоге Вындовза...
Переменной окружения не нашёл.. :(


Gigabyte   (2003-02-07 10:01:00) [8]

Класс TShellLinks в кладовке, может подойдет


Anatoly Podgoretsky   (2003-02-07 09:57:00) [9]

И что бы правильно.


Внук   (2003-02-07 09:52:00) [10]

И чтоб работало!!!


NetKnight   (2003-02-07 09:37:00) [11]

Эээ.. А поподробнее ? Лучше кусок кода..


Delirium^.Tremens   (2003-02-05 09:41:00) [12]

С помощью интерфейса IShellLink


Наверх

Титульная страница Поиск, карта сайта Написать письмо