Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование "удобняшек" на VBScript

Автор: igor andreev
Дата сообщения: 09.12.2004 18:38

Цитата:
есть ли способ скачать файл *.exe по протоколу http при помощи VBS?


sSource = "http://www.nncron.ru/download/faq.zip"
sDest = "c:\myfaq.zip"
set oHTTP = WScript.CreateObject("Microsoft.XMLHTTP")
set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
oHTTP.open "GET", sSource, False
oHTTP.send
mybody = oHTTP.responseBody
set oHTTP = nothing
sOut = ""
For i = 0 to UBound(mybody)
sOut = sOut & chrw(ascw(chr(ascb(midb(mybody,i+1,1)))))
Next
set oTS = oFSO.CreateTextFile(sDest, True)
oTS.Write sOut
oTS.Close
set oTS = Nothing
set oFSO = Nothing
WScript.Echo "Скачали!"

Прокатит с небольшими бинарными файлами(exe, zip, gif и тп), если скачивать больше 50 Кб, то быстродействие будет не ахти.

Еще, как вариант - можно предварительно разложить exe-шник на ascii-символы(эту же методу sOut = sOut & chrw(ascw(chr(ascb(midb(mybody,i+1,1))))) использовать), разместить в инете страничку, считать с нее текст и на месте "скомпилить" экзешник

Но лучше конечно для скачивания бинарных данных пользоваться нормальными консольными программами типа wget, gethttp, они это лучше умеют делать, бо для этого и создавались.
Автор: vladk1973
Дата сообщения: 21.04.2005 04:17
Доброе время суток. )
А вот приблуда есть какая-нибудь, дабы эти скрипты редактировать ?
Что -нибудь, с подсветкой синтаксиса, автоматической подстановкой и проч
Автор: Uriu
Дата сообщения: 25.04.2005 07:19
vladk1973
Я пользую PrimalScript 3.1, мне нравится. Кроме того что Вы перечислили еще може много всякого разного

Добавлено:
.
Автор: Lomster
Дата сообщения: 25.04.2005 10:33
Друзья, есть очень удобный скриптик, позволяющий в Опере, проверять текст средствами MSOffice:

Код:
' Spell-Checker for clipboard contents. Requires MS Word
' Steve Yandl, October 23, 2000
' /////////////////////////////////////////////////////////////////
'
Dim oWD, RangeOriginal, RangeCorrected, Cnt, Status
Set oWD = WScript.CreateObject("Word.Application")
oWD.Visible =false
oWD.Documents.Add
On Error Resume Next
oWD.Selection.Paste
If err.number<>0 then
MsgBox "Clipboard was Empty"
oWD.ActiveDocument.Close wdDoNotSaveChanges
oWD.Quit
Set oWD=Nothing
Set oWD=Nothing
WScript.Quit
End If
'
Set RangeOriginal=oWD.ActiveDocument.Range(0,oWD.Selection.End)
If oWD.CheckSpelling(RangeOriginal)=False Then
oWD.ActiveDocument.CheckSpelling
Set RangeCorrected = oWD.ActiveDocument.Range(0,oWD.Selection.End)
RangeCorrected.copy
'
If RangeCorrected.Words.Count>7 Then
Cnt=RangeCorrected.Words.Count
Status= "Текст, начинающийся с: "&_
RangeCorrected.Words.Item(1)&" "&RangeCorrected.Words.Item(2)&" "&_
RangeCorrected.Words.Item(3)&"....."&vbCRLF&"и заканчивающийся: ....."&_
RangeCorrected.Words.Item(Cnt-2)&" "&RangeCorrected.Words.Item(Cnt-1)&_
" "&RangeCorrected.Words.Item(Cnt)&vbCRLF&"проверен. "&_
"Исправленный текст скопирован в буфер обмена."
Else
Status= "<< "&RangeCorrected&" >>"&vbCRLF&"был проверен."&_
" Исправленный текст скопирован в буфер обмена."
End If
'
Else
Status= "Проверка завершена. Текст не содержит ошибок."
End If
'
oWD.ActiveDocument.Close wdDoNotSaveChanges
oWD.Quit
Set oWD=Nothing
MsgBox Status
Автор: vladk1973
Дата сообщения: 26.04.2005 02:59
Uriu
Я вот нашел XLNow OnScript
Пробую пока в нем
Автор: Posochov
Дата сообщения: 22.05.2005 21:34
Всем привет!
Хочу спросить, есть ли способ при помощи WSH узнать, запущено приложение или нет и при необходимости его загрузить или выгрузить.
Автор: distance
Дата сообщения: 23.05.2005 01:48
Posochov
загрузить - WshShell.Run
проверить и убить - WMI
"мягкий" способ (если gui) - послать окну комбинацию alt+f4, но может не сработать

вот из моей коллекции функций - ждать завершения процесса, если таймаут - то принудительно завершить его


Код:
function wait_process_then_kill(strProcessName, timeoutInSec)
{
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}//./root/cimv2");
var colItems;

WScript.Echo("Checking `" + strProcessName + "'");

for(var i=0; i<timeoutInSec; i++)
{
colItems = objWMIService.ExecQuery(
"SELECT * FROM Win32_Process WHERE Caption LIKE \"" +
strProcessName + "\"");

// if have no processes
var length = 0;
for(var e = new Enumerator(colItems); !e.atEnd(); e.moveNext())
length++;

if (length == 0)
{
if (i == 0)
WScript.Echo("Process not found");
else
WScript.Echo("Normal terminating");
return;
}


WScript.Sleep(1000);
WScript.Echo("Waiting to terminate " + length + " process(es): " + (timeoutInSec - i - 1));
}

for(var e = new Enumerator(colItems); !e.atEnd(); e.moveNext())
{
var p = e.item();
WScript.Echo("Terminating process: [" + fmt4(p.Handle) + "] " + p.Caption);
p.Terminate(0);
}

}
function fmt4(n)
{
if (n < 999)
n = "0" + n;

return n;
}
Автор: ghost3k
Дата сообщения: 23.05.2005 02:40
Hi all! Такая проблемка - сетка (30 pc), на машинах шары //wks1...30/dir$/programs/ - установлен стандартный набор софта - например: proga1, proga2, progaX (директории) - так вот как бы с помощью WSH тереть все что не progaX? Так сказать зачистка после рабочего дня жизнидеятельности юзеров;) Как замутить - написать - я пока в WSH не очень...
Автор: Posochov
Дата сообщения: 25.05.2005 01:09
distance

Большое спасибо за идею, WMI действительно сила, я ее сейчас вовсю ковыряю.

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

Я хочу перед подключением к интернету запускать FireWall (Outpost FireWall или Anti-Haсker Касперского) и выгружать его после выхода из интернет (за ненадобностью и просто для разгрузки компа).
А эти друзья просто так не выгружаются, Касперского даже через диспетчер задач не выгрузить, говорит нет доступа или что-то в этом роде, а Outpost вообще прописан в службах Windows.

Отсюда вопросы:
1. Что значит нет доступа при выгрузке и как с этим бороться.
2. Можноли средствами WMI запускать и останавливать службы Windows (в частности Outpost FireWall).

Надеюсь вопросы не очень бестолковые.

Буду благодарен если кто откликнется.
Автор: distance
Дата сообщения: 25.05.2005 16:08
Posochov

Цитата:
1. Что значит нет доступа при выгрузке и как с этим бороться.

Это значит, как правило, что ты пытаешся завершить сервис.
Варианты: сделать себе специальную debug-привелегию (SE_DEBUG_NAME, на скрипте imho нереализуемо)

Остановить сервис "по-человечески"
Опять на помощь приходит WMI - можно даже на другом компьютере сервисами управлять


Код:
var sRemoteComputer = "netbios-имя удаленной машинки";
var refLocator = new ActiveXObject("WbemScripting.SWbemLocator");

// имя юзера и пароль для ремотного компа
var refWMIService = refLocator.ConnectServer(sRemoteComputer, "root\\cimv2", "user", "passw");

// настройка имперсонации (блин, слово-то какое ) клиента
// константа 3 - из msdn
// Allows objects to use the credentials of the caller.
// This is the recommended impersonation level for Scripting API for WMI calls.
refWMIService.Security_.ImpersonationLevel = 3;

var col = refWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE Caption = 'Windows Time'");
var e = new Enumerator(col);
var refService = e.item();

// остановка сервиса
refService.StopService();

// по-хорошему надо бы проверить статус и дождаться остановки сервиса или ошибки,
// но лень писать смотри msdn там и так все ясно
Автор: Posochov
Дата сообщения: 25.05.2005 20:58
Народ, объясните бестолковому, что означают словечки типа "inho", "сабж" и т.п., и откуда они вообще взялись.
Заодно, если нетрудно просветите по поводу остальных распространенных слэнгов, а то приходится все время интуицию напрягать. Но это же до поры до время.

P.S.
Может быть есть смысл самостоятельную тему открыть типа:
"Компьютерный слэнг" или "Слэнг программистов".


Добавлено:
Поправляюсь, имелось в виду "imho", а не "inho".
Автор: Lomster
Дата сообщения: 25.05.2005 23:14
Posochov


Цитата:
Народ, объясните бестолковому, что означают словечки типа "inho", "сабж" и т.п., и откуда они вообще взялись.
Заодно, если нетрудно просветите по поводу остальных распространенных слэнгов, а то приходится все время интуицию напрягать. Но это же до поры до время.

Эт тебе сюда: Глупые вопросы...
Там обсуждался этот вопрос.


Цитата:
Может быть есть смысл самостоятельную тему открыть типа:
"Компьютерный слэнг" или "Слэнг программистов".

Уже есть куча подобных тем. Используй фильтры в темах, и поиск: П О И С К П О Ф О Р У М У.
Автор: Posochov
Дата сообщения: 27.05.2005 17:51
distance

Чем дальше в лес, тем больше дров.

[q][/q]

Мы всегда имеем то, что имеем, а оно не всегда подходит под какую-то версию.
О чем это я.
Anti-Haсker Касперского с службах не прописан, ни WMI Service, ни выпуклый глаз ничего там не узрели. При выгрузке диспетчером задач, говорит "Отказано в доступе".

Ну да разговор не о Касперском, а о корректной (очень умное слово) выгрузке приложения.
Про Terminate() прямо сказано, что нужно пользоваться осторожно, поскольку он может не полностью выгрузить из памяти приложение (правда как об этом узнать). Дальше больше, появилась мысль попытаться выгрузить приложение через "Shell.Applicatiom", т.е. добраться как-то до контекстного меню в трее и сказать ему "Выход". И тут возник глобальный вопрос.

Где взять информацию об объектной модели подключаемого приложения, то бишь о его методах и свойствах, в частности о "Shell.Applicatiom" (может через какой нибудь запрос в WMI). В VBA там все просто, подключил соответствующую библиотеку, и через Object Browser все видно. А то читая книжки (к примеру Борна) удивляешься когда видишь например:
"Выводим дилоговое окно Run - Shell.FileRun". Спрашивается где он это (.FileRun) нарыл.

Вообщем чем дальше в лес, тем больше дров.
А может быть я не в тот лес пошел?

Добавлено:
А где цитата, я нажимал "эту ссылку"

Автор: distance
Дата сообщения: 27.05.2005 18:25
Posochov

Цитата:
Где взять информацию об объектной модели подключаемого приложения, то бишь о его методах и свойствах, в частности о "Shell.Applicatiom" (может через какой нибудь запрос в WMI). В VBA там все просто, подключил соответствующую библиотеку, и через Object Browser все видно. А то читая книжки (к примеру Борна) удивляешься когда видишь например:
"Выводим дилоговое окно Run - Shell.FileRun". Спрашивается где он это (.FileRun) нарыл.

Windows Script 5.6 Documentation
Автор: Posochov
Дата сообщения: 29.05.2005 00:58
distance

Спасибо большое за ответы и извини за дотошность, а может быть занудство, и все же:

Вся электронная документация у меня есть, даже Microsoft Platform SDK for Windows XP SP2 с полным описанием WMI. Может быть я неправильно ею пользуюсь, но если не лень, подскажи пожайлуста поконкретней, как мне, к примеру, выйти на методы и свойства Shell.Application.
Автор: distance
Дата сообщения: 29.05.2005 02:15
Posochov
ты определись, о чем ты хочешь узнать.
ProgId "Shell.Application" - не имеет отношения к WSH. Это внешний ActiveX-объект.
Если более конкретно - из набора системных интерфейсов в shell32.dll
Узнать это можно из HKCR\CLSID. А чтобы посмотреть спиок метоов и пропертей я пользуюсь утилитой oleview, правда если не знаком с языком описания интерфейсов
(M)IDL, то будет туго. Тогда MS Access, References, View From (более точно не скажу, ибо мне и oleview хватает)
Автор: Posochov
Дата сообщения: 29.05.2005 05:32
distance

Вот теперь попал куда надо!

Запустил OLE-COM Object Viewer и на удивление довольно быстро все нашел. На первый взгляд ничего смертельного нет.
Только все же не очень понятно, что ты имел в виду, когда первый раз отослал на Windows Script 5.6 Documantation.

И что можно почитать на тему языка описания интерфейсов (M)IDL и использования OLE-COM Object Viewer.

Еще раз спасибо за поддержку.
Как то сразу светлее стало.
Автор: distance
Дата сообщения: 29.05.2005 07:10
Posochov
не разобрался, показалось что ты спрашиваешь о встроеном объекте WshShell


Цитата:
И что можно почитать на тему языка описания интерфейсов (M)IDL

Дональд Бокс "Сущность технологии COM"
Эндрю Трельсен "Модель COM и применение ATL 3.0"
и наверняка должно быть у Рождерсона (Основы COM) но эта книга у меня слишком далеко на полке лежит, лень идти проверять


Цитата:
и использования OLE-COM Object Viewer.

а какие сложности могут возникнуть с его использованием, хотя бы теоретически? наливай.. эта.. то есть запускай да юзай.
Автор: Victor_N
Дата сообщения: 30.05.2005 00:09
Как можно остановить/запустить сервис
Например

Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"\root\CIMV2",UserName,Password)
Set colItems = objWMIService.ExecQuery("Select * from Win32_Service",,48)
For Each objItem in colItems
If objItem.Name="RemoteAccess" Then
'что здесь вставить
End If
Next

а то вставлять в скрипт "net start/stop ..." как-то не кузяво.
Автор: balduran
Дата сообщения: 31.05.2005 02:43
Victor_N
objItem.StopService()

Известные мне ссылки на документацию:
Примеры .vbs скриптов
работа с Logon-скриптами
Примеры скриптов по использованию WMI:Scriptomatic


Автор: oldhuman
Дата сообщения: 08.06.2005 09:21
Victor_N

Если понадобится выгрузить приложение

Set oShell = CreateObject("WScript.Shell")
On Error Resume Next

Sub t_message(name, res)
Select Case res
case 0 WScript.Echo name & " Successful completion."
case 2 WScript.Echo name & " The user does not have access to the requested information."
case 3 WScript.Echo name & " The user does not have sufficient privilge."
case 8 WScript.Echo name & " Unknown failure."
case 9 WScript.Echo name & " The path specified does not exist."
case 21 WScript.Echo name & " The specified parameter is invalid."
Case Else WScript.Echo name & " " & res & " Refer to Win32 error code documentation."
End Select
End Sub

'-------------------
'Kill VPTray.exe
'-------------------
For each Service in GetObject("winmgmts:{impersonationLevel=impersonate}!//localhost").ExecQuery("select * from Win32_Process where Name='VPTray.exe'")
res = Service.Terminate()
Call t_message("VPTray.exe", res)
Next
Автор: Fantomas007
Дата сообщения: 08.06.2005 16:18
Можно из VBS сделать диск С общим в локалке или наоборот отключить общий доступ к нему?
Автор: pand
Дата сообщения: 08.06.2005 16:43
Извините.
Автор: Sun_Francisco
Дата сообщения: 11.06.2005 11:55
Решил я поучиться писать VBS. Написал код. Но даже сохранить его не могу. DrWeb говорит, что это у меня получился вирус модификация Trojan.MulDrop.24! Сохранил я его только в переименованном виде. Теперь не могу ни переименовать в VBS, ни запустить. Что делать?
Мой VBS делает следующее. Ищет все TTF файлы в своей папке, делает их список и пишет в файл Fontinst.ini, затем запускает на выполнение Fontinst.exe (от MS), который устанавливает в систему все шрифты TTF перечисленные в Fontinst.ini.
Вот мой код:

VBSName = "Fontinst.vbs"
FontinstEXE = "Fontinst.ini"
FontinstINI = "Fontinst.ini"
FontEXT = "ttf"
Dim arFonts(), arFiles()

Set ws = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

sPath = ScriptPath

If Not fso.FileExists(sPath + FontinstEXE) Then
MsgBox "Can't find" & vbCrLf & sPath & FontinstEXE, vbCritical, VBSName
Else
SelectFiles sPath, FontEXT, arFonts
Set objTextStream = fso.CreateTextFile(FontinstINI)
objTextStream.WriteLine "[fonts]"
For Each font In arFonts
objTextStream.WriteLine font
Next
objTextStream.Close
ws.Run sPath & FontinstEXE
End If

Set ws = Nothing
Set fso = Nothing

Function ScriptPath
ScriptPath = fso.GetParentFolderName(WScript.ScriptFullName)
If Right(ScriptPath, 1) <> "\" Then ScriptPath = ScriptPath & "\"
End Function

Sub SelectFiles(sPath, sEXT, arFiles)
On Error Resume Next
Set folder = fso.getfolder(sPath)
Set files = folder.files
For Each file In files
If LCase(fso.getextensionname(file)) = LCase(sEXT) Then
count = UBound(arFiles) + 1
Redim Preserve arFiles(count)
arFiles(count) = fso.GetFileName(file)
End If
Next
End Sub

Добавлено:
Поправка.
Вместо
FontinstEXE = "Fontinst.ini"
должно быть
FontinstEXE = "Fontinst.exe"
Автор: megamozg13
Дата сообщения: 15.07.2005 07:29
Общий привет.
Есть ли способ запускать WinAPI методы из WSH (vbs;js)?
Или оччень как надо блокировать клаву и мышь на время выполнения скрипта?
Автор: PaRser79
Дата сообщения: 15.07.2005 10:19
Аналогичный вопрос и есть ответ:
"VBS не позволяет использовать API.

Если очень нужно - можно на VB нарисовать ActiveX dll, в которой описать необходимые ф-ции, и ее использовать в VBS."

И есть ссылка на готовый ActiveX.
Автор: megamozg13
Дата сообщения: 15.07.2005 14:45
PaRser79

Цитата:
И есть ссылка на готовый ActiveX.

Тнкс!!! ПОМОГЛО.
Автор: KapralBel
Дата сообщения: 15.08.2005 16:41
Как узнать скорость Интернет соединения
Автор: RoloTomasi
Дата сообщения: 22.10.2005 10:37
[сорри ошибся]
Автор: WhiteRabbit
Дата сообщения: 21.12.2005 11:47
Подскажите please как из VBS-скрипта установить права доступа к ветке реестра.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.