Описание функции
CreateLink
Создаёт ярлык
CreateLink(Path$, Link$, Argument$, Description$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l)
Параметры
Path$ | Путь к программе, для которой создаётся ярлык (exe-файл) |
Link$ |
Полный путь к ярлыку, который будет создан. |
Argument$ |
Параметры передаваемые exe-файлу при запуске. |
Description$ |
Описание ярлыка, выводится при наведении курсора на ярлык. |
WorkingDirectory$ |
Рабочая папка, если не указана, то обычно папка программы. |
ShowCommand |
Флаг состояния окна запускаемой программы: 1 - #SW_SHOWNORMAL - нормальная, по умолчанию 2 - #SW_SHOWMINIMIZED - свёрнутая 3 - #SW_SHOWMAXIMIZED - развёрнутая на весь экран |
HotKey |
Горячая клавиша. Обычно действует при создании ярлыка, а после перезагрузки не работает. Возможно работает при активном рабочем столе. |
IconFile$ |
Путь к иконке ярлыка (ico, dll). Для путей перечисленных в %Path% путь указывать не обязательно, например "Shell32.dll" |
IconIndexInFile |
Номер иконки по счёту, если это пакетный файл, например для "Shell32.dll", не для "ico", для "ico" это 0. Попробуйте отрицательные значения, чтобы указать номер ресурса иконки, например значок ini-файла "-151" по счёту "69". |
Пример
; Fred
; https://www.purebasic.fr/english/viewtopic.php?p=61476#p61476
EnableExplicit
Procedure CreateLink(PATH$, LINK$, Argument$, DESCRIPTION$, WorkingDirectory$, ShowCommand.l, HotKey.l, IconFile$, IconIndexInFile.l)
Protected result = 0, hres
Protected ShellLink.IShellLinkA
Protected PersistFile.IPersistFile
result = 0
CoInitialize_(0)
If CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @ShellLink.IShellLinkA) = 0
;
ShellLink\SetPath(PATH$)
ShellLink\SetArguments(Argument$)
ShellLink\SetWorkingDirectory(WorkingDirectory$)
ShellLink\SetDescription(DESCRIPTION$)
ShellLink\SetShowCmd(ShowCommand)
; Горячие клавиши:
; Код виртуальной клавиши находится в младшем байте, а флаги-модификаторы — в старшем байте.
; Флаги модификаторов могут представлять собой комбинацию следующих значений:
;
; HOTKEYF_ALT = ALT key
; HOTKEYF_CONTROL = CTRL key
; HOTKEYF_EXT = Extended key
; HOTKEYF_SHIFT = SHIFT key
;
ShellLink\SetHotkey(HotKey)
ShellLink\SetIconLocation(IconFile$, IconIndexInFile)
;-ShellLink_SAVE:
; Запрос IShellLink Для интерфейса IPersistFile Для сохранения ярлыка в постоянном хранилище.
If ShellLink\QueryInterface(?IID_IPersistFile, @PersistFile.IPersistFile) = 0
; Убедитесь, что строка имеет формат Unicode.
; Сохраните ссылку, вызвав IPersistFile::Save.
;hres = ppf->Save(wsz, TRUE);
hres = PersistFile\SAVE(LINK$, #True)
result = 1
PersistFile\Release()
EndIf
ShellLink\Release()
EndIf
CoUninitialize_()
ProcedureReturn result
DataSection
CLSID_ShellLink:
; 00021401-0000-0000-C000-000000000046
Data.l $00021401
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_IShellLink:
; DEFINE_SHLGUID(IID_IShellLinkA, 0x000214EEL, 0, 0);
; C000-000000000046
Data.l $000214EE
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_IPersistFile:
; 0000010b-0000-0000-C000-000000000046
Data.l $0000010b
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection
EndProcedure
Define Path$, PathLnk$
Path$ = "C:\Windows\System32\charmap.exe"
PathLnk$ = GetUserDirectory(#PB_Directory_ProgramData) + "Microsoft\Windows\Start Menu\Programs\Startup\Test_charmap.lnk"
CreateLink(Path$, PathLnk$, "", "", "", #SW_SHOWNORMAL, 0, "Shell32.dll", -151) ; 69
RunProgram(GetPathPart(PathLnk$))