PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [27] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Beavimo
04-02-2020, 15:32
Выручайте, башка кипит! :drug: Как решить не пойму, примеров найти не могу? Некая программа работает на Виндовс 7 некорректно. Опытным путем :), после установки обновления KB2533623, программа начала работать как надо. Так вот в момент установки моего приложения, надо проверить установлено ли обновление KB2533623 в системе, или нет. Если установлено то просто установить приложение, в противном случае, спросить у пользователя, мол :) хотите установить или нет? Как проверить наличие KB2533623 за что цеплятся? Короч насочинял чот но как быть с 32-бит системой, как запустить само обновление при нажатии "да" непойму.

[Setup]
AppName=TEST
AppVerName=TEST
OutputDir=userdocs:..\Desktop
CreateAppDir=no
Uninstallable=no

[.Code]
function WindowsVersion(Major, Minor: Integer): Boolean; var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result:=(Version.Major = Major);
Result:=(Version.Minor = Minor);
end;

function WindowsRevVersion: Boolean;
begin
Result:=WindowsVersion(6,1);// Далее код будет выполнятся, только если установлена система (6.1)
end;

function InitializeSetup: Boolean; var
FileName: String;
begin
if not WindowsRevVersion then
Result:=True
else begin
FileName:=ExpandConstant('C:\Windows\SoftwareDistribution\Download\873dafaddab7475a4078c7fc97bc8cba\ Windows6.1-KB2533623-x64.cab')// Проверка наличия файла по пути прописаном в реестре
if FileExists(FileName) then
Result:=True
else
if MsgBox('Для полноценной работы приложения TEST:'#13'Нужно установить обновление KB2533623:'#13'Хотите установить обновление KB2533623 ?', mbInformation, MB_YESNO)=IDNO then
Result:=True
else
// Как здесь запустить файл "Windows6.1-KB2533623-x64.msu"???
end
end;

[Files]
Source: "C:\Windows6.1-KB2533623-x64.msu"; DestDir: "{tmp}"; Flags: deleteafterinstall;

шуршу страницы в поисках истины, реально прогрес бар, ботва... короче дети засрали все со своими репаками
ПОМОГИТЕ

Nordek
04-02-2020, 22:50
башка кипит! »Вы почти у цели.

Например в [Files] добавить обновления:
[Files]
Source: Windows6.1-KB2533623-x64.msu; DestDir: {tmp}
Source: Windows6.1-KB2533623-x86.msu; DestDir: {tmp}

В [Run] добавить выполнение установки:
[Run]
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x86.msu /quiet /norestart; StatusMsg: Установка KB2533623
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x64.msu /quiet /norestart; StatusMsg: Установка KB253362

[Files] и [Run] связать с [Components]:
[Components]
Name: abcd_x86; Description: KB2533623 for x86; Flags: exclusive
Name: abcd_x64; Description: KB2533623 for x64; Flags: exclusive

[Files]
Source: Windows6.1-KB2533623-x64.msu; DestDir: {tmp}; Components: abcd_x64
Source: Windows6.1-KB2533623-x86.msu; DestDir: {tmp}; Components: abcd_x86

[Run]
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x86.msu /quiet /norestart; StatusMsg: Установка KB2533623; Components: abcd_x86
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x64.msu /quiet /norestart; StatusMsg: Установка KB2533623; Components: abcd_x64

[Components] связать с Check, например:
[Components]
Name: abcd_x86; Description: KB2533623 for x86; Flags: exclusive; Check: ab_x86
Name: abcd_x64; Description: KB2533623 for x64; Flags: exclusive; Check: ab_x64

Для каждого Check написать сценарий который будет проверять соответствие ОС, разрядность, наличие установленных обновлений и т.д.

Проверку обновлений осуществить через реестр, например:
HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~x86~~6.1.1.2
HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2

Вам будет легче с Check связать, чем всё в сценарии прописывать.


спросить у пользователя, мол хотите установить или нет? »На мой взгляд есть смысл показать что устанавливается, но нет смысла задавать лишние вопросы если ваша программа не работает или работает некорректно без KB2533623.

Beavimo
04-02-2020, 23:36
Nordek, огромное спасибо что откликнулся... буду разбиратся :kiss:

Beavimo
05-02-2020, 14:16
Nordek, когда я делаю вот так:


[Components]
Name: abcd_x86; Description: KB2533623 for x86; Flags: exclusive; Check: ab_x86
Name: abcd_x64; Description: KB2533623 for x64; Flags: exclusive; Check: ab_x64


инсталлятор ругается на "ab_x86", я так понимаю в секции {Code} нужно что то сделать с этим именем...
меня мучает момент а можно ли вот тут?


[Setup]
AppName=TEST
AppVerName=TEST
OutputDir=userdocs:..\Desktop
CreateAppDir=no
Uninstallable=no

[.code]
function WindowsVersion(Major, Minor: Integer): Boolean; var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result:=(Version.Major=Major) and (Version.Minor=Minor);
end;

function WindowsRevVersion: Boolean;
begin
Result:=WindowsVersion(6,1);
end;

function InitializeSetup: Boolean; var
FileName: String;
begin
if not WindowsRevVersion then
Result:=True
else begin
If IsWin64 then
If RegKeyExists(HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2') then
Result:=True// Так вот надо тут поставить чекбокс напротив "Check: ab_x64"
else
MsgBox('Для полноценной работы TEST на Windows 7'#13' Будет установлено обновление << KB2533623 >>'#13'После окончания установки ваш ПК перезагрузится!', mbInformation, MB_OK);
Result:=True
If not IsWin64 then
If RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2') then
Result:=True
else
MsgBox('Для полноценной работы TEST на Windows 7'#13' Будет установлено обновление << KB2533623 >>'#13'После окончания установки ваш ПК перезагрузится!', mbInformation, MB_OK);
Result:=True// А вот тут поставить чекбокс напротив "Check: ab_x86". Наверное я неправильно выражаюсь, может нада говорить вызвать функцию "ab_x86"
end
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:=(PageID=wpSelectComponents);
end;// Этот код прячет страницу компонентов

[Components]
Name: abcd_x86; Description: KB2533623 for x86; Check: ab_x86
Name: abcd_x64; Description: KB2533623 for x64; Check: ab_x64

[Files]
Source: C:\Windows6.1-KB2533623-x64.msu; DestDir: {tmp}; Flags: deleteafterinstall;
Source: C:\Windows6.1-KB2533623-x86.msu; DestDir: {tmp}; Flags: deleteafterinstall;

[Run]
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x86.msu /quiet /norestart; StatusMsg: Установка KB2533623_x86; Components: abcd_x86; BeforeInstall: "Sleep(2000)"
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x64.msu /quiet /norestart; StatusMsg: Установка KB2533623_x64; Components: abcd_x64; BeforeInstall: "Sleep(2000)"


опять я уперся в запуск. как из секции [code] автоматически ставить флагжки на checkbox??? я просто задолбался искать пример, хотя бы один пример :angry2::angry2::angry2:
все иду гулять башка взрывается. как всегда на последнем рывке я не знаю что делать

Nordek
05-02-2020, 19:49
инсталлятор ругается на "ab_x86" »Условные значения привёл для "примера", могут быть чем угодно: "ab_x86" или "CheckUpdx86". Лишь бы выполнялось в соответствии поставленным задачам.

Вот сляпал что-то:
[Code]
function WindowsVersion(Major, Minor: Integer): Boolean; var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result:=(Version.Major = Major);
Result:=(Version.Minor = Minor);
end;

function WindowsRevVersion: Boolean;
begin
Result:=WindowsVersion(6,1);// Далее код будет выполнятся, только если установлена система (6.1)
end;

function ab_x86: Boolean;
begin
if not WindowsRevVersion then
else begin
if not IsWin64 then begin
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~x86~~6.1.1.2') then Result:= True
end;
end;
end;

function ab_x64: Boolean;
begin
if not WindowsRevVersion then
else begin
if IsWin64 then begin
if not RegKeyExists(HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2') then Result:= True
end;
end;
end;

Смысл думаю понятен.

Beavimo
05-02-2020, 21:41
Nordek, Пока думаю как правильно организовать сие творение, но оно ска работает именно так как мне надо:jump::jump::jump:. ОГРОМНОЕ тебе человеческое СПАСИБО.... Я давно мечтал сделать подобного рода инсталлер (как с магазина), без этих картинок музыки в меню, но чтобы умный был :) Думал что Инно не потянет, а по nsis очень мало доходчивого материала в сети, забил на это дело. Пользовал Smart Install Maker, но он до ужаса кастрирован, ждал обновы, но безрезультатно, прошло много лет а обновы нет. И тут опять решил попробовать, давно мечтал научить инсталлер автоматически опредилять путь для установки, мне подсказали выход, и понеслась я зацепилса за это дело. Не знаю правильно ли но я привик изучять дело с конца, а не с начала. Потому как начинаэш сначала в момент когда ты чегото не понимаешь ты просто здаешся. А так ты ничего не понимаешь вопще но постепенно у тебя чтото получается. Ладно чот меня на творчество понесло. Спасибо за то что пошел на встречу сейчас это редкость... + Из тебя может быть не плохой учитель, умеешь заинтриговать.

Nordek
05-02-2020, 23:39
Не знаю правильно ли но я привик изучять дело с конца, а не с начала. »Когда писал инсталляторы до перехода на другую ОС: Начинал от простого (если возможно) к сложному (если не имеется возможности). А развернуть большую портянку из кода всегда наводило на ужас, к тому же заботился об отзывчивости инсталлятора (Наверняка встречали инсталляторы, в частности репаки - Которые прогружаются от 2 до xx минут).

Например нужно чтоб установилось в определённой версии (Например Windows 7) и определённой разрядности (Например 32-разрядной ОС):
[Components]
Name: "a"; Description: "A"; Check: not IsWin64; MinVersion: 0,6.1; OnlyBelowVersion: 0,6.2
- Из серии (если возможно). Проще не придумать.

Или как ваш случай: Необходимо определять наличие компонента по наличию файла (или реестр). + Нужно определение вресии Windows + Разрядности = То почему бы не организовать что-то через код. В определённых случаях "IsWin64" в коде всё-равно нужен. Если "IsWin64" туда, то почему бы туда же не переместить и определение версии.
Получается: Проще сделать 1 "; Check: xxx" чем для каждого городить по несколько.
- Из серии (если не имеется возможности)

VLADEV
06-02-2020, 00:53
Здравствуйте Уважаемые. начинаю изучать, 3 день сижу читаю, башка закипает, и что то не выходит. Не откажите помочь.
Задача простейшая (ИМХО) Наверно у меня проблема с RegQueryStringValue или головой )))

1. Есть папка 1 с файлами (как добавлять файлы - разобрался))
ее надо скопировать в папку которая указана в реестре по пути 1.
HKEY_LOCAL_MACHINE\SOFTWARE\Avid\Studio\Main Path путь № 1 прописан (т.е он есть в наличии 100%)

2. Есть папка 2 с файлами
ее надо скопировать в папку которая указана в реестре по пути 2.
HKEY_LOCAL_MACHINE\SOFTWARE\Avid\Content\Content Path путь № 2 прописан (т.е он есть в наличии 100%)

Вот в принципе пока задача в этом.
если нужен скрипт того что я наваял. могу представить.
Заранее спасибо. Питерцам могу пива налить )))
Удачи.

boss911
06-02-2020, 02:00
VLADEV

Используйте константу (http://jrsoftware.org/ishelp/topic_consts.htm) {reg:HKxx\SubkeyName,ValueName|DefaultValue}.

[Files]
Source: Folder1\*; DestDir: {reg:HKLM\SOFTWARE\Avid\Studio\Main Path|{app}\Folder1}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Folder2\*; DestDir: {reg:HKLM\SOFTWARE\Avid\Studio\Content Path|{app}\Folder2}; Flags: ignoreversion recursesubdirs createallsubdirs

Beavimo
06-02-2020, 07:29
Nordek,

[Setup]
AppId={{B5C6D58E-3D57-4255-937B-36F6B94FFD7F}
AppName=TEST
AppVerName=TEST
OutputDir=userdocs:..\Desktop
CreateAppDir=no
Uninstallable=no

[*Code]
function VersionWindows (Major, Minor: Integer): Boolean; var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result:=(Version.Major=Major) and (Version.Minor=Minor);
end;// Этот код проверяет версию Windows

function WindowsAll (): Boolean;
begin
Result:=VersionWindows(6,1);// Далее код будет выполнятся, только если установлена система (6.1)
end;// Этот код задает значение версии Windows

function Check_x86 (): Boolean;
begin
if not WindowsAll then
Result:=False
else begin
if not IsWin64 then
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2') then
if MsgBox('Для полноценной работы TEST на Windows 7'#13' Будет установлено обновление << KB2533623 >>', mbInformation, MB_OK)=IDOK then
Result:=True
end
end;// Этот код проверяет наличие обновления << KB2533623 >> на 32-ух битной Windows 7, и устанавливает это обновление при его отсутствии выводя сообщение

function Check_x64 (): Boolean;
begin
if not WindowsAll then
Result:=False
else begin
if IsWin64 then
if not RegKeyExists(HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2') then
if MsgBox('Для полноценной работы TEST на Windows 7'#13' Будет установлено обновление << KB2533623 >>', mbInformation, MB_OK)=IDOK then
Result:=True
end
end;// Этот код проверяет наличие обновления << KB2533623 >> на 64-х битной Windows 7, и устанавливает это обновление при его отсутствии выводя сообщение

function UpdateCentre (): Boolean; var
UpdateCentreDWord: Cardinal;
begin
if RegQueryDWordValue(HKLM, 'SYSTEM\CurrentControlSet\services\wuauserv', 'Start', UpdateCentreDWord) then
if UpdateCentreDWord=4 then
MsgBox('Центр Обновления Windows 7 Отключен:'#13' <<<для продолжения установки>>>'#13'Включите Центр Обновления Windows 7:'#13' <<и повторите установку еще раз>>', mbCriticalError, MB_OK)
else begin
Result:=True
end
end;// Этот код проверяет включен ли Центр Обновления на Windows 7 выводя сообщение

<event('InitializeSetup')>
function InitializeSetup2 (): Boolean;
begin
if WindowsAll then
Result:=UpdateCentre
else begin
Result:=True;
end
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:=(PageID=wpSelectComponents);
end;// Этот код прячет страницу компонентов

[Components]
Name: File_x86; Description: KB2533623 for x86; Flags: exclusive restart; Check: Check_x86
Name: File_x64; Description: KB2533623 for x64; Flags: exclusive restart; Check: Check_x64

[Files]
Source: C:\Windows6.1-KB2533623-x86.msu; DestDir: {tmp}; Flags: deleteafterinstall;
Source: C:\Windows6.1-KB2533623-x64.msu; DestDir: {tmp}; Flags: deleteafterinstall;

[Run]
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x86.msu /quiet /norestart; StatusMsg:УСТАНОВКА ОБНОВЛЕНИЯ <<< KB2533623-x86 >>>; Components: File_x86; BeforeInstall: "Sleep(3000)"
Filename: wusa.exe; Parameters: {tmp}\Windows6.1-KB2533623-x64.msu /quiet /norestart; StatusMsg:УСТАНОВКА ОБНОВЛЕНИЯ <<< KB2533623-x64 >>>; Components: File_x64; BeforeInstall: "Sleep(3000)"


вот сочинил пьеску, это четверть от всего кода, на моем ФХ-се инсталятор летает, уже сутки колдую, и все время хочется больше... разговаривать его научить))) непонятно тока как организовать установку при установленом уже на ПК обновлении KB2533623, и выключеном Центре Обновления Windows, чтобы не прекращалась установка MsgBox-ом (Центр Обновления Windows 7 Отключен <<<для продолжения установки>>>)...бла...бла...бла... но то такое надо поспать и в бой потому как я уже просто схожу с ума. идей как говорится полно тока ришения подавай))))

как думаешь реально не прибегая к сторонниму софту на Инно сделать такой инсталлер?

https://i111.fastpic.ru/big/2020/0206/96/958f2e75890332600ac54a2bd57b3f96.jpg (https://fastpic.ru/view/111/2020/0206/958f2e75890332600ac54a2bd57b3f96.jpg.html)

nik1967
06-02-2020, 21:07
как думаешь реально не прибегая к сторонниму софту на Инно сделать такой инсталлер? »

https://i111.fastpic.ru/big/2020/0206/90/b85c570d46ce497eb6408adf9dab5790.png https://i111.fastpic.ru/big/2020/0206/5d/fa42a3cb74ff0ee0cacdde3f8cb5d05d.png https://i111.fastpic.ru/big/2020/0206/1a/97940dabc3884e9c4e3dbec17df5961a.png https://i111.fastpic.ru/big/2020/0206/44/725b8977aeae509131f66ef9008a5644.png

Beavimo
06-02-2020, 21:47
nik1967, вы хотите сказать я качаю з оф сайта Инно 6.0.3, и на нем делаю такой инсталлер, музыка меня не интересует это для детей... я говорю о чистом дистрибутиве безо всяких ботв и прочей лабуды. реально зделать такой как у меня на картинке, ну хотя бы похожый?

Nordek, дружыще мож подскажешь как в один вопрс поместить сразу два или три, ну ето как "if ...... then" выходит типа "если.......тогда" я лично понимаю так а мне нужно зделать так "if яблук=5 и груш=5 then" только тогда выполнять условие.... тоисть два условия в одном вопросе.... надеюсь я понятно выражаюсь :not-me: , я когда смотрел уроки по паскалю там мелькало что то типа "case" но я так и не вребился..... нельзя ограничиватся одним if.......then

Gnom_aka_Lexander
06-02-2020, 22:09
if.......then

if ((одно условие) and (второе условие)) then

я говорю о чистом дистрибутиве безо всяких ботв и прочей лабуды.
Ботва и всякая лабуда - это подключаемые библиотеки. Они необходимы, когда необходимо большие объемы кода обрабатывать. И в плане производительности кода и в плане удобства использования. Пишется в любом случае на чистом инно, модификаций давно уже нет, лет 8 как уже. На вашей картинке у инсталла тень это либо пнг-маска, тоесть ботва, либо скин, либо прямая отрисовка средствами ОС. Это будет самая сложная часть инсталлятора. Все остальное пишется левой пяткой за 5 минут.

Beavimo
08-02-2020, 13:53
иконка на панели задач Виндовс 7 без проблем, а на 10-ке никак. как решыть?


[Setup]
AppName=ICONKA
AppVerName=ICONKA
DefaultDirName=C:\ICONKA
OutputDir=userdocs:..\Desktop

[Tasks]
Name: "taskbaricon"; Description: "Create Quick Launch icon"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[*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(ExtractFile Name(FileName)).InvokeVerb(Verb);
Result:=True;
except
ShowExceptionMessage;
end
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
if IsTaskSelected('taskbaricon') then
PinToTaskbar(ExpandConstant('{app}\ICONKA.exe'), True);
end;

[Files]
Source: "ICONKA.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs


уже все перерыл :beta:

Beavimo
08-02-2020, 23:31
кто в курсе, у меня на 10-ке в виртуальной машыне пропадает иконка удалятора из меню пуск, мож кто знает в реальной винде такая же ерунда происходит.... думаю писать из инсталлера удалятор кто таким извращался?

Beavimo
09-02-2020, 13:44
так никто и не ответил на счет ярлыка на панели задач в Windows 10, самое главное что если закрепить ярлык после инсталляции программы в ручную, то при ее удалении ярлык деинсталлируется... а на 7-ке все прекрасно работает

habib2302
09-02-2020, 14:11
Beavimo,

[code]
//PinToTaskbar
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(ExtractFile Name(FileName)).InvokeVerb(Verb);
Result := True;
except
ShowExceptionMessage;
end;
end;

//PinToStartMenu
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(ExtractFile Name(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;

Gnom_aka_Lexander
09-02-2020, 14:16
Beavimo, Папка панели задач Windows 10 находится в папке % AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar - после добавления ярлыка нужно перезапускать проводник. ответ гуглится за 2 минуты, потому и не отвечают. Да простят меня за оффтоп )

Beavimo
09-02-2020, 14:25
habib2302, я и говорю что не работает на 10-ке функция PinToTaskbar зато на 7-ке все хорошо... а вот PinToStartMenu работает прекрасно
548пост

Beavimo
09-02-2020, 14:42
Gnom_aka_Lexander, перед тем как писать проверьте ваш совет на работоспособность




© OSzone.net 2001-2012