Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
unreal666



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppoiuytre
все равно непонятно.
Лучше опиши цепочку вызов (вместе с параметрами) эти прог/скриптов как на текущий момент (и какой должен быть результат). И тоже самое, но как хочется.

Всего записей: 6637 | Зарегистр. 14-02-2005 | Отправлено: 18:09 22-08-2014 | Исправлено: unreal666, 18:10 22-08-2014
ppoiuytre

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее... [/more]

Всего записей: 4 | Зарегистр. 22-08-2014 | Отправлено: 18:35 22-08-2014 | Исправлено: ppoiuytre, 18:43 22-08-2014
unreal666



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppoiuytre
Эм.
Т.е. надо  
 

Цитата:
какое-то ПО -> запускает скрипт без параметров -> скрипт запрашивает параметры у какой-то службы

?
 
только непонятно нафига служба нужна именно как постоянно запущенная служба, а не обычное ПО, если ее целью будет только отдавать какие-то данные по запросу из скрипта. Т.е. до запроса она нафиг не нужна будет.
 
Добавлено:
а вообще для подобного скорее всего надо юзать stdin/stdout.

Всего записей: 6637 | Зарегистр. 14-02-2005 | Отправлено: 18:50 22-08-2014
ppoiuytre

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
unreal666
 
да, в цитате правильно написано)
 
служба нужна, ибо она проводить пересчет будет раз в 30 - 50 сек всегда когда работает сервер, на котором ее запустят.
 
а обращения из скрипта к этой службе могут быть 10ть раз в сек или раз в 2 мин, причем задержка ответа от службы критична (нет возможности реализовать функционал пересчета в самом скрипте)
 
 поэтому выбор сделан в сторону такой конфигурации (при условии что ее удастся реализовать).
 
----
пока печатал, увидел про stdin/stdout, спасибо, посмотрю

Всего записей: 4 | Зарегистр. 22-08-2014 | Отправлено: 19:02 22-08-2014
msmih



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как правильно определить начало строки?
нужно найти "начало строки & -"
vbCrLf - не всегда срабатывает
chr(13) - не всегда срабатывает
 
файл самый что ни на есть простой

Всего записей: 1192 | Зарегистр. 29-01-2006 | Отправлено: 19:45 26-08-2014
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте! Есть такой вот мудрёный юникодовский ключ реестра:
 

Код:
Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Ey4w    h-
`{{]
"D1"=dword:00000001
"D2"="54332236444D2E3C"
"D3"="54332236444D2E3C"
"R1"="B4F7879D849025AE9598938583480773176E5F04090B531A0F6C"
"R2"="53375447354D5A4C4B383B4D244B2542452826442449453D5134"

 
К сожалению, при попытке собрать портабельную сборку программы в VMware ThinApp с таким ключом невозможно (просто не собирается билд). Одно из многочисленных решений, внедрение этого ключа в виртуальный реестр готовой сборки скриптом.
 
Пока что ума хватило только на такой вариант скрипта:

Код:
Function OnFirstSandboxOwner
Origin = GetEnvironmentVariable("TS_ORIGIN")
Set WSHShell = CreateObject("Wscript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Classes\CLSID\Ey4w    h-
`{{,"
End Function

 
Где Function OnFirstSandboxOwner и End Function к самому vbs в чистом виде не относятся, скорее к применению vbs скриптов в VMware ThinApp.
 
Но, при попытке запуска, получается такая вот ошибка:
 

 
Другими словами, 75-ый символ - это где-то внутри крякозябров юникода.
 
Вопрос: Можно ли такой символ экранировать, как это делается, к примеру в PHP; обратным слешем, кавычками определённой формы с присоединением разного типа значений друг к другу, и тому подобным.

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 14:21 16-09-2014
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti473
ChrW(), UnEscape()

Код:
'http://zone.ni.com/reference/en-XX/help/370858K-01/vbs/methods/vbs_method_unescape_globalobj/
'http://zone.ni.com/reference/en-XX/help/370858K-01/vbs/methods/vbs_method_chrw_globalobj/
Wscript.echo Chr(34) & "Слово в кавычках" & Chr(34)
Wscript.echo ChrW(257) & ChrW(258) & ChrW(259) & ChrW(260) & ChrW(261)
Wscript.echo (UnEscape("Spaces%2C%20umlauts%20like%20%E4%20and%20unicode%20characters%20like%20%u65E5"))

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 15:35 16-09-2014
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks, я к сожалению далеко не знаток vbs, собственно поэтому и зашёл в эту ветку. А можете подробнее объяснить что к чему. Насколько я понял, в комментарии к скрипту, Вы дали две ссылки с двумя методами. Ниже, в скрипте, Вы применили эти методы "Unescape" и "ChrW". Первый метод декодирует юникод, второй получает символы, соответствующие коду символов юникода. Таким образом, что я получу в итоге, и как мне это поможет? Всё что я пока могу сообразить, это подставить в скрипт вместо (Слово в кавычках) символы юникода из названия ключа реестра, а echo выведет мне раскодированный вариант?

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 22:33 16-09-2014 | Исправлено: AVanti473, 22:35 16-09-2014
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti473
вы просили, как экранировать юникод символы. мне и так пишет в реестр, правда не понятно это то же самое, что вам надо или нет, т.к. через форум все символы портится.

Код:
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\CLSID\Ey4wh- `{{,\", ""
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\CLSID\Ey4wh- `{{,", "test"

 
В ошибке у вас пишет незавершенная строковая константа, т.е. нет завершающей скобки (")
http://www.script-coding.com/WSH/WshShell.html#3.9.
 

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 23:50 16-09-2014
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks Благодарю за подсказку.

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 20:58 17-09-2014
korosya

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как известно можно запустит VBScript/Jscript из батника через mshta. При этом всё записывается в одну строку. Например

Код:
mshta.exe vbscript:close(CreateObject("WScript.Shell").Popup("MessageString",0,"Title",16))
 

 
Как аналогичным образом добавить/удалить программу на taskbar в Win7/8?
Пример скрипта http://forum.ru-board.com/topic.cgi?forum=62&topic=23213&start=3940#21.
Мне надо преобразовать его в вид mshta.exe vbscript:.......

Всего записей: 1005 | Зарегистр. 19-07-2003 | Отправлено: 23:00 18-09-2014
inile

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть скрипт, находит и подсвечивает все слова, содержащие искомые символы. Как сделать, чтоб цвет подсветки расчитывался только один раз при каждом запуске, а не для каждого совпадения.  

Код:
javascript:(function(){var count=0, text, dv;text=prompt("Search phrase:", "");if(text==null || text.length==0)return;dv=document.defaultView;function searchWithinNode(node, te, len){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor='#'+Math.floor(Math.random()*16777215).toString(16);middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status="Searching for '"+text+"'...";searchWithinNode(document.body, text.toUpperCase(), text.length);window.status="Found "+count+" occurrence"+(count==1?"":"s")+" of '"+text+"'.";})();

 
Добавлено:
unreal666, то что нужно! Большое спасибо!

Всего записей: 1932 | Зарегистр. 29-06-2011 | Отправлено: 16:22 30-09-2014 | Исправлено: inile, 19:09 30-09-2014
unreal666



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
inile
типа одним цветом подсветить, а не разными?
если да, то перенести расчет в начало ф-и, типа такого

Код:
javascript:(function(){var count=0, color='#'+Math.floor(Math.random()*16777215).toString(16), text, dv;text=prompt("Search phrase:", "");if(text==null || text.length==0)return;dv=document.defaultView;function searchWithinNode(node, te, len){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor=color;middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status="Searching for '"+text+"'...";searchWithinNode(document.body, text.toUpperCase(), text.length);window.status="Found "+count+" occurrence"+(count==1?"":"s")+" of '"+text+"'.";})();

Всего записей: 6637 | Зарегистр. 14-02-2005 | Отправлено: 18:50 30-09-2014 | Исправлено: unreal666, 18:51 30-09-2014
Parazitif

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Помогите, если не трудно, допилить скрипт, который добавляет OLE-свойство в файл, отображаемое во вкладке "Особые" свойств файла.
В общем и целом, нужно чтобы при выборе группы файлов с разными названиями, каждому добавлялось свойство типа:  
Профиль XXXXXX  
, где XXXXXX - это последние 6 цифр названия файла у каждого файла разное.
 
По идее, нужно допилить вот этот скрипт, который помогли сделать на этом форуме.
Подробнее...
 
Сейчас данный скрипт добавляет файлу свойство, в котором тоже используется название файла, только полностью.
 
Заранее извиняюсь, если вопрос этот покажется глупым, просто в программировании не силён.

Всего записей: 19 | Зарегистр. 17-06-2013 | Отправлено: 11:57 11-10-2014 | Исправлено: Parazitif, 11:58 11-10-2014
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Parazitif
попробуй заменить некоторые строчки на такие

Код:
Sub AddCustomProperty
    ' remove if already exist
    For Each objProperty in objFile.CustomProperties
        If objProperty.Name = "Профиль" Then
            objProperty.Remove
            objFile.Save
        End If
    Next
    ' set new properties
    objFile.CustomProperties.Add "Профиль", 4
    objFile.Save
    Name = Split(objFile.Name, ".")
    Name6last = Right(Name(0), 6) '6 символов с конца названия файла
    Set objProperty = objFile.CustomProperties.Item("Профиль")
    objProperty.Value = Name6last
    objFile.Save
    objFile.Close
    FileChangedCount = FileChangedCount + 1
End Sub

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 21:04 11-10-2014
Parazitif

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks
 
Всё сделал, всё проверил. Работает прям как надо!)
Дай бог вам здоровья за всю уже оказанную помощь!

Всего записей: 19 | Зарегистр. 17-06-2013 | Отправлено: 19:15 13-10-2014
bmix2014

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Подскажите, каким-нибудь способом можно перехватить диалог сохранения файла из IE, и сохранить самому в нужное место?
В скрипте создаю объект    Set objIE = CreateObject("InternetExplorer.Application") Делаю objIE.Navigate на нужный URL, в браузере поднимается диалоговое окно "сохранить как ", вот его можно как-то обработать, чтобы не зависеть от пользователя? XMLHTTP не предлагать =)

Всего записей: 1 | Зарегистр. 21-10-2014 | Отправлено: 10:54 21-10-2014 | Исправлено: bmix2014, 10:55 21-10-2014
coherent

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья, нужна помощь! Стоит задача: есть процесс ipmgui.exe, который запускается с некоторой периодичностью, скажем раз в 2-3 часа, и который, когда он запустится надо остановить. Я написал такой скрипт, который запускается при старте системы:

Код:
Dim colProcessList, objProcess, ProcessName, ProcessIsRunning
 
ProcessName = "ipmgui.exe"
ProcessIsRunning = False
 
Do
  Do while not ProcessIsRunning
    Set colProcessList = Getobject("Winmgmts:").Execquery _
          ("Select * from Win32_Process Where Name ='" & ProcessName & "'")
    If colProcessList.Count > 0 Then
      ProcessIsRunning = True
    End If
    Set colProcessList = Nothing
  Loop
 
  Set colProcessList = GetObject("Winmgmts:").ExecQuery _
          ("Select * from Win32_Process Where Name ='" & ProcessName & "'")
  For Each objProcess in colProcessList
     objProcess.Terminate( )
  Next
  Set colProcessList = Nothing
Loop
 

Вроде работает, проверял на akelpad-e. "Вживую" не проверял, потому что не покидает чувство, что задачу можно решить еще проще и кошернее. Плюс я не специалист по скриптам и не сильно разбираюсь в нюансах взаимодействия с системой. Насколько корректно будет работать такой скрипт и насколько корректно он будет завершать работу при завершении работы Windows? Какие могут быть скрытые грабли? Не хочется из-за одного процесса использовать какую-то утилиту. Буду благодарен за любые подсказки!

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 19:51 01-12-2014
Ctac_Pieha

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто помочь в этом Ссылка написал там думал это можно через батник сделать, но вроде это через батник нельзя

Всего записей: 30 | Зарегистр. 15-12-2014 | Отправлено: 16:27 15-12-2014
BOBAT



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрипт vbs работает, если запускаю мышкой, если его запускает другая программа (sfx или инсталлятор) - не работает

Всего записей: 1511 | Зарегистр. 07-08-2005 | Отправлено: 01:32 28-12-2014
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru