1 (изменено: koros, 2017-01-31 14:35:48)

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

Попытался преобразовать скрипт изменения ярлыка для запуска через mshta:

mshta vbscript:execute("f=""C:\Users\Администратор\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Opera.lnk"":with CreateObject(""ADODB.Stream""):.Charset=""ascii"":.Type=2:.Mode=3:.Open():.Position=0:.LoadFromFile(f):CreateObject(""Scripting.FileSystemObject"").DeleteFile(f):.Position=21:.WriteText Chr(96):.Position=0:.SaveToFile f end with:close")

Но при запуске вылетает ошибка:

Настройки безопасности данного компьютера запрещают доступ к источнику данных в другом домене

Прошу помощи в написании рабочего скрипта.

2

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

koros
Прочтите правила из шапки раздела и обрамите приведённые части поста в соответствующие BBCode.

3

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

koros
Судя по тексту ошибки - сказываются ограничения зоны безопасности MSHTA. Встречный вопрос - что заставило использовать mshta для решения Вашей задачи ?

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

4

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

По поводу использования mshta - это дает возможность запускать скрипт из других скриптов (не vbs) без создания дополнительных промежуточных файлов. Конкретно в этом случае я создаю ярлык на панели задач из 7-zip SFX и мне надо, чтобы он запускал программу с правами администратора.

В отношении скрипта. Есть рабочий скрипт для перекодировки текстового файла на основе CreateObject(""ADODB.Stream""):

mshta vbscript:execute("f=CreateObject(""Scripting.FileSystemObject"").GetFile(""C:\1.txt"").OpenAsTextStream(1).ReadAll():with CreateObject(""ADODB.Stream""):.Type=2:.Mode=3:.Open():.Charset=""windows-1251"":.WriteText(f):.Position=0:.Charset=""cp866"":S=.ReadText end with:a=CreateObject(""WScript.Shell"").RegWrite(""HKLM\NewKey\Param"",S,""REG_SZ""):close")

Попробовал сделать на его основе, т.е. заменить .LoadFromFile(f) на .WriteText(f) и .SaveToFile f на S=.ReadText с последующим созданием файла с помощью CreateObject(""Scripting.FileSystemObject"").CreateTextFile. Получился такой скрипт:

mshta vbscript:execute("f=""C:\Users\Администратор\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Opera.lnk"":o=CreateObject(""Scripting.FileSystemObject"").GetFile(f).OpenAsTextStream(1).ReadAll():with CreateObject(""ADODB.Stream""):.Charset=""ascii"":.Type=2:.Mode=3:.Open():.Position=0:.WriteText(o):.Position=21:.WriteText Chr(96):.Position=0:S=.ReadText end with:a=CreateObject(""Scripting.FileSystemObject"").CreateTextFile(o,True).Write(S):close")

Ошибка не появляется, но и файл не изменяется. Если

a=CreateObject(""Scripting.FileSystemObject"").CreateTextFile(o,True).Write(S)

заменить на

a=CreateObject(""Scripting.FileSystemObject"").CreateTextFile(""c:\opera.lnk"",True).Write(S)

то c:\opera.lnk создается, но он совершенно не рабочий (/

5

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

koros пишет:

дает возможность запускать скрипт из других скриптов (не vbs)

Других - это каких?
MSHTA существенно замедляет срабатывание скрипта, поэтому рекомендуется вызывать скрипт естественным для него способом, если вызов не подразумевает рисование каких-то окон.

koros пишет:

чтобы он запускал программу с правами администратора

А что мешает сделать это, передавая WScript.exe путь к скрипту в качестве параметра? Или даже напрямую.

И наконец, почему для создания ярлыка не используется одна из документированных методик (1, 2)?

6 (изменено: koros, 2017-01-31 20:46:27)

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

Как я уже писал, скрипт мне нужен для использования в файле конфигурации 7-zip SFX. Сам ярлык на панели задач Windows старше 7 (насколько я знаю) не может быть создан с помощью документированных методик. Поэтому используется метод Verbs. В файле конфигурации 7-zip SFX записывается строка:

RunProgram="x86:hidcon:mshta vbscript:Execute(\"exe=\"\"%%T\\Opera.exe\"\":Set fs=CreateObject(\"\"Scripting.Filesystemobject\"\"):Set colVerbs=CreateObject(\"\"Shell.Application\"\").Namespace(fs.GetParentFolderName(exe)).ParseName(fs.GetFileName(exe)).Verbs:For Each objVerb in colVerbs:If Mid(objVerb.name,1,9)=\"\"Закрепить\"\" Then r=objVerb.DoIt End If:Next:close\")"

Ярлык создается, но программа не запускается, т.к. требется запуск от имени администратора Я и хочу поменять права у созданного ярлыка. При этом не хоxу создавать дополнительных файлов в архиве. Я не знаю других способов запустить скрипт vbs из  файла конфигурации кроме, как создать файл vbs и запустить его или через mshta.

7

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

koros пишет:

Сам ярлык на панели задач Windows старше 7 (насколько я знаю) не может быть создан с помощью документированных методик.

Разве на 8-ке, 10-ке ярлыки создаются не в папке %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\ ?

koros пишет:

Поэтому используется метод Verbs.

Который тоже документирован. Тем более, что есть методы прямого вызова. Кстати, если используете перебор списка меню, то желательно после Doit добавлять Exit For.

koros пишет:

не хоxу создавать дополнительных файлов в архиве.

А зря.

8

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

Flasher пишет:

Разве на 8-ке, 10-ке ярлыки создаются не в папке %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\ ?

Если просто создать в этой папке ярлык на программу, то он не будет работать. Работает только через "глагол".

Flasher пишет:

Который тоже документирован.

Спасибо. Я просто неудачно выразился - имел в виду те методы, которые указали вы в предыдущем посту. Но не в этом дело, а в том, что через Verbs нельзя задать запуск от имени администратора. Насколько я понял это нельзя задать и через InvokeVerb\InvokeVerbEx...

Flasher пишет:

Кстати, если используете перебор списка меню, то желательно после Doit добавлять Exit For.

Спасибо, учту.

Спасибо за советы, но может есть какие-нибудь мысли по моему первоначальному вопросу?

9

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

koros пишет:

Работает только через "глагол".

Ну, у меня, к примеру, этот глагол добавляет ярлык не на панель быстрого запуска, а в список закреплённых программ меню "Пуск".

Мыслей по первоначальному вопросу у меня на данный момент нет, т.к. mshta таким образом у меня не отрабатывает. Выползает окно mshta с полной записью кода в заголовке и на этом всё. Не помню, когда это началось, но каких-то особых параметров безопасности IE с рабочих пор не менял.

Всё, что  могу на данный момент предложить, это использовать более быстрый способ добавки прав админа в ярлык:

File = CreateObject("WScript.Shell").Environment("Process")("APPDATA") &_
"\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Opera.lnk"
With CreateObject("SAPI.SpFileStream") .Open File,1:.Seek 21:.Write &H20:.Close:End With

Т.е. создали его методом .Doit, далее выполняем это.
У меня и с javascript это всё не работает, но попытка не пытка:

mshta "javascript:close(S=new ActiveXObject('SAPI.SpFileStream');S.Open(new ActiveXObject('WScript.Shell').Environment('Process')('APPDATA').replace(/\\/g,'\\\\')+'\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar\\Opera.lnk',1);S.Seek(21);S.Write(0x20);S.Close())"
mshta "javascript:S=WScript.CreateObject('SAPI.SpFileStream');S.Open(WScript.CreateObject('WScript.Shell').Environment('Process')('APPDATA').replace(/\\/g,'\\\\')+'\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar\\Opera.lnk',1);S.Seek(21);S.Write(0x20);S.Close();window.close()"

10

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

Flasher пишет:

Ну, у меня, к примеру, этот глагол добавляет ярлык не на панель быстрого запуска, а в список закреплённых программ меню "Пуск".

Именно не на панель быстрого запуска (она отключена по умолчанию), а на панель задач. Не понятно, почему у вас  - в меню Пуск.

С вашей помощью у меня получилось! Огромное спасибо!
Вот такой скрипт:

mshta vbscript:execute("f=CreateObject(""WScript.Shell"").Environment(""Process"")(""APPDATA"") & ""\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Opera.lnk"":with CreateObject(""SAPI.SpFileStream""):.Open f,1:.Seek 21:.Write &H20:.Close: end with:close")

Некоторое замечание. Если создавать ярлык на панели задач методом .Doit, то его имя такое же, как описание исходного файла (FileDescription). Если создавать ярлык через ПКМ, то имя ярлыка для некоторых файлов такое же, как FileDescription, а для некоторых - только первое слово до пробела из FileDescription. Какая тут зависимость я, честно говоря, не стал отслеживать... Это так - просто наблюдение...

11

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

koros пишет:

Именно не на панель быстрого запуска (она отключена по умолчанию), а на панель задач.

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

koros пишет:

Не понятно, почему у вас  - в меню Пуск.

Вот в такой последовательности попадаются пункты со словом "Закрепить":

Закрепить в меню "Пуск" (Classic Shell)
Закрепить на &панели задач
&Закрепить в меню "Пуск"

Поэтому ваш вариант для создания ярлыка должен выглядеть так:

RunProgram="x86:hidcon:mshta vbscript:Execute(\"For Each V in CreateObject(\"\"Shell.Application\"\").Namespace(\"\"%%T\"\").ParseName(\"\"Opera.exe\"\").Verbs:If Replace(V.name,\"\"&\"\",\"\"\"\")=\"\"Закрепить на панели задач\"\" Then V.DoIt:Exit For:Next:close\")"

12

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

Flasher пишет:

Вот в такой последовательности попадаются пункты со словом "Закрепить":

Понятно - буду исправлять. Спасибо.

13 (изменено: koros, 2017-02-06 11:42:18)

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

Прошу помощи. Обнаружилась ещё одна проблема.
Как известно на ХР нет возможности закреплять на панели задач и, соответственно, ярлык в %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\ через .Doit не создается. Поэтому присвоение ему  прав для запуска от имени администратора не имеет смысла и следующая строка, соответственно, вызывает ошибку:

mshta vbscript:Execute("exe=""C:\Program Files\Opera\Opera.exe"":Set fs=CreateObject(""Scripting.Filesystemobject""):Set fo=CreateObject(""Shell.Application"").Namespace(fs.GetParentFolderName(exe)):f=""%SfxFolder26%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\""&fo.GetDetailsOf(fo.ParseName(fs.GetFileName(exe)),34)&"".lnk"":With CreateObject(""SAPI.SpFileStream""):.Open f,1:.Seek 21:.Write &H20:.Close:End With:close")

%SfxFolder26% заменяется на %AppData%.
Решил добавить проверку на наличие файла ярлыка (повторю в ХР он не создается):

mshta vbscript:Execute("exe=""C:\Program Files\Opera\Opera.exe"":Set fs=CreateObject(""Scripting.Filesystemobject""):Set fo=CreateObject(""Shell.Application"").Namespace(fs.GetParentFolderName(exe)):f=""%SfxFolder26%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\""&fo.GetDetailsOf(fo.ParseName(fs.GetFileName(exe)),34)&"".lnk"":[b]If fs.FileExists(f) Then[/b] With CreateObject(""SAPI.SpFileStream""):.Open f,1:.Seek 21:.Write &H20:.Close:End With:[b]End If[/b]:close")

На ОС старше ХР - все нормально ярлыку присваиваются требуемые права,  а на ХР - права не изменяутся, но выход из скрипта не осуществляется и mshta.exe остается висеть в запущенных процессах. И, соответственно, установка стопорится, т.к. команда считается незавершенной.
Как поправить код?

14

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

koros
Я уже писал, что до Висты панель быстрого запуска выполняла ту же функцию, что в поздних версиях выполняет кнопочный ряд панели задач, с той лишь разницей, что её можно отделять и крепить к любой стороне экрана.
Папки User Pinned\TaskBar\ там нет. Путь должен быть без этой цепочки. Ярлык на XP должен и так отрабатывать, там нет UAC.
Проблема же с выходом может быть та же, что у меня, т.е. к синтаксису скрипта это вообще может не иметь отношения.
А запись должна выглядеть как-то так:

mshta vbscript:Execute("Set WSS=CreateObject(""WScript.Shell""):If WSS.RegRead(""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"")>""5.1"" Then:With CreateObject(""SAPI.SpFileStream"") .Open ""%SfxFolder26%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\""&CreateObject(""Shell.Application"").NameSpace(0).ParseName(WSS.Environment(""Process"")(""PROGRAMFILES"")&""\Opera\Opera.exe"").ExtendedProperty(""FileDescription"")&"".lnk"",1:.Seek 21:.Write &H20:.Close:End With:close")

И скрипт создания ярлыка в моём представлении должен выполняться таким образом:

Set WSS = CreateObject("WScript.Shell")
VPlus = WSS.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion") > "5.1"
Set Opera = CreateObject("Shell.Application").NameSpace(&H26).ParseName("Opera\Opera.exe")
If VarType(Opera) = 9 Then WSH.Quit
If VPlus Then Chain = "User Pinned\TaskBar\"
Desc = Opera.ExtendedProperty("FileDescription")
Link = WSS.Environment("Process")("APPDATA") & "\Microsoft\Internet Explorer\Quick Launch\" & Chain & Desc & ".lnk"
If Not CreateObject("Scripting.FileSystemObject").FileExists(Link) Then
	If VPlus Then
 		Opera.InvokeVerb("taskbarpin")
	Else
		With WSS.CreateShortcut(Link)
			.TargetPath = Opera.Path
			.Description = Desc
			.Save
		End With
	End If
End If

15 (изменено: koros, 2017-02-07 16:03:18)

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

Flasher
Спасибо за разъяснения, но я это знаю.

Flasher пишет:

Проблема же с выходом может быть та же, что у меня

Можно об этом по-подробнее?

Flasher пишет:

А запись должна выглядеть как-то так:

Эта запись так же как и та, что приводил я, не вызывает ошибку на ХР, но mshta.exe остается висеть в запущенных процессах sad.
Я в принципе нашел обходной путь

cmd /c Ver|Find "5.">nul||mshta.....

Но для самообразования хотелось бы понять почему mshta.exe не убирается из запущенных процессов при использовании тех кодов, которые привели вы и я ранее...

16

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

koros
А то, что правила обязательны к выполнению, знаете? Особенно специально подчёркнутое. Исправляйте.

17

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

koros пишет:

Спасибо за разъяснения, но я это знаю.

Что "это"?

koros пишет:

Можно об этом по-подробнее?

Подробности изложены.

koros пишет:

Эта запись так же как и та, что приводил я

Это не так. Во-первых, у меня просто игнорируется выполнение vbs-кода на ранних версиях Windows. Во-вторых, у меня учтена папка %ProgramFiles% в зависимости от архитектуры выполняемого установщика. В-третьих, описание файла берётся не по потенциально различаемому в разных версиях номеру, а по имени свойства. Ну, и по мелочи убраны лишние объявления переменных и завершающий End If.

koros пишет:

но mshta.exe остается висеть в запущенных процессах

Эта проблема скорее связана с настройками безопасности IE. Советую ещё проверить поведение с javascript. Примеры приводил выше. Если ничего не выходит, то мой совет включить скрипты в дистрибутив и вызывать их нормальным способом остаётся в силе.

18 (изменено: koros, 2017-02-08 18:14:19)

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

Что "это"?

По поводу различия панели задач (TaskBar)  и панели быстрого запуска (Quick Launch).

Подробности изложены.

Спасибо. Я просто не понял - думал, что ваша фраза о проблеме с выходом относится к моему последнему вопросу. Извините.

Это не так. Во-первых, у меня просто игнорируется выполнение vbs-кода на ранних версиях Windows.

Это не совсем так. В вашем варианте скрипт начинает выполнятся, затем проверяется на какой системе он запущен и, при запуске на ХР, дальше команды не выполняются. Да при этом на ХР никакие действия с ярлыком не выполняются, Но при этом процесс mshta.exe остается висеть в запущенных процессах.
В остальном - полностью согласен. У меня также учитываются %ProgramFiles% и т.п. - просто я решил привести здесь более сокращенный код, чтобы просто показать проблему с mhta, которая меня интересует.

убраны ... и завершающий End If

Ваш пример с mhta без завершающго End If на ХР не работает.

Эта проблема скорее связана с настройками безопасности IE. Советую ещё проверить поведение с javascript.

Я никакой спициалист в javascript, поэтому не знаю, как в нем организовать проверку на ХР. Но это и не важно, т.к. для моих целей javascript не подходит из-за того, что в нем допустимая длина строки в mshta меньше, чем в vbs и постоянно надо конвертировать слеши в путях.
Не знаю насчет настроек безопасности IE, но если упростить скрипт следующим образом

mshta vbscript:Execute("Set WSS=CreateObject(""WScript.Shell""):If WSS.RegRead(""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"")>""5.1"" Then:msgbox(""Not XP""):End With:close")

, то скрипт отрабатывает так как надо - на ХР msbox не появляется и mshta кратковременно появляется в запущенных процессах и исчезает из них.
Если же вместо

msgbox(""Not XP"")

будет

With CreateObject(""SAPI.SpFileStream"") .Open ""%SfxFolder26%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\""&CreateObject(""Shell.Application"").NameSpace(0).ParseName(WSS.Environment(""Process"")(""PROGRAMFILES"")&""\Opera\Opera.exe"").ExtendedProperty(""FileDescription"")&"".lnk"",1:.Seek 21:.Write &H20:.Close:End With

, то с ярлыком, естественно, ничего не будет происходить (да его и нет), но mshta останется висеть в запущенных процессах. Если же виноваты настройки безопасности IE, то почему же они так реагируют на разные куски кода, которые всё равно не выполняются по условию?

Если ничего не выходит, то мой совет включить скрипты в дистрибутив и вызывать их нормальным способом остаётся в силе.

Спасибо. Решение, которое я нашел для данной ситуации я уже привел, но просто хотелось бы разобраться c причинами такого поведения mshta.

19

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

koros пишет:

По поводу различия панели задач (TaskBar)  и панели быстрого запуска (Quick Launch).

Ну, так в скрипте это учтено?

koros пишет:

Это не совсем так. В вашем варианте скрипт начинает выполнятся, затем проверяется на какой системе он запущен и, при запуске на ХР, дальше команды не выполняются.

Ну, это уже придирки. Речь о результирующей части кода, конечно.

koros пишет:

Ваш пример с mhta без завершающго End If на ХР не работает.

Так он там по другим причинам не работает. Или зафиксированы несрабатывания на поздних версиях?

koros пишет:

Если же вместо ... будет

А ничего, что там лишний End With на конце?

koros пишет:

Если же виноваты настройки безопасности IE, то почему же они так реагируют на разные куски кода, которые всё равно не выполняются по условию?

Достаточно сложно выяснить влияние каждого пункта безопасности, связанного с ActiveX, на работу разных версий mshta/IE/Windows. Нужно долго и усердно сидеть и экспериментировать.

20

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

Flasher пишет:

Ну, так в скрипте это учтено?

Да, конечно. Я привел только часть, чтобы продемонстрировать затык с mshta.

Flasher пишет:

Так он там по другим причинам не работает. Или зафиксированы несрабатывания на поздних версиях?


Если добавить End If, то на ХР работает. На более поздних версиях - не так важно, поскольку требуется запускать скрипт на различных версиях и, поскольку ХР требует End If, я рассматривал скрипт с End If.

Flasher пишет:

А ничего, что там лишний End With на конце?

Я прошу прощения - описался здесь, когда набивал пост. Естественно, проверял длинный и короткий вариант с End If вместо End With. Главное то, что короткий вариант работает нормально, а длинный - оставляет висеть mshta в процессах.

Flasher пишет:

Достаточно сложно выяснить влияние каждого пункта безопасности, связанного с ActiveX, на работу разных версий mshta/IE/Windows. Нужно долго и усердно сидеть и экспериментировать.

Ну это не имеет смысла ради данной задачи. Тем более, что решение уже есть...

Спасибо.

21 (изменено: Xameleon, 2017-02-09 12:03:10)

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

Пардоньте за вторжение господа.

Хотел предложить для универсальности читать имена глаголов из ресурсов библиотеки shell32.dll.
В английской версии ОС ведь там нерусские значения.


Dim items
Dim PIN_VERB_NAME
Dim UNPIN_VERB_NAME

items = resGetStrings("shell32.dll","337")

PIN_VERB_NAME = items(10)

UNPIN_VERB_NAME = items(11)

MsgBox PIN_VERB_NAME

MsgBox UNPIN_VERB_NAME

Function resGetStrings(dllName,id)
	'Тип необходимого ресурса
	Const RT_STRING	= 6
	Dim i, n, lLen
	'Создание массива для размещения элементов с запасом, чтобы не делать Redim на каждом шаге
	Redim aItems(100)
	With CreateObject("MSXML2.XMLHTTP")
		'Открытие ресурсов библиотеки
		.Open "GET","res://" & dllName & "/" & RT_STRING & "/" & id, False:.send
		'Перебор содержимого responseBody
		For i = 1 to LenB(.responseBody)
			'Чтение первых 2-ух байт и получение последующего размер блока в байтах за ним
			lLen = AscB(MidB(.responseBody,i,2))
			'Проверка длины блока
			if lLen = 0 Then Exit For
			'Проверка достаточности размера массива
			if n > Ubound(aItems) Then Redim Preserve aItems(n + 10)
			'Добавление считанного элемента в массив
			aItems(n) = MidB(.responseBody,i + 2,lLen * 2)
			'Смещение положения курсора чтения
			i = i + lLen * 2 + 1
			'Наращивание счётчика элементов массива
			n = n + 1
		Next
	End With
	'Обрезка массива до нужного размера
	if n < Ubound(aItems) Then Redim Preserve aItems(n): resGetStrings = aItems
End Function

А по поводу висящего mshta - не уверен, но может такой вариант поможет ?


rundll32 javascript:"\..\mshtml,RunHTMLApplication ";try{execScript('MsgBox("vbscript")','vbscript')}catch(e){};close();
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

22

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

Xameleon пишет:

Хотел предложить для универсальности читать имена глаголов из ресурсов библиотеки shell32.dll.

Спасибо. Можно ли это записать в формате mshta?

Xameleon пишет:

А по поводу висящего mshta - Не уверен, но может такой вариант поможет ?

Честно говоря - ничего в этом примере не понял... Что делает этот скрипт?

23

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

koros пишет:

Если добавить End If, то на ХР работает.

Тогда ясно.

koros пишет:

Главное то, что короткий вариант работает нормально, а длинный - оставляет висеть mshta в процессах.

А если после Open двоеточие добавить?


Xameleon
Запуск первого кода:

Line: 8
Char: 1
Error: Индекс выходит за пределы допустимого диапазона: '[number: 10]'
Code: 800A0009

На второй я даже не знаю как реагировать. Ну, так, например, у меня тоже работает:

mshta "javascript:close(new ActiveXObject("WScript.Shell").PoPup("Тест",1.4))"
mshta "javascript:new ActiveXObject("WScript.Shell").PoPup("Тест",1.4);window.close()"

24 (изменено: Xameleon, 2017-02-08 22:42:05)

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

Flasher, благодарю за тестирование ). К сожалению первый код ваял только что и проверить смог только на Win 7 и Win 10. А что у вас за ОС ? XP ? smile

Можете показать, что выдаст такой вариант ?


items = resGetStrings("shell32.dll","337")

MsgBox Join(items,vbCrlf)

Предполагаю, что это как раз потому что в XP нет этих пунктов меню (10-ого и 11-ого элемента массива).

По поводу второго кода -
1) Это тоже тестовая заготовка. Хотел опробовать Ваш пример, но к сожалению не смог добиться его срабатывания. Поставил оперу, запустил скрипт - тишина. На панели иконка не появилась. Отладить пока не успел. Сегодня попробую подробнее изучить.
2) Предположил, что при сборке inline кода с вызовом через rundll получится избавиться от проблемы повисания. Сам не проверял, потому что опять же не успел отладить срабатывание Вашего примера у себя и понять в чём причина несрабатывания.

koros, это пример альтернативного выполнения js / vbs кода без использования mshta.exe.

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

25

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

Xameleon пишет:

А что у вас за ОС ?
Можете показать, что выдаст такой вариант ?

Win 7 x86.

Открыть с помощь&ю
Открыть с помощь&ю...
&Выбрать программу...
Открытие документа с помощью конкретной программы.
Открытие документа с помощью "%s".
&Закрепить в меню "Пуск"
Изъять из &меню "Пуск"

MsgBox Ubound(items) показывает 7.

Xameleon пишет:

не успел отладить срабатывание Вашего примера у себя

Какого именно?