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, обратил. К сожалению, не понял на что это влияет ?

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