1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопрос Как закрепить ярлык на панели задач

Тема в разделе "Inno Setup", создана пользователем Дамир, 25 июл 2014.

  1. Пользователь

    Регистрация:
    21 авг 2013
    Сообщения:
    20
    Симпатии:
    0
    Можно как то закрепить ярлык на панели задач без использования vbs скрипта который есть в примерах? Почему не срабатывает стандартный вариант inno setup?
     
  2. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    Код (Text):
    1.  
    2. [Setup]
    3. AppName=My Program
    4. AppVersion=1.5
    5. DefaultDirName={pf}\My Program
    6.  
    7. [Languages]
    8. Name: "default"; MessagesFile: "compiler:Default.isl"
    9.  
    10. [Tasks]
    11. Name: "pin"; Description: "Закрепить ярлык на панели задач"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
    12.  
    13. [Files]
    14. Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
    15.  
    16. [Code]
    17. const
    18.     LOAD_LIBRARY_AS_DATAFILE = $2;
    19.  
    20. #define A = (Defined UNICODE) ? "W" : "A"
    21.  
    22. function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    23. function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    24. function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
    25. function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
    26.  
    27. var
    28.     hInst: THandle;
    29.     buf: array [0..255] of Char;
    30.     i, res: Integer;
    31.     strLnk, strVerb: String;
    32.     objShell, colVerbs: Variant;
    33. begin
    34.     Result := False;
    35.     if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }
    36.  
    37.     { String resources }
    38.     if IsPin then
    39.     begin
    40.         if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
    41.         begin
    42.             while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
    43.             if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
    44.         end;
    45.         res := 5386;        { Pin to Tas&kbar }
    46.     end else res := 5387;   { Unpin from Tas&kbar }
    47.  
    48.     { Load string resource }
    49.     hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    50.     if hInst <> 0 then
    51.     try
    52.         for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
    53.         try
    54.             objShell := CreateOleObject('Shell.Application');
    55.             colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
    56.             for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
    57.             begin
    58.                 colVerbs.Item[i].DoIt;
    59.                 Result := True;
    60.                 Break;
    61.             end;
    62.         except
    63.             Exit;
    64.         end;
    65.     finally
    66.         FreeDLL(hInst);
    67.     end;
    68. end;
    69.  
    70. procedure CurPageChanged(CurPageID: integer);
    71. begin
    72.   case CurPageID of
    73.     wpFinished: begin
    74.         if IsTaskSelected('Pin') then
    75.         PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
    76.     end;
    77.   end;
    78. end;
    79.  
    80. procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    81. var
    82.   instPath: string;
    83. begin
    84.     case CurUninstallStep of
    85.       usUninstall: begin
    86.         PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
    87.       end;
    88.    end;
    89. end;
    90.  
     
    Последнее редактирование: 25 июл 2014
    agrei678 и Дамир нравится это.
  3. Пользователь

    Регистрация:
    21 авг 2013
    Сообщения:
    20
    Симпатии:
    0
    Хамик, не работает :scratchhead:
     
  4. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    Дамир, Что именно? Какая-то ошибка есть?
     
  5. Пользователь

    Регистрация:
    21 авг 2013
    Сообщения:
    20
    Симпатии:
    0
    Хамик, моя ошибка, не заметил что имя таска обязательно должно быть pin, поэтому и не крепился, спасибо!
     
  6. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Хамик, нужна твоя помощь по выше данному коду. Пытаюсь прикрутить его к своему и не могу, в виду того, что секцию [Tasks] отключил. Хочу прикрутить на свою кастомную страницу и не выходит. Коротко о моем скрипте: есть страница с названием "CustomPage", на ней чекбокс с названием "Закрепить ярлык на панели задач". Помоги пожалуйста с решением этой задачи. Буду очень признателен.
     
  7. Ветеран Проверенный

    Регистрация:
    18 июн 2011
    Сообщения:
    909
    Симпатии:
    672
    AlexS,
    [Setup]
    AppName=My Program
    AppVersion=1.5
    DefaultDirName={pf}\My Program

    [Languages]
    Name: "default"; MessagesFile: "compiler:Default.isl"

    ;[Tasks]
    ;Name: "pin"; Description: "Закрепить ярлык на панели задач"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

    [Files]
    Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

    Код (Text):
    1.  
    2. const
    3.     LOAD_LIBRARY_AS_DATAFILE = $2;
    4.  
    5. #define A = (Defined UNICODE) ? "W" : "A"
    6.  
    7. function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    8. function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    9. function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
    10. function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
    11.  
    12. var
    13.     hInst: THandle;
    14.     buf: array [0..255] of Char;
    15.     i, res: Integer;
    16.     strLnk, strVerb: String;
    17.     objShell, colVerbs: Variant;
    18. begin
    19.     Result := False;
    20.     if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }
    21.  
    22.     { String resources }
    23.     if IsPin then
    24.     begin
    25.         if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
    26.         begin
    27.             while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
    28.             if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
    29.         end;
    30.         res := 5386;        { Pin to Tas&kbar }
    31.     end else res := 5387;   { Unpin from Tas&kbar }
    32.  
    33.     { Load string resource }
    34.     hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    35.     if hInst <> 0 then
    36.     try
    37.         for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
    38.         try
    39.             objShell := CreateOleObject('Shell.Application');
    40.             colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
    41.             for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
    42.             begin
    43.                 colVerbs.Item[i].DoIt;
    44.                 Result := True;
    45.                 Break;
    46.             end;
    47.         except
    48.             Exit;
    49.         end;
    50.     finally
    51.         FreeDLL(hInst);
    52.     end;
    53. end;
    54.  
    55. var
    56.   MyPage: TWizardPage;
    57.   ToTaskbar: TNewCheckBox;
    58.  
    59. procedure InitializeWizard();
    60. begin
    61.  MyPage := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
    62.  ToTaskbar := TNewCheckBox.Create(WizardForm);
    63.   with ToTaskbar do
    64.   begin
    65.     Parent := MyPage.Surface;
    66.     Left := ScaleX(88);
    67.     Top := ScaleY(80);
    68.     Width := ScaleX(233);
    69.     Height := ScaleY(17);
    70.     Caption := 'Закрепить ярлык на панели задач';
    71.   end;
    72. end;
    73.  
    74.  
    75. procedure CurPageChanged(CurPageID: integer);
    76. begin
    77.   case CurPageID of
    78.     wpFinished: begin
    79.         if ToTaskbar.Checked then
    80.         PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
    81.     end;
    82.   end;
    83. end;
    84.  
    85. procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    86. var
    87.   instPath: string;
    88. begin
    89.     case CurUninstallStep of
    90.       usUninstall: begin
    91.         PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
    92.       end;
    93.    end;
    94. end;
    95. [/SPOILER]
     
    AlexS, Ramiro Cruzo и Nemko нравится это.
  8. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо большое.
     
  9. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Прикрутил. Результат нулевой.
    Самое странное, что ошибок не выдает. Компилируется без проблем, устанавливается тоже, но не закрепляется...
     
  10. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Разобрался!!! Оказалось, что из-за отключённой финишной страницы. Если в секции [Setup] есть директива DisableFinishedPage=yes, то закрепления ярлыка на панели задач не происходит...
     
  11. Старожил

    Регистрация:
    31 мар 2015
    Сообщения:
    337
    Симпатии:
    174
    Пол:
    Мужской
    А что мешает сделать при отключенной странице так:
    Код (Inno):
    1.  
    2. procedure CurStepChanged(CurStep: TSetupStep);
    3. begin
    4.    case CurStep of
    5.    ssPostInstall : begin
    6.      if ToTaskbar.Checked then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
    7.    end;
    8. end;
     
    AlexS нравится это.
  12. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо большое, сработало с отключённой финишной страницей
     
  13. Пользователь

    Регистрация:
    13 авг 2018
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Хамик,
    Приветствую всех, прошу навыков и знаний инженеров, ярлык закрепляется прекрасно в Windows 7 ,а как закрепить в Win 10? ,закрепляется почему-то не в панели а в меню пуск , что где подправить?
     
    Последнее редактирование: 26 авг 2019
  14. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    Обновленные варианты от El Sanchez:
    Код (Text):
    1. function PinToTaskbar(const FileName: string; IsPin: Boolean): Boolean;
    2. // FileName : full path to executable file
    3. // IsPin    : False - unpin from TaskBar, True - pin to TaskBar
    4. var
    5.   ShellApp: Variant;
    6.   Verb: string;
    7. begin
    8.   Result := False;
    9.   if not FileExists(FileName) then Exit;
    10.   try
    11.     if IsPin then
    12.       Verb := 'taskbarpin' else
    13.       Verb := 'taskbarunpin';
    14.     ShellApp := CreateOleObject('Shell.Application');
    15.     ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName)).InvokeVerb(Verb);
    16.     Result := True;
    17.   except
    18.     ShowExceptionMessage;
    19.   end;
    20. end;
    Код (Text):
    1. function PinToStartMenu(const FileName: string; const IsPin: Boolean): Boolean;
    2. // FileName : full path to exe- or lnk-file
    3. // IsPin    : False - unpin from StartMenu, True - pin to StartMenu
    4. var
    5.   ShellApp, FolderItem: Variant;
    6.   Verb, LnkName: string;
    7. begin
    8.   Result := False;
    9.   if not FileExists(FileName) then Exit;
    10.   try
    11.     ShellApp := CreateOleObject('Shell.Application');
    12.     FolderItem := ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(FileName)).ParseName(ExtractFileName(FileName));
    13.     if GetWindowsVersion < $06020000 then // below Windows 8
    14.     begin
    15.       if IsPin then
    16.         Verb := 'startpin' else
    17.         Verb := 'startunpin';
    18.       FolderItem.InvokeVerb(Verb);
    19.       Result := True;
    20.     end
    21.     else  // Windows 8 and above
    22.     begin
    23.       if not FolderItem.IsLink then
    24.       begin
    25.         LnkName := FolderItem.ExtendedProperty('FileDescription');
    26.         if LnkName = '' then
    27.           LnkName := ExtractFileName(FileName);
    28.         LnkName := ExpandConstant('{commonprograms}\') + ChangeFileExt(LnkName, '.lnk');
    29.         if IsPin then
    30.           Result := not FileExists(LnkName) and
    31.             FileExists(CreateShellLink(LnkName, '', FileName, '', '', '', 0, SW_SHOWNORMAL))
    32.         else
    33.           Result := DeleteFile(LnkName);
    34.       end
    35.       else
    36.       begin
    37.         LnkName := ExpandConstant('{commonprograms}\') + ExtractFileName(FolderItem.Path);
    38.         if IsPin then
    39.           Result := not FileExists(LnkName) and
    40.             FileCopy(FolderItem.Path, LnkName, False)
    41.         else
    42.           Result := DeleteFile(LnkName);
    43.       end;
    44.     end;
    45.   except
    46.     ShowExceptionMessage;
    47.   end;
    48. end;
     
    Nemko нравится это.
  15. Пользователь

    Регистрация:
    13 авг 2018
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Хамик, Что-то не получается ярлыка в панели совсем не видать :rolleyes:
    #define FileName "Степаныч"
    #define PROGVerName "Степаныч [v 1.9.4.5]"

    #define NeedSize "6315"

    #define Processor "3000"
    #define VideoCard "128"
    #define RAM "512"
    #define WinVerMajor "5"
    #define WinVerMinor "1"
    #define ServicePack "2"

    #define ArcLocation "{src}\*.arc"

    #define Splash /* Откл. или вкл. Splash (ЛОГОтип) */

    [Setup]
    //AppId={#PROGID}
    AppName={#FileName}
    AppVerName={#FileName}
    AppPublisher=123
    AppPublisherURL=http://
    AppVersion=1.0
    AppSupportURL={app}\Support\Help\Ru\HELP_RU.htm
    AppUpdatesURL=http://www.123.com/downloads
    AppReadmeFile={group}\ReadMe.lnk
    DefaultDirName={pf}\Степаныч
    DefaultGroupName=Степаныч
    OutputBaseFilename=Степаныч
    DisableReadyPage=yes
    DirExistsWarning=no
    MinVersion=1,0
    VersionInfoDescription={#FileName}
    SetupIconFile=FILESS\0.ico
    DiskSpanning=yes
    SlicesPerDisk=3
    DiskSliceSize=1566000000
    //DisableReadyPage=True
    InternalCompressLevel=ultra64
    SolidCompression=true
    Compression=lzma/ultra64

    [Languages]
    Name: "default"; MessagesFile: "compiler:Default.isl"

    [Tasks]
    Name: "pin"; Description: "Закрепить ярлык на панели задач"; GroupDescription: "{cm:AdditionalIcons}"

    [Files]
    Source: "FILESS\optimize.exe"; DestDir: "{app}"; Flags: ignoreversion

    //-----------------------------------------------------------------
    //////// ЛОГОТИП в НАЧАЛЕ УСТАНОВКИ //////
    #ifdef Splash
    Source: "FILESS\isgsg.dll"; DestDir:"{tmp}\uninst_tmp"; Flags: ignoreversion
    Source: "FILESS\CCCP.png"; DestDir:"{tmp}\uninst_tmp"; Flags: ignoreversion
    #endif
    //-----------------------------------------------------------------

    //-----------------------------------------------------------------
    ////////////// замена вида папки на иконку //////////////
    Source: FILESS\Desktop.ini; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
    Source: FILESS\Desktop.ini; DestDir: {group}; Flags: ignoreversion; Attribs: hidden system
    Source: FILESS\0.ico; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
    Source: FILESS\0.ico; DestDir: {group}; Flags: ignoreversion; Attribs: hidden system
    //-----------------------------------------------------------------


    [Icons]
    //-----------------------------------------------------------------
    ////////////// ярлыки в меню пуск //////////////////
    Name: "{group}\Запустить {#FileName}"; Filename: "{app}\optimize.exe"
    Name: "{group}\удалить {#PROGVerName}"; Filename: "{app}\unins000.exe"
    //-----------------------------------------------------------------
    ////////////// автоматически создаёт ярлык на рабочем столе //////////////////
    Name: "{commondesktop}\{#FileName}"; Filename: "{app}\optimize.exe"; Comment: "{#FileName}"; IconFilename: "{app}\optimize.exe"
    //Name: "{userdesktop}\{#FileName}"; Filename: "{app}\optimize.exe"; WorkingDir: {app}; Check: NoIcons
    //-----------------------------------------------------------------

    //-----------------------------------------------------------------
    ////////////// замена вида папки на иконку (вставлять только после команды [Icons] ато ничего не получится) //////////////
    [Tasks]
    Name: desktopicon; Description: {cm:CreateDesktopIcon}
    [Dirs]
    Name: {app}; attribs: readonly
    Name: {group}; attribs: readonly
    [INI]
    //FileName: "{app}\publisher.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.123.com";
    //FileName: "{app}\Update.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.123.com/downloads";
    filename: {app}\Desktop.ini; section: .ShellClassInfo; key: IconFile; string: {app}\0.ico
    filename: {app}\Desktop.ini; section: .ShellClassInfo; key: IconIndex; string: 0
    filename: {group}\Desktop.ini; section: .ShellClassInfo; string: {app}\0.ico; key: IconFile
    filename: {group}\Desktop.ini; section: .ShellClassInfo; key: IconIndex; string: 0
    //-----------------------------------------------------------------

    [UninstallDelete]
    //Type: files; Name: "{app}\publisher.url"
    //Type: files; Name: "{app}\Update.url"
    Type: filesandordirs; Name: {app}

    Код (Text):
    1.  
    2.  
    3. //  ------------  ЛОГО в Начале установки  ------------  //
    4. procedure ShowSplashScreen(p1: HWND; p2: AnsiString; p3, p4, p5, p6, p7: Integer; p8: Boolean; p9: Cardinal; p10: Integer);
    5.   external 'ShowSplashScreen@{tmp}\isgsg.dll stdcall delayload';
    6.  
    7. procedure Splash();
    8. begin
    9.   ExtractTemporaryFile('isgsg.dll');
    10.   ExtractTemporaryFile('CCCP.png');
    11.   ShowSplashScreen(WizardForm.Handle, ExpandConstant('{tmp}\CCCP.png'), 1000, 3000, 1000, 0, 255, False, $FFFFFF, 10);
    12. end;
    13.  
    14. procedure InitializeWizard;
    15. begin
    16.   #ifdef Splash
    17.   Splash();
    18.   #endif
    19. end;
    20.  
    21. //  ------------  КОНЕЦ  ЛОГО  ------------  //
    22.  
    23.  
    24. function PinToTaskbar(const filename: string; IsPin: Boolean): Boolean;
    25. // FileName : full path to executable file
    26. // IsPin    : False - unpin from TaskBar, True - pin to TaskBar
    27. var
    28.   ShellApp: Variant;
    29.   Verb: string;
    30. begin
    31.   Result := False;
    32.   if not FileExists(filename) then Exit;
    33.   try
    34.     if IsPin then
    35.       Verb := 'taskbarpin' else
    36.       Verb := 'taskbarunpin';
    37.     ShellApp := CreateOleObject('Shell.Application');
    38.     ShellApp.Windows.Item.Document.Application.NameSpace(ExtractFileDir(filename)).ParseName(ExtractFileName(filename)).InvokeVerb(Verb);
    39.     Result := True;
    40.   except
    41.     ShowExceptionMessage;
    42.   end;
    43. end;
    44. [/SPOILER]
     
  16. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
    agrei678, Функцию вы то вставили, а где сам вызов функции?
    Судя по коду вам нужно что-то типа такого:
    Код (Inno):
    1. procedure CurStepChanged(CurStep: TSetupStep);
    2. begin
    3.   if CurStep = ssPostInstall then
    4.     begin
    5.       if IsTaskSelected('pin') then PinToTaskbar(ExpandConstant('{app}\optimize.exe'), true); //закрепить ярлык
    6.     end;
    7. end;
    8.  
    9. procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    10. begin
    11.   if CurUninstallStep = usUninstall then
    12.     begin
    13.       PinToTaskbar(ExpandConstant('{app}\optimize.exe'), false); //открепить ярлык
    14.     end;
    15. end;
    16.  
     
  17. Пользователь

    Регистрация:
    13 авг 2018
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Хамик, не выходит ,ошибка PinToTaskbar (я в скриптах и в программировании не шарю, я так на авось методом тыка :).)

    #define PROGName "Степаныч"
    #define PROGVerName "Степаныч [v 1.9.4.5]"


    #define NeedSize "6315"

    #define Processor "3000"
    #define VideoCard "128"
    #define RAM "512"
    #define WinVerMajor "5"
    #define WinVerMinor "1"
    #define ServicePack "2"

    #define ArcLocation "{src}\*.arc"

    #include "botva22.iss"
    #define Splash /* Откл. или вкл. Splash (ЛОГОтип) */


    [Setup]
    AppName={#PROGName}
    AppVerName={#PROGName}
    AppPublisher=Electronic Arts
    AppPublisherURL=http://www.123.com
    AppVersion=1.0.1.17
    AppSupportURL={app}\Help\HELP_RU.htm
    AppUpdatesURL=http://www.123.com/downloads
    AppReadmeFile={group}\ReadMe.lnk
    DefaultDirName={pf}\Games
    DefaultGroupName=Games
    OutputBaseFilename=Stepanich
    DisableReadyPage=yes
    DirExistsWarning=no
    MinVersion=0,5.01
    VersionInfoDescription={#PROGName}
    SetupIconFile=FILESS\0.ico
    DiskSpanning=yes
    SlicesPerDisk=3
    //DiskSliceSize=1566000000
    //DisableReadyPage=True
    InternalCompressLevel=ultra64
    SolidCompression=true
    Compression=lzma/ultra64

    [Languages]
    Name: "default"; MessagesFile: "compiler:Default.isl"

    [Files]
    Source: "InstallFiles\*"; Flags: dontcopy;

    Source: botva2.dll; Flags: dontcopy
    Source: button.png; Flags: dontcopy
    Source: CallbackCtrl.dll; Flags: dontcopy
    //-----------------------------------------------------------------
    //////// ЛОГОТИП в НАЧАЛЕ УСТАНОВКИ //////
    #ifdef Splash
    Source: "InstallFiles\isgsg.dll"; DestDir:"{tmp}\uninst_tmp"; Flags: ignoreversion
    Source: "InstallFiles\CCCP.png"; DestDir:"{tmp}\uninst_tmp"; Flags: ignoreversion
    #endif
    //-----------------------------------------------------------------
    Source: "FILESS\Optimize.exe"; DestDir: "{app}"; Flags: ignoreversion

    //-----------------------------------------------------------------
    ////////////// замена вида папки на иконку //////////////
    Source: FILESS\Desktop.ini; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
    Source: FILESS\Desktop.ini; DestDir: {group}; Flags: ignoreversion; Attribs: hidden system
    Source: FILESS\0.ico; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
    Source: FILESS\0.ico; DestDir: {group}; Flags: ignoreversion; Attribs: hidden system
    //-----------------------------------------------------------------
    //-----------------------------------------------------------------









    ////////////// замена вида папки на иконку (вставлять только после команды [Icons] ато ничего не получится) //////////////
    [Tasks]
    // чтоб убрать чекбокс в конце строк нужно вставить то-что в кавычках ( ; Flags: unchecked )
    Name: desktopicon; Description: {cm:CreateDesktopIcon}
    Name: "pin"; Description: "Закрепить ярлык на панели задач"; GroupDescription: "{cm:AdditionalIcons}"

    [Dirs]
    Name: {app}; attribs: readonly
    Name: {group}; attribs: readonly
    [INI]
    //FileName: "{app}\publisher.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.ea.com";
    //FileName: "{app}\Update.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.needforspeed.com/downloads";
    filename: {app}\Desktop.ini; section: .ShellClassInfo; key: IconFile; string: {app}\0.ico
    filename: {app}\Desktop.ini; section: .ShellClassInfo; key: IconIndex; string: 0
    filename: {group}\Desktop.ini; section: .ShellClassInfo; string: {app}\0.ico; key: IconFile
    filename: {group}\Desktop.ini; section: .ShellClassInfo; key: IconIndex; string: 0
    //-----------------------------------------------------------------












    [Icons]
    //-----------------------------------------------------------------
    ////////////// ярлыки в меню пуск //////////////////
    Name: "{group}\Запустить {#ProgName}"; Filename: "{app}\optimize.exe"
    Name: "{group}\удалить {#PROGVerName}"; Filename: "{app}\unins000.exe"
    //-----------------------------------------------------------------
    ////////////// автоматически создаёт ярлык на рабочем столе //////////////////
    Name: "{commondesktop}\{#ProgName}"; Filename: "{app}\optimize.exe"; Comment: "{#PROGName}"; IconFilename: "{app}\optimize.exe"
    //Name: "{userdesktop}\{#PROGName}"; Filename: "{app}\optimize.exe"; WorkingDir: {app}; Check: NoIcons
    //-----------------------------------------------------------------











    [UninstallDelete]
    //Type: files; Name: "{app}\publisher.url"
    //Type: files; Name: "{app}\Update.url"
    Type: filesandordirs; Name: {app}


    Код (Text):
    1.  
    2. var
    3.     hTestBtn:HWND;
    4.  
    5.  
    6.  
    7. //  ------------  ЛОГО в Начале установки  ------------  //
    8. procedure ShowSplashScreen(p1: HWND; p2: AnsiString; p3, p4, p5, p6, p7: Integer; p8: Boolean; p9: Cardinal; p10: Integer);
    9.   external 'ShowSplashScreen@{tmp}\isgsg.dll stdcall delayload';
    10.  
    11. procedure Splash();
    12. begin
    13.   ExtractTemporaryFile('isgsg.dll');
    14.   ExtractTemporaryFile('CCCP.png');
    15.   ShowSplashScreen(WizardForm.Handle, ExpandConstant('{tmp}\CCCP.png'), 1000, 3000, 1000, 0, 255, False, $FFFFFF, 10);
    16. end;
    17.  
    18. //  ------------  КОНЕЦ  ЛОГО  ------------  //
    19.  
    20.  
    21. procedure TestBtn2Click(hBtn:HWND);
    22. //выполняется при нажатии на кнопку с хэндлом hTestBtn
    23. var
    24.     ErrorCode: Integer;
    25. begin
    26.     ShellExec('open', 'www.Yandex.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
    27. end;
    28.  
    29. function InitializeSetup:boolean;
    30. begin
    31.     if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
    32.     if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
    33.     Result:=True;
    34. end;
    35.  
    36. procedure InitializeWizard;
    37. var
    38.     h:HWND;
    39.     i,l1:integer;
    40. begin
    41.     hTestBtn:=BtnCreate(WizardForm.Handle,0,315,85,30,'button.png',1,False);
    42.     BtnSetEvent(hTestBtn,BtnClickEventID,WrapBtnCallback(@TestBtn2Click,1));
    43.     BtnSetFontColor(hTestBtn,clblack,clblack,clblack,clgray);
    44.     BtnSetText(hTestBtn,'Yandex.RU');
    45. //   Вставляем где есть строка с << procedure InitializeWizard; >>   ищем в скрипте её
    46. //   Потом строка << var >>
    47. //   Потом строка << begin >>   после этих строк вставляем << Splash >>
    48.   #ifdef Splash
    49.   Splash();
    50.   #endif
    51. //   КОНЕЦ Splash
    52. end;
    53.  
    54. procedure DeinitializeSetup();
    55. begin
    56.     gdipShutdown;
    57. end;
    58.  
    59.  
    60.  
    61.  
    62.  
    63.  
    64.  
    65.  
    66.  
    67.  
    68.  
    69.  
    70.  
    71. ///////////// в панель задачь
    72. const
    73.     LOAD_LIBRARY_AS_DATAFILE = $2;
    74.  
    75. #define A = (Defined UNICODE) ? "W" : "A"
    76.  
    77. function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    78. function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    79. function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
    80. function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
    81.  
    82. var
    83.     hInst: THandle;
    84.     buf: array [0..255] of Char;
    85.     i, res: Integer;
    86.     strLnk, strVerb: String;
    87.     objShell, colVerbs: Variant;
    88. begin
    89.     Result := False;
    90.     if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }
    91.  
    92.     { String resources }
    93.     if IsPin then
    94.     begin
    95.         if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
    96.         begin
    97.             while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
    98.             if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
    99.         end;
    100.         res := 5386;        { Pin to Tas&kbar }
    101.     end else res := 5387;   { Unpin from Tas&kbar }
    102.  
    103.     { Load string resource }
    104.     hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    105.     if hInst <> 0 then
    106.     try
    107.         for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
    108.         try
    109.             objShell := CreateOleObject('Shell.Application');
    110.             colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
    111.             for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
    112.             begin
    113.                 colVerbs.Item[i].DoIt;
    114.                 Result := True;
    115.                 Break;
    116.             end;
    117.         except
    118.             Exit;
    119.         end;
    120.     finally
    121.         FreeDLL(hInst);
    122.     end;
    123. end;
    124.  
    125. procedure CurPageChanged(CurPageID: integer);
    126. begin
    127.   case CurPageID of
    128.     wpFinished: begin
    129.         if IsTaskSelected('Pin') then
    130.         PinToTaskbar(ExpandConstant('{app}\Optimize.exe'), True);
    131.     end;
    132.   end;
    133. end;
    134.  
    135. procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    136. var
    137.   instPath: string;
    138. begin
    139.     case CurUninstallStep of
    140.       usUninstall: begin
    141.         PinToTaskbar(ExpandConstant('{app}\Optimize.exe'), False);
    142.       end;
    143.    end;
    144. end;
    145. /////////////////  конец панель
    146.  
    147.  
    148. procedure CurStepChanged(CurStep: TSetupStep);
    149. begin
    150.   if CurStep = ssPostInstall then
    151.     begin
    152.       if IsTaskSelected('pin') then PinToTaskbar(ExpandConstant('{app}\optimize.exe'), true); //закрепить ярлык
    153.     end;
    154. end;
    155.  
    156. [/SPOILER]
     
    Последнее редактирование: 29 авг 2019
  18. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    353
    Симпатии:
    77
    Пол:
    Мужской
  19. Пользователь

    Регистрация:
    13 авг 2018
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Хамик, не это тоже пробовал не катит:yes:
     

Поделиться этой страницей