|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1269 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
Отправлено: 16:09, 04-04-2018 |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 14:45, 09-02-2020 | #541 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать не работает он на 10-ке
Скрытый текст
[Setup] AppName=ICONKA AppVerName=ICONKA DefaultDirName=C:\ICONKA OutputDir=userdocs:..\Desktop [*Code] function PinToTaskbar(const FileName: String; IsPin: Boolean): Boolean; var ShellApp: Variant; Verb: String; begin Result:=False; if not FileExists(FileName) then Exit; try if IsPin then Verb:='taskbarpin' else Verb:='taskbarunpin'; ShellApp:=CreateOleObject('Shell.Application'); ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName)).InvokeVerb(Verb); Result:=True; except ShowExceptionMessage; end end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssPostInstall then begin PinToTaskbar(ExpandConstant('{app}\ICONKA.exe'), True); end end; [Files] Source: "ICONKA.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs любой "ICONKA.exe" файл рядом положыте, на семерке без проблем а на десятке не робить зато процедура "CurUninstallStepChanged" прекрасно работает даже на десятке а это крепит ярлик в меню пуск и оно работает нормально что на 7-ке что на 10-ке Скрытый текст
[Setup] AppName=ICONKA AppVerName=ICONKA DefaultDirName=C:\ICONKA OutputDir=userdocs:..\Desktop [*Code] function PinToStartMenu(const FileName: string; const IsPin: Boolean): Boolean; var ShellApp, FolderItem: Variant; Verb, LnkName: string; begin Result:=False; if not FileExists(FileName) then Exit; try ShellApp:=CreateOleObject('Shell.Application'); FolderItem:=ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName)); if GetWindowsVersion < $06020000 then begin if IsPin then Verb:='startpin' else Verb:='startunpin'; FolderItem.InvokeVerb(Verb); Result:=True; end else begin if not FolderItem.IsLink then begin LnkName:=FolderItem.ExtendedProperty('FileDescription'); if LnkName='' then LnkName:=ExtractFileName(FileName); LnkName:=ExpandConstant('{commonprograms}\') + ChangeFileExt(LnkName, '.lnk'); if IsPin then Result:=not FileExists(LnkName) and FileExists(CreateShellLink(LnkName, '', FileName, '', '', '', 0, SW_SHOWNORMAL)) else Result:=DeleteFile(LnkName); end else begin LnkName:=ExpandConstant('{commonprograms}\') + ExtractFileName(FolderItem.Path); if IsPin then Result:=not FileExists(LnkName) and FileCopy(FolderItem.Path, LnkName, False) else Result:=DeleteFile(LnkName); end end; except ShowExceptionMessage; end end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssPostInstall then begin PinToStartMenu(ExpandConstant('{app}\ICONKA.exe'), True); end end; [Files] Source: "ICONKA.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs |
Последний раз редактировалось Beavimo, 09-02-2020 в 15:29. Отправлено: 14:55, 09-02-2020 | #542 |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата Beavimo:
[CustomMessages] CreateStartLaunchIcon=Добавить значок My Program в Меню пуск [Tasks] Name: startlaunchicon; Description: {cm:CreateStartLaunchIcon}; GroupDescription: {cm:AdditionalIcons} [Files] Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion [UninstallDelete] Name: {commonprograms}\My Program1; Type: filesandordirs; Tasks: startlaunchicon [Icons] Name: {commonprograms}\MyProgram1; Filename: {app}\MyProg.exe; Tasks: startlaunchicon |
|
------- Отправлено: 16:49, 09-02-2020 | #543 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Nordek, мне нужно прикрепить значок на панель задач в Windows 10, я не могу понять как оно работает Process Monitor не помогает. ПАНЕЛЬ ЗАДАЧ...
Скрытый текст
[Setup] AppName=Taskbar1 AppVerName=Taskbar2 DefaultDirName=C:\Taskbar OutputDir=userdocs:..\Desktop [*Code] function PinToTaskbar(const FileName: String; IsPin: Boolean): Boolean; var ShellApp: Variant; Verb: String; begin Result:=False; if not FileExists(FileName) then Exit; try if IsPin then Verb:='taskbarpin' else Verb:='taskbarunpin'; ShellApp:=CreateOleObject('Shell.Application'); ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName)).InvokeVerb(Verb); Result:=True; except ShowExceptionMessage; end end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssPostInstall then PinToTaskbar(ExpandConstant('{app}\Taskbar.exe'), True); end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep=usUninstall then PinToTaskbar(ExpandConstant('{app}\Taskbar.exe'), False); end; [Files] Source: "Taskbar.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs на 7-ке работает как надо, а на 10-ке тока открепить может если я вручную прикреплю иконку к панели задач то при диинсталляции она удалится.... а прикрепить ее окромя ручками у меня не выходит может я просто туплю уже 3-ю сутку не сплю |
Отправлено: 18:07, 09-02-2020 | #544 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата Beavimo:
PinToTaskbar
const CLSID_TaskbandPin = '{90AA3A4E-1CBA-4233-B8BB-535773D48449}'; IID_IPinnedList2 = '{BBD20037-BC0E-42F1-913F-E2936BB0EA0C}'; IID_IPinnedList3 = '{0DD79AE2-D156-45D4-9EEB-3B549769E940}'; CLSCTX_INPROC_SERVER = 1; PLMC_EXPLORER = 4; S_OK = 0; type PItemIDList = LongWord; IPinnedList2 = interface(IUnknown) '{BBD20037-BC0E-42F1-913F-E2936BB0EA0C}' procedure EnumObjects; // dummy function Modify(unpin, pin: PItemIDList): HRESULT; procedure GetChangeCount; // dummy procedure GetPinnableInfo; // dummy procedure IsPinnable; // dummy procedure Resolve; // dummy function IsPinned(pidl: PItemIDList): HRESULT; procedure GetPinnedItem; // dummy procedure GetPinnedItemForAppID; // dummy procedure ItemChangeNotify; // dummy procedure UpdateForRemovedItemsAsNecessary; // dummy end; IPinnedList3 = interface(IUnknown) '{0DD79AE2-D156-45D4-9EEB-3B549769E940}' procedure EnumObjects; // dummy procedure GetPinnableInfo; // dummy procedure IsPinnable; // dummy procedure Resolve; // dummy procedure LegacyModify; // dummy procedure GetChangeCount; // dummy function IsPinned(pidl: PItemIDList): HRESULT; procedure GetPinnedItem; // dummy procedure GetAppIDForPinnedItem; // dummy procedure ItemChangeNotify; // dummy procedure UpdateForRemovedItemsAsNecessary; // dummy procedure PinShellLink; // dummy procedure GetPinnedItemForAppID; // dummy function Modify(unpin, pin: PItemIDList; ModifyCaller: LongWord): HRESULT; end; function CoCreateInstance(rclsid: TCLSID; pUnkOuter: LongWord; dwClsContext: DWORD; riid: TIID; out ppv: IUnknown): HRESULT; external 'CoCreateInstance@ole32.dll stdcall'; function ILCreateFromPath(const pszPath: string): PItemIDList; external 'ILCreateFromPathW@shell32.dll stdcall'; procedure ILFree(pidl: PItemIDList); external 'ILFree@shell32.dll stdcall'; function PinToTaskbar(const AFilename: string; AIsPin: Boolean): Boolean; // AFilename : full path to executable file // AIsPin....: False - unpin from TaskBar, True - pin to TaskBar var LPIDL: PItemIDList; LUnk: IUnknown; LPinnedList2: IPinnedList2; LPinnedList3: IPinnedList3; LShellApp: Variant; LVerb: string; begin Result := False; if FileExists(AFilename) and (GetWindowsVersion > $06010000) then try LPIDL := ILCreateFromPath(AFilename); try { Windows 10 (build 1809) and above. } OleCheck(CoCreateInstance(StringToGUID(CLSID_TaskbandPin), 0, CLSCTX_INPROC_SERVER, StringToGUID(IID_IPinnedList3), LUnk)); LPinnedList3 := LUnk as IPinnedList3; except try { Windows 7, 8, 8.1 if IPinnedList2 supported. } OleCheck(CoCreateInstance(StringToGUID(CLSID_TaskbandPin), 0, CLSCTX_INPROC_SERVER, StringToGUID(IID_IPinnedList2), LUnk)); LPinnedList2 := LUnk as IPinnedList2; except { Below Windows 10 (build 1809) fallback. } LShellApp := CreateOleObject('Shell.Application'); end; end; if AIsPin then // pin begin if LPinnedList3 <> nil then begin Result := LPinnedList3.IsPinned(LPIDL) <> S_OK; if Result then OleCheck(LPinnedList3.Modify(0, LPIDL, PLMC_EXPLORER)); end else if LPinnedList2 <> nil then begin Result := LPinnedList2.IsPinned(LPIDL) <> S_OK; if Result then OleCheck(LPinnedList2.Modify(0, LPIDL)); end else LVerb := 'taskbarpin'; end else // unpin begin if LPinnedList3 <> nil then begin Result := LPinnedList3.IsPinned(LPIDL) = S_OK; if Result then OleCheck(LPinnedList3.Modify(LPIDL, 0, PLMC_EXPLORER)); end else if LPinnedList2 <> nil then begin Result := LPinnedList2.IsPinned(LPIDL) = S_OK; if Result then OleCheck(LPinnedList2.Modify(LPIDL, 0)); end else LVerb := 'taskbarunpin'; end; if LVerb <> '' then LShellApp.Windows.Item.Document.Application .NameSpace(ExtractFileDir(AFilename)) .ParseName(ExtractFileName(AFilename)).InvokeVerb(LVerb); except Result := False; ShowExceptionMessage; finally ILFree(LPIDL); end; end; PinToStartMenu
function PinToStartMenu(const AFilename: string; AIsPin: Boolean): Boolean; // AFilename : full path to exe- or lnk-file // AIsPin : False - unpin from StartMenu, True - pin to StartMenu var LShellApp, LFolderItem: Variant; LVerb, LnkName: string; begin Result := False; if not FileExists(AFilename) then Exit; try LShellApp := CreateOleObject('Shell.Application'); LFolderItem := LShellApp.Windows.Item.Document.Application .NameSpace(ExtractFileDir(AFilename)) .ParseName(ExtractFileName(AFilename)); { Below Windows 8. } if GetWindowsVersion < $06020000 then begin if AIsPin then LVerb := 'startpin' else LVerb := 'startunpin'; LFolderItem.InvokeVerb(LVerb); Result := True; end else { Windows 8 and above. } begin if not LFolderItem.IsLink then begin LnkName := LFolderItem.ExtendedProperty('FileDescription'); if LnkName = '' then LnkName := ExtractFileName(AFilename); LnkName := ExpandConstant('{commonprograms}\') + ChangeFileExt(LnkName, '.lnk'); if AIsPin then Result := not FileExists(LnkName) and FileExists(CreateShellLink(LnkName, '', AFilename, '', '', '', 0, SW_SHOWNORMAL)) else Result := DeleteFile(LnkName); end else begin LnkName := ExpandConstant('{commonprograms}\') + ExtractFileName(LFolderItem.Path); if AIsPin then Result := not FileExists(LnkName) and FileCopy(LFolderItem.Path, LnkName, False) else Result := DeleteFile(LnkName); end; end; except ShowExceptionMessage; end; end; |
|
Последний раз редактировалось El Sanchez, 06-06-2020 в 16:19. Причина: 16.02.20:fix; 06.06.20: add PinToStartMenu Отправлено: 18:19, 09-02-2020 | #545 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
|
|
Отправлено: 19:40, 09-02-2020 | #546 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать 1) так для справки я (трахну) ето ПИНО однозначно, не верю что не прикручю эту приблуду автоматом к панели на 10-ке, третьи сутки боя идут. 2) устанавливаю виндовс 10-ть раз в год уже 4-ый год подряд, пользуюсь примерно неделю-две, и возвращаюсь назад на 7-ку. решыл попробывать скачать образ 10-ки с оф сайта для тестирования своих наработок в ИННО на перспективной ОС
![]() |
Отправлено: 22:23, 09-02-2020 | #547 |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Beavimo:
Кстати начиная с 6.0.0-beta:
|
||
------- Отправлено: 23:56, 09-02-2020 | #548 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Nordek, да я не собырался на автомате ярлык лепить, просто код старался упрость для понимания. а так меня всегда раздажали картинки из игр в ирталлерах, заставки перед запуском, путь для игры с именем репакера или папка в меню пуск с его именем, установка софта поверх уже установленого .... короче кучя дерьма сжатия до придела что уснуть при установке можна, лутше время потратить на коректное извлечение ключей и путей из оригинального дистрибутива, чем ети репаки с музыкой и прочей лабудой клепать. а тут ярлык бог сека открепил и все
Nordek, ладно дружыще я просто немного ни в сибе третью сутку без сна, если что не так в правописании я со Львова, Руского никогда не изучал |
Отправлено: 00:22, 10-02-2020 | #549 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Beavimo:
![]() |
|
Отправлено: 00:38, 10-02-2020 | #550 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты Inno Setup. Помощь и советы [часть 7] | El Sanchez | Автоматическая установка приложений | 2499 | 02-02-2015 08:59 | |
Скрипты Inno Setup. Помощь и советы [часть 6] | El Sanchez | Автоматическая установка приложений | 2494 | 10-03-2014 11:51 | |
Скрипты Inno Setup. Помощь и советы [часть 5] | El Sanchez | Автоматическая установка приложений | 1999 | 28-03-2013 19:09 | |
Скрипты Inno Setup. Помощь и советы [часть 4] | El Sanchez | Автоматическая установка приложений | 2099 | 22-05-2012 23:16 | |
Скрипты Inno Setup. Помощь и советы [часть 3] | Serega | Автоматическая установка приложений | 3755 | 26-10-2011 17:58 |
|