126

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Xameleon
Короче не стало. ) И на 7-ке будет та же проблема с l > 0, цикл прервётся раньше времени.

Xameleon пишет:

А у Вас в коде "MsgBox b" используется для отладки ?

Это не у меня. ))

127

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher пишет:

Я имел в виду мой код, а не данный кусок.

Ваш целиковый код работает.

Flasher пишет:

Так проверьте:

Так ошибок не возникает.
Xameleon большое спасибо - mshta заработало с

With CreateObject(""CDO.Message"").AddAttachment(""res://shell32.dll/6/337"").GetDecodedContentStream:.Type=1:B=.Read:End With

Поскольку mshta налагает ограничения на длину кода и путь я знаю заранее (C:\Program Files\Opera\Opera.exe - приведен для примера) и  будет автоматом подставляться в скрипт решил убрать проверки на версию системы за пределы mshta. Также скрипт разделяется на две части - создание ярлыка и присвоение ему прав администратора (с чего собственно все и начиналось), чтобы была возможность создавать ярлыки с и без прав администратора. В итоге получился такой скрипт для прикрепления программы к ранели задач без прав администратора:

mshta vbscript:execute("With CreateObject(""CDO.Message"").AddAttachment(""res://shell32.dll/6/337"").GetDecodedContentStream:.Type=1:B=.Read:End With:For i=1 To LenB(B):n=n+1:L=AscB(MidB(B,i,2)):If n=11 Then P=MidB(B,i+2,L*2):Exit For:End If:i=i+L*2+1:Next:For Each V In CreateObject(""Shell.Application"").NameSpace(0).ParseName(""C:\Program Files\Opera\Opera.exe"").Verbs:If V.Name=P Then V.DoIt::Exit For:End If:Next:Close")

Вроде все работает.
Насколько я понял для открепления от панели задач надо делать проверку на n=12?

Еще раз большое вам всем спасибо.

128 (изменено: Xameleon, 2017-02-15 15:51:57)

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher,

1)

Короче не стало. )

Ну немного. )

2)

И на 7-ке будет та же проблема с l > 0, цикл прервётся раньше времени.


Не понял. Почему ? Только что проверил на Win 7. Нормально отработало.

3)

Это не у меня. ))

Японский трактор ! Точно ! Прям дежавю. ))

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

129

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

koros пишет:

и путь я знаю заранее

У себя дома? Или у других, где папка Program Files меняется?

koros пишет:

решил убрать проверки на версию системы за пределы mshta

Так а где она в приведённом коде учтена? И где в нём создание ярлыка на XP?

koros пишет:

Насколько я понял для открепления от панели задач надо делать проверку на n=12?

Это риторический вопрос? wink


Xameleon пишет:

Только что проверил на Win 7. Нормально отработало

Я могу проверять только отдельно от mshta. Так вот у меня скрипт отработал вхолостую.
Точки в посте проставьте.

130

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher,

Я могу проверять только отдельно от mshta. Так вот у меня скрипт отработал вхолостую.

1) Только что проверил отдельно от mshta. Тоже сработало без проблем. O_o

Точки в посте проставьте.

2) Исполнено. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

131

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Xameleon
А.. У меня два проверочных кода. Данный следовал за предыдущим и по какой-то причине не отрабатывал. Теперь подтверждаю. Всё в порядке. smile

132

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher,

Теперь подтверждаю. Всё в порядке. smile

Гут ! ) Значит всё не зря.

Я вот только всё думаю об одном моменте.... Там под размер вроде 2 байта выделено. roll, а у меня код читает только 1 байт. Т.е по идее при определённой длине строки может быть неожиданный результат.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

133

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Xameleon
Проверил на всех mui с 7-ки, что выложил koros, проблем нет.

134 (изменено: Xameleon, 2017-02-15 16:53:55)

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher, ну для этих целей да. ) Всё отлично. Вот думаю допилить для двухбайтных.

Пока прикинул для ULONG.


Function b2un(b)
    Dim i: For i = 1 To LenB(b)
        b2un = b2un + AscB(MidB(b, i, 1)) * 2 ^ ((i - 1) * 8)
    Next
End Function

Но вдруг там будет знаковый LONG.... И тогда....

Но, пардон - это уже оффтоп в этой теме... Пойду думать в другую. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

135

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher пишет:

У себя дома? Или у других, где папка Program Files меняется?

Везде smile. Как я уже говорил - этот код нужен мне для конфигурационного файла для создания SFX 7-zip. Там вначале будет задаваться путь, а потом уже он будет использоваться для создания ярлыка. Например, путь будет задаваться, как %%T\Opera.exe. %%T - это внутренняя переменная модуля SFX 7-zip и она раскрывается, как путь, куда распаковывается содержимое архива.

Flasher пишет:

Так а где она в приведённом коде учтена?

Ну полная команда будет такова:

cmd /c VER|FIND "5.">nul||mshta vbscript:execute("With CreateObject(""CDO.Message"").AddAttachment(""res://shell32.dll/6/337"").GetDecodedContentStream:.Type=1:B=.Read:End With:For i=1 To LenB(B):n=n+1:L=AscB(MidB(B,i,2)):If n=11 Then P=MidB(B,i+2,L*2):Exit For:End If:i=i+L*2+1:Next:For Each V In CreateObject(""Shell.Application"").NameSpace(0).ParseName(""%%T\Opera.exe"").Verbs:If V.Name=P Then V.DoIt::Exit For:End If:Next:Close")

Это не окончательная запись в файле конфигурации.ю т.к.в нем надо задваивать слеши и экранировать слешами кавычки - привел в таком виде для удобства чтения.

Flasher пишет:

И где в нём создание ярлыка на XP?

На самом деле панель Quick Launch в привычном для нас виде присутствует не только в ХР, но и в системах после ХР, просто она там отключена. Создавать ярлык в Quick Launch можно штатными средствами модуля  SFX 7-zip, не смотря на версию системы и он никак не связан с ярлыком на панели задач.

Flasher пишет:

Это риторический вопрос?

Да я вроде посмотрел, какие "глаголы" считываются и в каком порядке. "Открепить от панели задач" идет вслед за "Закрепить на панели задач" - поэтому проверка на n=12. Проверил на 7 - работает. Но решил для уверенности спросить у знающих людей...

136

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

koros пишет:

На самом деле панель Quick Launch в привычном для нас виде присутствует не только в ХР, но и в системах после ХР, просто она там отключена.

Она не совсем в привычном виде. Чтобы её привести к должному виду, нужно ещё снять пару галок в меню и сдвинуть к меню Пуск, но в любом случае она останется неоткрепляемой и неизменной по числу рядов, как было ранее.

koros пишет:

Создавать ярлык в Quick Launch можно штатными средствами модуля  SFX 7-zip, не смотря на версию системы и он никак не связан с ярлыком на панели задач.

Так в прежних системах на панель задач отдельно от быстрого запуска ничего не крепилось. Логично, что там должна быть "аналогия" при установке.

Насчёт остального ясно.

137

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

koros
Кстати, до 10-ки были канонические глаголы taskbarpin и taskbarunpin (наравне с startpin и startunpin). Можно было бы сократить до:

cmd /c VER|FIND "5.">nul||mshta vbscript:execute("CreateObject(""Shell.Application"").NameSpace(&H26).ParseName(""Opera\Opera.exe"").InvokeVerb(""taskbarpin""):Close")

В своём коде сократил для разнообразия. В 10-ке какой-то хотфикс их отламывает. Советую проверить.
Про эти и другие глаголы.

138

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher
Извиняюсь, что долго не отвечал.
Проверил ваш последний код на 10 - действительно не работает. Так что придется остановиться на предыдущем варианте.
Спасибо за консультации.

139

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

koros
Понял. Ну, и на всякий случай проверьте, даст код число или нет:

MsgBox InStr(CreateObject("WScript.Shell").RegRead("HKCR\CLSID\{90AA3A4E-1CBA-4233-B8BB-535773D48449}\ImplementsVerbs"), "taskbarpin")

140

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Да этот код дает число 1.

141

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Хм. Интересно. А этот код блокнот (убрать, если есть) на таскбар не добавит?:

With GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
   .document.Application.NameSpace(&H24).ParseName("notepad.exe").InvokeVerb "taskbarpin" : .Quit
End With

См. за точками.

142

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher
Да, добавляет....

Flasher пишет:

См. за точками.

Прошу прощения.

143

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

koros
Ну, так за чем дело встало? Остаётся проверить на Опере:

mshta vbscript:Execute("Set WB=GetObject(""new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}""):WB.document.Application.NameSpace(&H26).ParseName(""Opera\Opera.exe"").InvokeVerb""taskbarpin"":WB.Quit:close")

144 (изменено: koros, 2017-03-02 12:08:10)

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher
Прошу прощения, что долго не отвечаю - сейчас в командировке и интернет доступен не регулярно.
Спасибо - так работает. Ещё вопросик: C08AFD90-F2A1-11D1-8455-00A0C91F3880 - это должно работать во всех Windows?

145

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

koros
Да. Это Shell Browser Window (подробнее) от WebBrowser2.

146 (изменено: koros, 2017-03-03 16:42:53)

Re: HTA, VBS: Ярлык на панель задач с запуском от имени администратора

Flasher и Xameleon, большое вам спасибо. В окончательном виде это применено здесь (если не сочтете за рекламу).