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

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

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

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

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

    Регистрация:
    27 мар 2014
    Сообщения:
    352
    Симпатии:
    77
    Пол:
    Мужской
    Код (Text):

    [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\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

    [Code]
    const
        LOAD_LIBRARY_AS_DATAFILE = $2;

    #define A = (Defined UNICODE) ? "W" : "A"

    function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
    function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

    var
        hInst: THandle;
        buf: array [0..255] of Char;
        i, res: Integer;
        strLnk, strVerb: String;
        objShell, colVerbs: Variant;
    begin
        Result := False;
        if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

        { String resources }
        if IsPin then
        begin
            if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
            begin
                while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
                if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
            end;
            res := 5386;        { Pin to Tas&kbar }
        end else res := 5387;   { Unpin from Tas&kbar }

        { Load string resource }
        hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
        if hInst <> 0 then
        try
            for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
            try
                objShell := CreateOleObject('Shell.Application');
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            except
                Exit;
            end;
        finally
            FreeDLL(hInst);
        end;
    end;

    procedure CurPageChanged(CurPageID: integer);
    begin
      case CurPageID of
        wpFinished: begin
            if IsTaskSelected('Pin') then
            PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
        end;
      end;
    end;

    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    var
      instPath: string;
    begin
        case CurUninstallStep of
          usUninstall: begin
            PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
          end;
       end;
    end;
     
     
    Последнее редактирование: 25 июл 2014
    agrei678 и Дамир нравится это.
  3. Пользователь

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

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

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

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

    Регистрация:
    18 июн 2011
    Сообщения:
    908
    Симпатии:
    667
    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):

    const
        LOAD_LIBRARY_AS_DATAFILE = $2;

    #define A = (Defined UNICODE) ? "W" : "A"

    function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
    function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

    var
        hInst: THandle;
        buf: array [0..255] of Char;
        i, res: Integer;
        strLnk, strVerb: String;
        objShell, colVerbs: Variant;
    begin
        Result := False;
        if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

        { String resources }
        if IsPin then
        begin
            if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
            begin
                while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
                if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
            end;
            res := 5386;        { Pin to Tas&kbar }
        end else res := 5387;   { Unpin from Tas&kbar }

        { Load string resource }
        hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
        if hInst <> 0 then
        try
            for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
            try
                objShell := CreateOleObject('Shell.Application');
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            except
                Exit;
            end;
        finally
            FreeDLL(hInst);
        end;
    end;

    var
      MyPage: TWizardPage;
      ToTaskbar: TNewCheckBox;

    procedure InitializeWizard();
    begin
     MyPage := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
     ToTaskbar := TNewCheckBox.Create(WizardForm);
      with ToTaskbar do
      begin
        Parent := MyPage.Surface;
        Left := ScaleX(88);
        Top := ScaleY(80);
        Width := ScaleX(233);
        Height := ScaleY(17);
        Caption := 'Закрепить ярлык на панели задач';
      end;
    end;


    procedure CurPageChanged(CurPageID: integer);
    begin
      case CurPageID of
        wpFinished: begin
            if ToTaskbar.Checked then
            PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
        end;
      end;
    end;

    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    var
      instPath: string;
    begin
        case CurUninstallStep of
          usUninstall: begin
            PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
          end;
       end;
    end;
    [/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
    Сообщения:
    336
    Симпатии:
    172
    Пол:
    Мужской
    А что мешает сделать при отключенной странице так:
    Код (Inno):

    procedure CurStepChanged(CurStep: TSetupStep);
    begin
       case CurStep of
       ssPostInstall : begin
         if ToTaskbar.Checked then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
       end;
    end;
     
    AlexS нравится это.
  12. Пользователь

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

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

    Регистрация:
    27 мар 2014
    Сообщения:
    352
    Симпатии:
    77
    Пол:
    Мужской
    Обновленные варианты от El Sanchez:
    Код (Text):
    function PinToTaskbar(const FileName: string; IsPin: Boolean): Boolean;
    // FileName : full path to executable file
    // IsPin    : False - unpin from TaskBar, True - pin to TaskBar
    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;
    Код (Text):
    function PinToStartMenu(const FileName: string; const IsPin: Boolean): Boolean;
    // FileName : full path to exe- or lnk-file
    // IsPin    : False - unpin from StartMenu, True - pin to StartMenu
    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 // below Windows 8
        begin
          if IsPin then
            Verb := 'startpin' else
            Verb := 'startunpin';
          FolderItem.InvokeVerb(Verb);
          Result := True;
        end
        else  // Windows 8 and above
        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;
     
    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):


    //  ------------  ЛОГО в Начале установки  ------------  //
    procedure ShowSplashScreen(p1: HWND; p2: AnsiString; p3, p4, p5, p6, p7: Integer; p8: Boolean; p9: Cardinal; p10: Integer);
      external 'ShowSplashScreen@{tmp}\isgsg.dll stdcall delayload';

    procedure Splash();
    begin
      ExtractTemporaryFile('isgsg.dll');
      ExtractTemporaryFile('CCCP.png');
      ShowSplashScreen(WizardForm.Handle, ExpandConstant('{tmp}\CCCP.png'), 1000, 3000, 1000, 0, 255, False, $FFFFFF, 10);
    end;

    procedure InitializeWizard;
    begin
      #ifdef Splash
      Splash();
      #endif
    end;

    //  ------------  КОНЕЦ  ЛОГО  ------------  //


    function PinToTaskbar(const filename: string; IsPin: Boolean): Boolean;
    // FileName : full path to executable file
    // IsPin    : False - unpin from TaskBar, True - pin to TaskBar
    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;
    [/SPOILER]
     
  16. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    352
    Симпатии:
    77
    Пол:
    Мужской
    agrei678, Функцию вы то вставили, а где сам вызов функции?
    Судя по коду вам нужно что-то типа такого:
    Код (Inno):
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
      if CurStep = ssPostInstall then
        begin
          if IsTaskSelected('pin') then PinToTaskbar(ExpandConstant('{app}\optimize.exe'), true); //закрепить ярлык
        end;
    end;

    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    begin
      if CurUninstallStep = usUninstall then
        begin
          PinToTaskbar(ExpandConstant('{app}\optimize.exe'), false); //открепить ярлык
        end;
    end;
     
     
  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):

    var
        hTestBtn:HWND;



    //  ------------  ЛОГО в Начале установки  ------------  //
    procedure ShowSplashScreen(p1: HWND; p2: AnsiString; p3, p4, p5, p6, p7: Integer; p8: Boolean; p9: Cardinal; p10: Integer);
      external 'ShowSplashScreen@{tmp}\isgsg.dll stdcall delayload';

    procedure Splash();
    begin
      ExtractTemporaryFile('isgsg.dll');
      ExtractTemporaryFile('CCCP.png');
      ShowSplashScreen(WizardForm.Handle, ExpandConstant('{tmp}\CCCP.png'), 1000, 3000, 1000, 0, 255, False, $FFFFFF, 10);
    end;

    //  ------------  КОНЕЦ  ЛОГО  ------------  //


    procedure TestBtn2Click(hBtn:HWND);
    //выполняется при нажатии на кнопку с хэндлом hTestBtn
    var
        ErrorCode: Integer;
    begin
        ShellExec('open', 'www.Yandex.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
    end;

    function InitializeSetup:boolean;
    begin
        if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
        if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
        Result:=True;
    end;

    procedure InitializeWizard;
    var
        h:HWND;
        i,l1:integer;
    begin
        hTestBtn:=BtnCreate(WizardForm.Handle,0,315,85,30,'button.png',1,False);
        BtnSetEvent(hTestBtn,BtnClickEventID,WrapBtnCallback(@TestBtn2Click,1));
        BtnSetFontColor(hTestBtn,clblack,clblack,clblack,clgray);
        BtnSetText(hTestBtn,'Yandex.RU');
    //   Вставляем где есть строка с << procedure InitializeWizard; >>   ищем в скрипте её
    //   Потом строка << var >>
    //   Потом строка << begin >>   после этих строк вставляем << Splash >>
      #ifdef Splash
      Splash();
      #endif
    //   КОНЕЦ Splash
    end;

    procedure DeinitializeSetup();
    begin
        gdipShutdown;
    end;













    ///////////// в панель задачь
    const
        LOAD_LIBRARY_AS_DATAFILE = $2;

    #define A = (Defined UNICODE) ? "W" : "A"

    function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
    function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
    function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
    function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

    var
        hInst: THandle;
        buf: array [0..255] of Char;
        i, res: Integer;
        strLnk, strVerb: String;
        objShell, colVerbs: Variant;
    begin
        Result := False;
        if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

        { String resources }
        if IsPin then
        begin
            if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
            begin
                while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
                if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
            end;
            res := 5386;        { Pin to Tas&kbar }
        end else res := 5387;   { Unpin from Tas&kbar }

        { Load string resource }
        hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
        if hInst <> 0 then
        try
            for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
            try
                objShell := CreateOleObject('Shell.Application');
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            except
                Exit;
            end;
        finally
            FreeDLL(hInst);
        end;
    end;

    procedure CurPageChanged(CurPageID: integer);
    begin
      case CurPageID of
        wpFinished: begin
            if IsTaskSelected('Pin') then
            PinToTaskbar(ExpandConstant('{app}\Optimize.exe'), True);
        end;
      end;
    end;

    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    var
      instPath: string;
    begin
        case CurUninstallStep of
          usUninstall: begin
            PinToTaskbar(ExpandConstant('{app}\Optimize.exe'), False);
          end;
       end;
    end;
    /////////////////  конец панель


    procedure CurStepChanged(CurStep: TSetupStep);
    begin
      if CurStep = ssPostInstall then
        begin
          if IsTaskSelected('pin') then PinToTaskbar(ExpandConstant('{app}\optimize.exe'), true); //закрепить ярлык
        end;
    end;

    [/SPOILER]
     
    Последнее редактирование: 29 авг 2019
  18. Пользователь

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

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

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