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 остается висеть в запущенных процессах .
Я в принципе нашел обходной путь

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 ?

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


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 пишет:

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

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

26 (изменено: Xameleon, 2017-02-09 00:53:47)

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

Flasher,
1) А, вот в чём дело. В Win 7 есть только &Закрепить в меню "Пуск" и Изъять из &меню "Пуск".
Значит, как я и думал, в зависимости от ОС надо делать выборку из разных элементов массива.

У меня на win 10 выдаёт:

Открыть с помощь&ю
Открыть с помощь&ю...
&Выбрать другое приложение
Открытие документа с помощью конкретной программы.
Открытие документа с помощью "%s".
&Выбрать приложение по умолчанию
&Поиск в Магазине
Открытие Магазина для поиска приложения
Добавление этого элемента в меню "Пуск"
Удаление этого элемента из меню "Пуск"
&Закрепить на панели задач
&Открепить от панели задач
Закрепляет это приложение на панели задач.
Открепляет это приложение с панели задач.

2) Длинного примера варианта из этого сообщения.

P.S Пофиксил размерность массива, а то лишний элемент читал. И пока не понял сколько всё-таки байт выделено под значение размера блока текста.


Function resGetStrings(dllName,id)
	'Тип необходимого нам ресурса
	Const RT_STRING	= 6
	Dim i, n, lLen
	'Создание массива для размещения элементов с запасом.
	Redim aItems(1)
	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)
			'Добавление считанного элемента в массив
			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-1)
	resGetStrings = aItems
End Function
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

27

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

Flasher пишет:

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

Наверное, вы имели в виду не после, а до Open. Я попробовал и до и после - не помогает...

Xameleon пишет:

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

Не понял, как использовать rundll32 для запуска vbs? Где можно почитать про синтакс?

вот в чём дело. В Win 7 есть только &Закрепить в меню "Пуск" и Изъять из &меню "Пуск".

Закрепить\открепить  - интересно только для Панели задач, т.к. для Пуска и Рабочего стола можно просто создать ярлык в соответствующей папке, для Панели же задач этот номер не пройдет...
И повторю свою просьбу - не могли бы вы преобразовать ваш код для запуска через mshta?

28

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

koros,

Не понял, как использовать rundll32 для запуска vbs? Где можно почитать про синтакс?

1) Это исполняемая строка. 7Z её так же выполнит как вариант с mshta.
2) Не понял вопроса. Синтаксис чего ? Синтаксис VBScript и JSсript одинаков для mshta, WScript, СScript и прочих интерпретаторов.

И повторю свою просьбу - не могли бы вы преобразовать ваш код для запуска через mshta?

Опять не понял вопроса. O_o Этот код работает в mshta так же как и в других интерпретаторах. Поясните, пожалуйста что именно требуется.

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

29

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

Xameleon
А чего там понимать? Речь идёт об обсуждаемых выше однострочниках. Вот такая якобы запись и нужна. Только неясно, зачем сейчас просить об этом, если на Win 7, например, она и в стандартном виде не работает.

30 (изменено: koros, 2017-02-09 13:57:50)

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

Xameleon
1) 2) Запускаю

mshta vbscript:Execute("msgbox(""Not XP""):Close")

- получаю msgbox.
Запускаю

rundll32.exe vbscript:Execute("msgbox(""Not XP""):Close")

- получаю ошибку. Отсюда и вопрос какой синтаксис VBScript для запуска через rundll32?

3) В mshta код записывается в одну строку и имеет ограничение на длину. Так же я не знаю как правильно записывать в mshta обращение к Function. Поэтому и прошу вас, как опытного разработчика кодов, помочь мне преобразовать ваш код в одну строку для запуска через mshta.

31 (изменено: Xameleon, 2017-02-09 13:49:34)

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

Flasher, ах вот оно что. Теперь понятнее. Благодарю. Если не затруднит - можете показать конечный вариант того, что не срабатывает ? Попробую поэкспериментировать, вдруг чего в голову придёт.

koros, понял ваш вопрос. В данном случае выполнение кода через rundll происходит чисто по причине формирования заведомо неправильного пути, что в итоге вызывает запуск функции RunHTMLApplication и передача ей в параметры последующего куска коммандной строки.


rundll32 javascript:"\..\mshtml,RunHTMLApplication ";try{execScript('MsgBox("vbscript")','vbscript')}catch(e){};close();

Вот как раз вызов execScript с вторым параметром vbscript позволяет выполнить VBScript код.

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

32

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

Xameleon
Все равно не понял, как надо запускать код через rundll32.
Покажите, пожалуйста, на примере следующего кода (только именно на vbs, а не js):

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")

33

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

Xameleon
Конечный? Выскакивает та же ошибка. В последнем коде уменьшилось число элементов массива на 1. shell32.dll.

34 (изменено: Xameleon, 2017-02-09 14:44:18)

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

koros, ну как-то так, наверное:

rundll32 javascript:"\..\mshtml,RunHTMLApplication ";try{execScript("Set wss = CreateObject('WScript.Shell'):If wss.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion') > '5.1' Then MsgBox 'Not Xp',vbCritical,'vbscript sample'","vbscript")}catch(e){};close();

В Вашем примере End With вместо End If И по идее даже в End If нет необходимости, так как это inline код.

Flasher, хм. Наверное, я размерность массива неправильно определил. Я решил допилить скрипт. Закинул сюда отдельный сэмпл для экспериментов. http://forum.script-coding.com/viewtopic.php?id=12420

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

35

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

Xameleon
То есть получается синтаксис запуска vbs через rundll32:

rundll32 javascript:"\..\mshtml,RunHTMLApplication ";try{execScript("<КОД НА VBS>,vbCritical,'vbscript sample'","vbscript")}catch(e){alert(e.description)};close();

При этом код на vbs запускается через javascript, что накладывает ограничение на длину строки кода на vbs такое же, как и призапуске кода на javascript через mshta. Я проверял экспериментальным путем (нигде не смог найти по этому информации), что допустимая длина кода (количество символов) на vbs баольше чем допустимая длина кода на javascript при запуске через mshta.
1) и 2) Ошибки признаю, но они не так важны, т.к. я код привел для примера, чтобы понять, как его запустить через rundll32.

36

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

Xameleon
По rundll32: Строка 1. Символ 240. Незавершённая строковая константа. Код 0.
Сэмпл - хорошо, но файлик-то сперва проверьте'c.

37 (изменено: Xameleon, 2017-02-11 12:05:31)

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

koros, почти

rundll32 javascript:"\..\mshtml,RunHTMLApplication ";try{execScript("Dim a","vbscript")}catch(e){};close();

Жирным выделил кусок кода, который будет исполняться как VBScript.

Flasher, пардон. Несколько раз редактил код после выкладывания. Видимо у Вас промежуточный его вариант. )

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

38

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

Xameleon
Да я каждый обновлённый вариант проверял. То же самое.

Прошу участников следить за точками в конце предложений.
Уже второй день в разных сообщениях подмечаю.

39

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

Flasher, это же не мой код... O_o. Это пример товарища koros. Вас не смутило наличие

<КОД НА VBS>

в тексте ?

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

40

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

Xameleon
Убрал второе сообщение. Не посмотрел на ник.

41 (изменено: Xameleon, 2017-02-09 15:44:17)

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

Flasher, бывает. ) А я уже обыскался. Думаю - у koros-а работает, у меня работает, где же ошибка )).

Попробовал собрать статистику по глаголам на Win XP, Win 7, Win 10:

+ открыть спойлер

Win XP

5376: Открыть с помощь&ю
5377: Открыть с помощь&ю...
5378: &Выбрать программу...
5379: Открытие документа с помощью конкретной программы.
5380: Открытие документа с помощью "%s".
5381: &Закрепить в меню "Пуск"
5382: &Изъять из меню "Пуск"
5383: Добавление этого элемента в меню "Пуск"
5384: Удаление этого элемента из меню "Пуск"

Win 7

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

Win 10

5376: Открыть с помощь&ю
5377: Открыть с помощь&ю...
5378: &Выбрать другое приложение
5379: Открытие документа с помощью конкретной программы.
5380: Открытие документа с помощью "%s".
5381: &Выбрать приложение по умолчанию
5382: &Поиск в Магазине
5383: Открытие Магазина для поиска приложения
5384: Добавление этого элемента в меню "Пуск"
5385: Удаление этого элемента из меню "Пуск"
5386: &Закрепить на панели задач
5387: &Открепить от панели задач
5388: Закрепляет это приложение на панели задач.
5389: Открепляет это приложение с панели задач.

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

42

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

Xameleon
Не знаю. Скорее это всё те же особенности версий, о которых ранее велась речь.

Что по скачанному файлу? Получилось вытащить что надо?

Попробовал собрать статистику по глаголам на ... Win 7 ...:

Статистика, завязанная на коде, я полагаю? Сам глагол-то на Win 7 имеется, выше обсуждали.

43 (изменено: Xameleon, 2017-02-09 16:17:09)

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

Flasher, с файлом есть некоторая сложность. Подсунул полный путь до него, результат - ресурс не найден. Если не путаю, то начиная с Vista (могу ошибаться) при загрузке ресурсов идёт обращение за локализованными ресурсами.
Т.е при обращении к C:\windows\system32\shell32.dll (или к сокращённому варианту shell32.dll) происходит чтение "C:\Windows\System32\ru-RU\shell32.dll.mui". Его можно посмотреть менеджером ресурсов. Там действительно лежат все строковые данные.

Если же shell32.dll находится не в system32 (как я например брал путь до каталога загрузок), то модуль чтения ресурсов не может найти mui, а следовательно и строки и поэтому выпадает с ошибкой.

Поэтому, к сожалению одного файла shell32.dll не достаточно для исследования.

Статистика, завязанная на коде, я полагаю?

Извиняюсь, не понял, что это значит.

Сам глагол-то на Win 7 имеется, выше обсуждали.

Видимо я ещё не совсем в теме. Можете пояснить, если не затруднит ?

UPD. Аааааа. Глагол &Закрепить на панели задач. Хм. Действительно. Интересно, почему скрипт его не нашёл. Видимо он в другом ресурсе.

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

44

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

Xameleon
Понял. Нет, в том же списке 337:

5376, "Открыть с помощь&ю"
5377, "Открыть с помощь&ю..."
5378, "&Выбрать программу..."
5379, "Открытие документа с помощью конкретной программы."
5380, "Открытие документа с помощью \"%s\"."
5381, "&Закрепить в меню \"Пуск\""
5382, "Изъять из &меню \"Пуск\""
5384, "Добавление этого элемента в меню \"Пуск\""
5385, "Удаление этого элемента из меню \"Пуск\""
5386, "Закрепить на &панели задач"
5387, "Открепить от &панели задач"
5388, "Закрепляет это приложение на панели задач."
5389, "Открепляет это приложение с панели задач."

45

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

Flasher, да, я тоже на машине с Win 7 проверил. Действительно там есть. Пока не понял почему не отображается. Буду изучать.

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

46

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

Xameleon
Решил ковырнуть и первым делом закомментировал:

'Проверяем, что длина не нулевая
if lLen = 0 Then Exit For

Сразу всё отобразилось. Да и в конце пару нулей. Нет смысла завершать цикл.

Добавил в скрипт упрощённый вариант получения глагола. Но с другой стороны, а не совпадают ли на Vista+ номера в коллекции? Может, есть смысл сразу (без поиска) запускать Opera.Verbs.Item(20).DoIt ?

47 (изменено: Xameleon, 2017-02-10 07:39:47)

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

Flasher, не поверите, меня 10 минут назад посетила именно такая же мысль. ) Залез на форум за кодом и увидел Ваш пост. Только там одним комментированием не обойтись. Там сдвижка счётчика должна быть, судя по Resource Hacker-у (за элементом 5382 идёт сразу 5384). ПМСМ, бред, но почему-то так.

+ открыть спойлер

5382, "Изъять из &меню \"Пуск\""
5384, "Добавление этого элемента в меню \"Пуск\""

Поправил на код ниже и обновил в теме.


....
				'Читаем первые 2 байта и получаем размер блока в байтах за ним
				lLen = AscB(MidB(.responseBody,i,2))
				'Проверяем, что длина не нулевая
				if lLen > 0 Then oDict.Add (lId-1) * 16 + n, MidB(.responseBody,i + 2,lLen * 2)
				'Наращиваем количество элементов
				n = n + 1
				'Смещение положения курсора чтения
				i = i + lLen * 2 + 1
....

Но с другой стороны, а не совпадают ли на Vista+ номера в коллекции? Может, есть смысл сразу (без поиска) запускать Opera.Verbs.Item(20).DoIt ?

Коллега, вы читаете мои мысли ? O_o Меня смущает только возможность добавленных "кастомных" глаголов, которые возможно, могут сдвинуть положение этих. К примеру - вложенные меню WinRAR. Но честно - ещё не было возможности проверить.

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

48

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

Xameleon пишет:

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

Обратите внимание здесь присутствует глагол от Classic Shell:

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

49

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

koros, обратил. К сожалению, не понял на что это влияет ?

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

50

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

Xameleon пишет:

koros, обратил. К сожалению, не понял на что это влияет ?

Это я по-поводу того, что номера в коллекции могут изменяться - мало ли какая еще программа может их сдвигать.

51 (изменено: Xameleon, 2017-02-10 12:48:59)

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

koros, ааа. Пардон. Туплю. Да, я поэтому и решил, что стоит из shell32 всё-таки дёргать. Там, по идее, сдвига ID-шников не должно быть.

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

52

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

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

Xameleon
ОК. В теме только файл на shell32.dll замените.

koros, Xameleon
Идея с упрощённым вариантом для нашего глагола ясна? Тесты на разных системах интересуют. Особенно иностранных.

53

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

Flasher,

ОК. В теме только файл на shell32.dll замените.

Благодарю. Не заметил. Сейчас пересобрал сие чудо в WSC и обновил темку.

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

54

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

Xameleon
Гуд. А по второму что?

55

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

Flasher, со вторым беда, шеф. Надо виртуалку подымать. ) Пока под рукой подходящего железа нет.

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

56

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

Xameleon
Железа или оси? Т.е. под рукой чего-то кроме XP/7 нет? Или нет системы с другой локалью?

57

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

Flasher, железа. На рабочем компе не рискую виртуалку разворачивать, да и ресурсов маловато. Под рукой для теста Win 10 Pro (RU).

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

58

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

Xameleon
Так 10-ку никто не отменял. Там работает?

59 (изменено: Xameleon, 2017-02-10 18:21:35)

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

Flasher, Не смог проверить.

1. Взял Ваш скрипт из сообщения: ссылка
2. Запустил

На экране никаких сообщений.

Поизучал на каком шаге отваливается:


If VarType(Opera) = 9 Then WSH.Quit

У меня VarType(Opera) именно 9, т.е [Nothing] и по тексту происходит выход. Хотя у меня опера установлена и ярлык ярко режет глаз на рабочем столе.

Где я косячу ?

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

60

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

Xameleon
Путь в 3 строке %ProgramFiles%\Opera\Opera.exe где-то не соответствует реальности.
Если Opera 32-битная, т.е. лежит в папке Program Files (x86), и запуск производится из 64-битного Проводника/файлменеджера, то тут и возникает проблемка, тогда путь можно на прямой заменить для теста ("C:\Program Files (x86)\ вмеcто WSS.Environment("Process")("PROGRAMFILES") & "). Просто я писал чисто под инсталлятор.

61

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

Flasher, ааа. Ясно. А у меня опера 64-битная. Поэтому и не срабатывает.

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

62

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

Xameleon
Т.е., полагается, файлменедждер, откуда производится попытка запуска, 32-хбитный? Из Проводника-то должно работать.

63 (изменено: Xameleon, 2017-02-10 19:46:19)

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

Flasher, ммм... Почему 32-битный ? Win 10 PRO x64, соответствено и exlorer 64-битный. ОС 64-битная, поэтому решил оперу 64-битную поставить. )

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

64

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

Xameleon
Т.е. скрипт запускался из Проводника? И точный путь к Opera такой же?

65 (изменено: Xameleon, 2017-02-10 20:24:28)

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

Flasher, скрипт запускал с рабочего стола. Путь, т.к Opera 64-битная и ОС 64-битная - "C:\Program Files\Opera\launcher.exe" вместо "C:\Program Files (x86)\Opera\launcher.exe". Т.е в родном, для своей разрядности, каталоге лежит.

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

66

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

Xameleon
Только речь идёт об opera.exe, а не launcher.exe.

MsgBox CreateObject("WScript.Shell").Environment("Process")("PROGRAMFILES") & "\Opera\Opera.exe"

Что возвращает такой скрипт?

67 (изменено: Xameleon, 2017-02-10 20:46:56)

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

Flasher,

---------------------------

---------------------------
C:\Program Files\Opera\Opera.exe
---------------------------
ОК   
---------------------------

Я намеренно указал "launcher.exe", т.к у меня в каталоге нет Opera.exe. Предположил, что это тоже может быть важно.

Или там должен в последствии появиться файл Opera.exe ?

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

68

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

Xameleon
Аа.. А почему его нет там? Я сам лично почти уже не пользуюсь Opera, но для проверки скачал сейчас последнюю на базе Blink и увидел рядом с launcher.exe и opera.exe. Изначально ведь обсуждался инсталлятор с opera.exe. Сам файл там никак появиться не может. После замены имени на launcher.exe тоже не срабатывает?

69

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

Немного вмешаюсь в обсуждение.
Неважно какой exe-шник пытаться прикрепить на панель задач. Можно взять любую портабельную программу, например, AkelPad и положить в папку с прстым путем, типа c:\temp. и уже с этим файлом проводить эксперименты.
Также у меня на виртуалке установленно несколько ситем (есть даже китайская 7) - могу потестировать.

70

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

koros
Так тестируйте. Вам же в первую очередь надо. Тем более, что в вашем случае путь совпадает.

71 (изменено: Xameleon, 2017-02-10 21:26:02)

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

Flasher, честно говоря не знаю. Я тоже оперой не пользуюсь. Поставил в момент начала участия в теме. Т.е, по идее, тоже самая последняя версия, взятая с opera.com. У меня версия файла launcher.exe - 43.0.2442.806. Такая же и у OperaSetup.exe, которым производил установку.

OperaSetup.exe MD5: 17d6db08410330581b1c8832a3405f07

Вот дерево в каталоге:

+ открыть спойлер

>tree /F "C:\Program Files\Opera"
Структура папок
Серийный номер тома: ACFC-B90F
C:\PROGRAM FILES\OPERA
│   installation_status.xml
│   installer_prefs.json
│   launcher.exe
│   launcher.visualelementsmanifest.xml
│   pref_default_overrides
│   Resources.pri
│   server_tracking_data

├───43.0.2442.806
│   │   d3dcompiler_47.dll
│   │   icudtl.dat
│   │   installer.exe
│   │   libEGL.dll
│   │   libGLESv2.dll
│   │   message_center_win8.dll
│   │   msvcp100.dll
│   │   msvcp140.dll
│   │   msvcr100.dll
│   │   natives_blob.bin
│   │   opera.exe
│   │   opera.pak
│   │   opera_100_percent.pak
│   │   opera_125_percent.pak
│   │   opera_150_percent.pak
│   │   opera_200_percent.pak
│   │   opera_250_percent.pak
│   │   opera_autoupdate.exe
│   │   opera_autoupdate.licenses
│   │   opera_autoupdate.version
│   │   opera_browser.dll
│   │   opera_child.dll
│   │   opera_crashreporter.exe
│   │   osmesa.dll
│   │   pgort140.dll
│   │   snapshot_blob.bin
│   │   ucrtbase.dll
│   │   vccorlib140.dll
│   │   vcruntime140.dll
│   │   win8_importing.dll
│   │
│   ├───localization
│   │       af.pak
│   │       az.pak
│   │       be.pak
│   │       bg.pak
│   │       bn.pak
│   │       ca.pak
│   │       cs.pak
│   │       da.pak
│   │       de.pak
│   │       el.pak
│   │       en-GB.pak
│   │       en-US.pak
│   │       es-419.pak
│   │       es.pak
│   │       fi.pak
│   │       fil.pak
│   │       fr-CA.pak
│   │       fr.pak
│   │       fy.pak
│   │       gd.pak
│   │       he.pak
│   │       hi.pak
│   │       hr.pak
│   │       hu.pak
│   │       id.pak
│   │       it.pak
│   │       ja.pak
│   │       kk.pak
│   │       ko.pak
│   │       lt.pak
│   │       lv.pak
│   │       me.pak
│   │       mk.pak
│   │       ms.pak
│   │       nb.pak
│   │       nl.pak
│   │       nn.pak
│   │       pa.pak
│   │       pl.pak
│   │       pt-BR.pak
│   │       pt-PT.pak
│   │       ro.pak
│   │       ru.pak
│   │       sk.pak
│   │       sr.pak
│   │       sv.pak
│   │       sw.pak
│   │       ta.pak
│   │       te.pak
│   │       th.pak
│   │       tr.pak
│   │       uk.pak
│   │       uz.pak
│   │       vi.pak
│   │       zh-CN.pak
│   │       zh-TW.pak
│   │       zu.pak
│   │
│   ├───resources
│   │   │   013E742B-287B-4228-A0B9-BD617E4E02A4.ico
│   │   │   07593226-C5C5-438B-86BE-3F6361CD5B10.ico
│   │   │   0CD5F3A0-8BF6-11E2-9E96-0800200C9A66.ico
│   │   │   1AF2CDD0-8BF3-11E2-9E96-0800200C9A66.ico
│   │   │   1CF37043-6733-479C-9086-7B21A2292DDA.ico
│   │   │   2A3F5C20-8BF5-11E2-9E96-0800200C9A66.ico
│   │   │   2F8F0E41-F521-45A4-9691-F664AFAFE67F.ico
│   │   │   3B6191A0-8BF3-11E2-9E96-0800200C9A66.ico
│   │   │   3BFDFA54-5DD6-4DFF-8B6C-C1715F306D6B.ico
│   │   │   4C95ADC1-5FD9-449D-BC75-77CA217403AE.ico
│   │   │   5BBBDD5B-EDC7-4168-9F5D-290AF826E716.ico
│   │   │   66DD4BB6-A3BA-4B11-AF7A-F4BF23E073B2.ico
│   │   │   6D3582E1-6013-429F-BB34-C75B90CDD1F8.ico
│   │   │   76C397A8-9E8E-4706-8203-BD2878E9C618.ico
│   │   │   8D754F20-8BF5-11E2-9E96-0800200C9A66.ico
│   │   │   ab_tests.json
│   │   │   AD2FD2BD-0727-4AF7-8917-AAED8627ED47.ico
│   │   │   adblocker_rules.json
│   │   │   B478FE0C-0761-41C3-946F-CD1340356039.ico
│   │   │   browser.js
│   │   │   C665D993-1B49-4C2E-962C-BEB19993BB86.ico
│   │   │   CCCED631-6DA2-4060-9824-95737E64350C.ico
│   │   │   CFCE84E5-9A95-4B3F-B8E4-3E98CF7EE6C5.ico
│   │   │   CFD4BE41-4C6D-496A-ADDB-4095DFA1DD0E.ico
│   │   │   default_localized_themes.json
│   │   │   default_partner_content.json
│   │   │   dictionaries.xml
│   │   │   ev_hashes_whitelist.bin
│   │   │   F3F34CBB-24FF-4830-9E87-1663E7A0A5EE.ico
│   │   │   F98D4D4C-8AA7-4619-A1E7-AC89B24558DD.ico
│   │   │   FDC2CCAB-E8F9-4620-91DD-B0B67285997C.ico
│   │   │   FF57F01A-0718-44B7-8A1F-8B15BC33A50B.ico
│   │   │   FFF3F819-B6CE-4DE6-B4E4-8E2618ABC0D9.ico
│   │   │   license.txt
│   │   │
│   │   └───standard_themes
│   │           darkbreeze.zip
│   │           default_theme.zip
│   │           feathers.zip
│   │           grey.zip
│   │           landscape_photo.zip
│   │           mesh.zip
│   │           reine.zip
│   │
│   └───WidevineCdm
│       └───_platform_specific
│           └───win_x64
│                   widevinecdmadapter.dll

└───Assets
        150x150Logo.scale-100.png
        150x150Logo.scale-100_contrast-white.png
        150x150Logo.scale-140.png
        150x150Logo.scale-140_contrast-white.png
        150x150Logo.scale-180.png
        150x150Logo.scale-180_contrast-white.png
        150x150Logo.scale-80.png
        150x150Logo.scale-80_contrast-white.png
        70x70Logo.scale-100.png
        70x70Logo.scale-100_contrast-white.png
        70x70Logo.scale-140.png
        70x70Logo.scale-140_contrast-white.png
        70x70Logo.scale-180.png
        70x70Logo.scale-180_contrast-white.png
        70x70Logo.scale-80.png
        70x70Logo.scale-80_contrast-white.png
        notification_default.png

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

72

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

Xameleon
Понял. Я-то её по старинке распаковывал. После установки в песочницу уже увидел, что opera в папке 43.0.2442.806.
Что после замены имени в 3-й строке? Как верно замечено, в данном случае неважно, какой exe-шник станет подопытным.

P.S.: Я бы сам в коде поменял на launcher, просто есть вероятность, что речь о Presto 12.18.1872.

73 (изменено: koros, 2017-02-10 23:17:16)

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

Flasher пишет:

Так тестируйте

Так я пока не понял что тестировать? И, судя по вашему с Xameleon обсуждению, пока не работает.
А по поводу Оперы - я пользуюсь именно Presto. Но создание ярлыка интересует меня применительно к любым exe-шникам.

74

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

koros
На скрипт я ссылался? Ссылался. Интерес к тестам проявил? Проявил. Про то, что путь для вас годный, выше написал? Написал (1, 2). Что ещё требуется?

75 (изменено: Xameleon, 2017-02-11 12:52:58)

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

Flasher,
1)

Flasher пишет:

Что после замены имени в 3-й строке?

По прежнему не работает, потому что код


Verb=Split(.ResponseBody,"")(1):.Abort

заполняет переменную Verb следующим значением:

&Выбрать другое приложение2Открытие документа с помощью конкретной программы."Открытие документа с помощью "%s". &Выбрать приложение по умолчанию&Поиск в Магазине'Открытие Магазина для поиска приложения'Добавление этого элемента в меню "Пуск"&Удаление этого элемента из меню "Пуск"

Функция Split не даёт желаемого результата, потому что в выгруженных данных нет разделителей как таковых.

Структура: [размер данных][данные][размер данных][данные]...

Под размер данных выделены 2 байта (если я правильно понял). Изучал вот тут: MSDN STRINGTABLE resource

И хотел спросить - зачем нужен вызов Abort в строке ? В нём есть необходимость ?

Кстати выяснил, что значение Method

xmlhttp.Open(Method,"res://....")

, при чтение через Res протокол игнорируется. Т.е можно задать хоть "GET" / "PUT" / "ABRACADABRA" / "?", главное не пустое значение. И последний параметр асинхронности можно опустить и не указывать.

2) По поводу нахождения оперы, подумал в двух направлениях:
а) Шарить в реестре по веткам Uninstall:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

б) Посмотрел следы установки в Reg Organizer и вроде можно зацепиться за парочку путей, но не знаю как это будет работать на старых версиях оперы, разных разрядностях ос и 32-битных / 64-битных версиях оперы и т.п. (к тому же я пока не понял, нужно ли koros-у это):


Dim oWshShell, sTmp, sValue
Set oWshShell = CreateObject("WScript.Shell")

aRegPaths = Array( _
	"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\opera.exe\", _
	"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\opera.exe\" _
)

For i = 0 to Ubound(aRegPaths)
	sValue = RegRead(aRegPaths(i))
	if sValue <> "" Then
		sTmp = sTmp & "[" & i & "][" & sValue & "]" & vbCrlf
	End if
Next

MsgBox sTmp

Function RegRead(sRegPath)
	On Error Resume Next
	RegRead = oWshShell.RegRead(sRegPath)
End Function

koros,

Неважно какой exe-шник пытаться прикрепить на панель задач.

Так в итоге то нужно именно оперу закреплять или что-то другое ? O_o

Но создание ярлыка интересует меня применительно к любым exe-шникам.

Так путь до exe модуля заранее известен или его надо сначала найти ?

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

76

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

Xameleon пишет:

Так в итоге то нужно именно оперу закреплять или что-то другое ? O_o

Нужно закреплять любые exe-шники. Опера приведена для примера.
Так путь до exe модуля заранее известен или его надо сначала найти ?
Путь известен заранее. Поэтому и предлагал использовать для тестов любой exe_шник в простой папке типа c:\temp. И надо закреплять только на панели задач, а не в Пуск или на Рабочем столе.
Спасибо.

77

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

Xameleon пишет:

Функция Split не даёт желаемого результата, потому что в выгруженных данных нет разделителей как таковых.

Фишка в том, что на 7-ке этот разделитель есть только по обе стороны от требуемого глагола. Можно увидеть в mui, что я прилагал. А в 10-ке какой текст выдаётся?:

With CreateObject("MSXML2.XMLHTTP")
	.Open "GET", "res://shell32.dll/6/337", False : .send
	MsgBox Replace(.responseBody, Chr(0), "")	
End With

Запрос обрываю на всякий случай (для высвобождения памяти).

И koros, похоже, сам тестировать ничего не хочет...

78

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

Flasher,
1) Вот:

Открыть с помощь&юОткрыть с помощь&ю...&Выбрать другое приложение2Открытие документа с помощью конкретной программы."Открытие документа с помощью "%s". &Выбрать приложение по умолчанию&Поиск в Магазине'Открытие Магазина для поиска приложения'Добавление этого элемента в меню "Пуск"&Удаление этого элемента из меню "Пуск"&Закрепить на панели задач&Открепить от панели задач*Закрепляет это приложение на панели задач.)Открепляет это приложение с панели задач.

Вот что выдаёт на Win 10. )

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

2)

Запрос обрываю на всякий случай (для высвобождения памяти).

Понял. Взял на заметку.

3)

И koros, похоже, сам тестировать ничего не хочет...

Возможно. ) Хотя мне кажется, что скорее хочет, но не совсем понимает, что именно. Сейчас задача немного прояснилась, ушли от необходимости поиска модуля оперы. Уже проще )

koros, ну вот теперь есть некоторая ясность. ) Будем думать дальше.

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

79

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

Xameleon пишет:

Вот что выдаёт на Win 10. )

Ага. Тогда так:

With CreateObject("MSXML2.XMLHTTP")
	.Open "GET", "res://shell32.dll/6/337",False:.send
	Arr = Split(.responseBody,Chr(26))
	MsgBox Arr(Ubound(Arr)-1)
End With
Xameleon пишет:

так как в ОС с другими языками он уже будет другим (раз там длина строки другая, то и блок размера данных будет содержать другие данные)

Я уже догадывался, но хотелось бы просто заглянуть в shell32.dll.mui разных локалей. Может, можно что-то упрощённое придумать, без цикла. )

Xameleon пишет:

Хотя мне кажется, что скорее хочет, но не совсем понимает, что именно.

Копирование кода по приведённой мной ссылке и его запуск нуждается в понимании? o_0

80 (изменено: Xameleon, 2017-02-11 18:47:47)

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

Flasher, сработало ! )

+ открыть спойлер

http://s.fishki.net/upload/post/201506/18/1569853/eksperimenty-himiya-4.gif

Получил: &Закрепить на панели задач

Я уже догадывался, но хотелось бы просто заглянуть в shell32.dll.mui разных локалей. Может, можно что-то упрощённое придумать, без цикла. )

Боюсь, что не прокатит, так как тогда, наерное, придётся делать цикл перебора возможных разделителей по которым вычленять эту строку. ) Но чем чёрт не шутит, может и есть какой-то ещё способ.

Копирование кода и его запуска нуждается в понимании? o_0

Не, не, я не о том. Он говорит

Так я пока не понял что тестировать? И, судя по вашему с Xameleon обсуждению, пока не работает.

Я к тому, что koros, следя за нашими исследованиями, уже понял, что пока у нас нет готового решения, которое можно было бы проверять на разных ОС, так как тот вариант, что имеется пока не срабатывает. Наверное верит нам на слово. )

koros, я правильно изложил Ваш взгляд на ситуацию ? Хотелось бы с Вашей стороны тоже увидеть предложения вариантов кода. А то, действительно, решение Вашей задачи сводится к нашему с Flasher-ом диалогу. )

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

81

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

Xameleon
Понятно, что сработало. Иначе и не могло быть. )

Xameleon пишет:

придётся делать цикл перебора возможных разделителей по которым вычленять эту строку. ) Но чем чёрт не шутит, может и есть какой-то ещё способ.

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

Xameleon пишет:

Я к тому, что koros, следя за нашими исследованиями, уже понял, что пока у нас нет готового решения, которое можно было бы проверять на разных ОС, так как тот вариант, что имеется пока не срабатывает. Наверное верит нам на слово. )

Если бы у меня не срабатывал, стал бы я править код? )) И какой критерий давал понять, что можно проверять на разных ОС, а что нет? Другой путь к opera.exe? о_0


Т.к. обсуждение приобрело смешанный характер, вынес его в отдельный топик.

82

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

Flasher,

1)

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

RegExp. Хм.... Мысль. ) Не пришло в голову. Согласен. Но это ж сколько dll-ок надо изучить, чтоб все варианты учесть ?

2)

Если бы у меня не срабатывал, стал бы я править код? )) И какой критерий давал понять, что можно проверять на разных ОС, а что нет? Другой путь к opera.exe? о_0

Не совсем понял, что Вы имеете в виду. Ну да ладно. Чего я за koros-а отвечаю. Он сам пояснит, если что. )

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

83

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

Уважаемые Flasher и Xameleon я очень сильно прошу прощения - протестировать ваши наработки я смогу только в понедельник. Я очень благодарен вам, но несколько затрудняюсь следить за ходом ваших мыслей, т.к. не являюсь специалистом по vbs. Правильно ли я понял, что вы, Flasher, свой вариант скрипта обновляете здесь, а вы, Xameleon, здесь?

84

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

koros
Пока остановимся на этом коде. Если есть возможность выложить shell32.dll.mui из соответствующих текущим локалям папок, то было бы очень кстати.

85

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

Flasher пишет:

koros
Пока остановимся на этом коде.

Правильно ли я понял, что это надо вставить в этот код?

Вот shell32.dll.mui от китайской 7.

86

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

koros
Пока не надо. Пока отдельный запуск. Кроме китайского есть ещё что-то? Из европейских желательно.

87 (изменено: koros, 2017-02-12 22:16:57)

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

Потестировал немного

Закрепить на &панели задач    8ProRus
&Закрепить на панели задач    10 Rus для 1 языка

На китайской 7 и русской ХР - ошибки:
http://savepic.ru/12870527.png
http://savepic.ru/12847999.png
Завтра попробую еще на нескольких.

88

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

koros
Лучше таки ответить на вопрос и по возможности приложить файлы.
С китайской всё и так было ясно.

И хочу заметить, что текст с ошибкой элементарно забирается по Ctrl+C из окна.
Не советую тратить ресурсы на полноэкранные скриншоты.

89

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

На работе вроде было что-то английское и немецкое. Также попросил протестировать на болгарской.
Если на работе сейчас не установлены англ. и нем. Windows могу скачать и установить на виртуалке. Скажите какие языки лучше протестировать?

90

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

koros
Да все, какие есть. Но лучше, как уже писал, их приложить к посту.
Я не уверен, но есть вероятность, что при смене языка системы (rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3) в папках локализации соответствующий языку mui там окажется. Проверьте на виртуалке.

91

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

Flasher
Оказалось, что сейчас ничего иноязычного не установлено. Скачал несколько дистрибутивов 7 и извлек из них shell32.dll.mui. Этого достаточно или надо установить эти дистрибутивы и запустить на них скрипт?

92

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

koros
Устанавливать ОС не надо. Посмотрел файлы. Похоже, дело дрянь. Во французском, например, вообще нет разделителя в нужном месте, в итальянском тоже не всё очевидно. Т.е. остаётся побайтовое чтение. Думаю, для данного случая стоит написать алгоритм чтения блока с конца. Будем думать. Но что-то меня терзают сомнения насчёт того, как оно заведётся в однострочнике, и нужно ли вообще всё это. Этот установщик сам по себе мультиязычный?

93

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

Flasher
Если это такой геморрой, то овчинка выделки не стоит. Тем более, что возможно не заведется через однострочник... Мультиязычность в файле конфигурации проще задать другим способом - подменой фразы "Закрепить на панели задач" на фразу из другого языка и созданием языковых секций.

Flasher пишет:

Этот установщик сам по себе мультиязычный?

Это конструктор для создания SFX-архивов на основе модифицированного модуля для 7-zip. Пока не требовалась мультиязычность для закрепления на панели задач. Даже не предполагал, что такое возможно без подмены маски "глагола". Но с подачи Xameleon-а заинтересовался.

Большое спасибо вам и уважаемому Xameleon-у за труды.

94 (изменено: Xameleon, 2017-02-14 19:15:24)

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

koros, Flasher
Такой вариант функции чтения строки не подходит ? Сделать его inline конечно можно, но боюсь можем в итоге уткнуться в ограничение длины строки запуска. Поэтому я бы всё-таки использовал внешний модуль кода.


MsgBox LoadResString("shell32.dll",5386)

Function LoadResString(fileName,ByVal id)
	Dim l, gid, i, n
	id = Fix(id)
	gid =  id \ 16 + 1
	With CreateObject("MSXML2.XMLHTTP")
		.Open "?","res://shell32.dll/6/" & gid:.Send
		For i = 1 to LenB(.responseBody)
			l = AscB(MidB(.responseBody,i,1))
			if (gid-1) * 16 + n = id Then LoadResString = MidB(.responseBody,i + 2,l * 2): Exit Function
			i = i + l * 2 + 1
			n = n + 1
		Next		
	End With
End Function
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

95

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

koros
При большом числе языков секции - не вариант. Я поправил скрипт. Видимо, лучше обрезать уже не получится.

96

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

Господа, по поводу вынесения кода, хотел узнать Ваше мнение о таком варианте.

Post's attachments

test.zip 813 b, 4 downloads since 2017-02-13 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

97

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

Xameleon
Так вложение файлов в распаковщик было отвергнуто.

98

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

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

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

99

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

Xameleon
Насчёт всех я бы не торопился. koros нигде об этом не писал. Тем более, зачем бы ему понадобился подобный способ c .wsc, если он банально может вызывать vbs без "костылей"?

100

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

Flasher, согласен. ) Ну поглядим, что он скажет. Вдруг ситуация изменилась.

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