|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме 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 |
|
Ветеран Сообщения: 862
|
Профиль | Отправить PM | Цитировать |
|
------- Отправлено: 14:45, 09-02-2020 | #541 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать 1) так для справки я (трахну) ето ПИНО однозначно, не верю что не прикручю эту приблуду автоматом к панели на 10-ке, третьи сутки боя идут. 2) устанавливаю виндовс 10-ть раз в год уже 4-ый год подряд, пользуюсь примерно неделю-две, и возвращаюсь назад на 7-ку. решыл попробывать скачать образ 10-ки с оф сайта для тестирования своих наработок в ИННО на перспективной ОС
- опирация прошла успешно, дата последнего обновления (09_01_2020) + онлайн ключики лежат на (philka.ru). 3) у меня на ПК стоит два ссд + винчестер. установил на второй зарание отформатированый ссд Windows 10 Pro. парни скажу чесно я будто обратно на хард пересел, а по сравнению с прошлогодней (08_01_2019) она стала еще больше походить все добро на одной полке, причем все в одном цвете хрен разбиреш что где, интуетивно нихера не понятно (нада учить всьо на изусть), короче бардак полнейшый. от душы лично мое мнение круче ХР по доступу к ресурсам я винды не встречал. а хто говорит мол 7-ка шлак, давно на 10-ке и не жалею, я просто промолчю (ДА ЗДРАВСТВУЕТ РЕКЛАМА в кожну хату) |
|
Отправлено: 22:23, 09-02-2020 | #547 |
|
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Beavimo:
Кстати начиная с 6.0.0-beta:
|
||
|
------- Отправлено: 23:56, 09-02-2020 | #548 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить 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 | |
|