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

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

Автор: Sun Ray
Дата сообщения: 20.11.2007 08:51
Подскажите как вытащить от сюда значение 3 октета?
Код:
strIP = oWTSCOM.WTSQuerySessionInformation(0, -1, 14)
Автор: ViSiToR
Дата сообщения: 20.11.2007 10:48
Sun Ray

Цитата:
как вытащить от сюда значение 3 октета?

Через Split...


Код: List = "|12|23|5|16|42|17|"

IP = "192.168.17.140"
IpArray = Split(IP, ".", -1, 1)
Octet3 = IpArray(2)

If InStr(1, List, "|" & Octet3 & "|") > 0 Then WScript.Echo "OK, " & Octet3 & " is on the list."
Автор: Sun Ray
Дата сообщения: 20.11.2007 11:08
Т.е у меня это будет выглядеть вот так?

Код:
strIP = oWTSCOM.WTSQuerySessionInformation(0, -1, 14)
List = "|12|23|5|16|42|17|"
IpArray = Split(strIP, ".", -1, 1)
Octet3 = IpArray(2)

If InStr(1, List, "|" & Octet3 & "|") > 0 Then WScript.Echo "OK, " & Octet3 & " is on the list."
Автор: ViSiToR
Дата сообщения: 21.11.2007 19:46
Sun Ray

Цитата:
нужно дать определенное имя переменной, к примеру для 12 - 145, для 23 - 501, для 5 - 506, итд...

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


Код: StrIP = oWTSCOM.WTSQuerySessionInformation(0, -1, 14)
IpArray = Split(StrIP, ".", -1, 1)

ListArray1 = Array(1, 3, 5)
ListArray2 = Array(33, 0, 56)

Octet3 = IpArray(2)

FindOctet = ArraySearch(ListArray1, Octet3, 0, 1)
If FindOctet <> -1 Then WScript.Echo ListArray2(FindOctet)

Function ArraySearch(ByRef sArray, StrToFind, Part, Dimention)
RetVal = -1
For i = 0 To Ubound(sArray, Dimention)
If (Part = 1 And InStr(1, sArray(i), StrToFind) > 0) Or (Part <> 1 And CStr(sArray(i)) = CStr(StrToFind)) Then
RetVal = i
Exit For
End If
Next

ArraySearch = RetVal
End Function
Автор: Sun Ray
Дата сообщения: 22.11.2007 03:41
В общем вот что в итоге хочу получить, есть вопрос т.к. не вижу как значение выводится на экран? Разре результат поиска не RetVal ? А то в качестве переменной окружения выдается то что там написано & RetVal &.

Код: Dim strIP
Dim objWSH
Dim objUserVariables
Dim objSystemVariables
Dim RetVal
Set objWSH = CreateObject("WScript.Shell")
Set oWTSCOM = CreateObject("EOLWTSCOM.WTSCOM")
StrIP = oWTSCOM.WTSQuerySessionInformation(0, -1, 14)
IpArray = Split(StrIP, ".", -1, 1)

ListArray1 = Array(12, 1, 5)
ListArray2 = Array(11, 13, 56)

Octet3 = IpArray(2)

FindOctet = ArraySearch(ListArray1, Octet3, 0, 1)
If FindOctet <> -1 Then WScript.Echo ListArray2(FindOctet)

Function ArraySearch(ByRef sArray, StrToFind, Part, Dimention)
RetVal = -1
For i = 0 To Ubound(sArray, Dimention)
If (Part = 1 And InStr(1, sArray(i), StrToFind) > 0) Or (Part <> 1 And CStr(sArray(i)) = CStr(StrToFind))

Then
RetVal = i
Exit For
End If
Next
ArraySearch = RetVal
End Function

Set objUserVariables = objWSH.Environment("USER")
objUserVariables("NUM") = " & RetVal & "
Автор: ViSiToR
Дата сообщения: 22.11.2007 04:33
Sun Ray

Цитата:
как значение выводится на экран?

Я же в примере вывожу:

If FindOctet <> -1 Then WScript.Echo ListArray2(FindOctet)
То что выделено красным, и есть нужное значение (значение элемента в массиве).


Цитата:
Разре результат поиска не RetVal ?

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


Цитата:
в качестве переменной окружения выдается то что там написано & RetVal &

Ты неверно построил отображение переменной, даже если бы это и была наша (нужная) переменная, то кавычки там не нужны, а если и нужны (чтобы вывести и их на экран), то их нужно удваивать: """" & RetVal & """"

Вот как мне кажется то, что тебе нужно:


Код: Dim strIP, objWSH, objUserVariables, objSystemVariables

Set objWSH = CreateObject("WScript.Shell")
Set oWTSCOM = CreateObject("EOLWTSCOM.WTSCOM")

StrIP = oWTSCOM.WTSQuerySessionInformation(0, -1, 14)
IpArray = Split(StrIP, ".", -1, 1)

ListArray1 = Array(12, 1, 5)
ListArray2 = Array(11, 13, 56)

Octet3 = IpArray(2)

FindOctet = ArraySearch(ListArray1, Octet3, 0, 1)
If FindOctet <> -1 Then
Set objUserVariables = objWSH.Environment("USER")
objUserVariables("NUM") = ListArray2(FindOctet)
WScript.Echo ListArray2(FindOctet)
End If

Function ArraySearch(ByRef sArray, StrToFind, Part, Dimention)
RetVal = -1
For i = 0 To Ubound(sArray, Dimention)
If (Part = 1 And InStr(1, sArray(i), StrToFind) > 0) Or (Part <> 1 And CStr(sArray(i)) = CStr(StrToFind)) Then
RetVal = i
Exit For
End If
Next

ArraySearch = RetVal
End Function
Автор: Sun Ray
Дата сообщения: 22.11.2007 07:28
Сенк, но оказалось что массив несколько не подходит ибо в разных подсетях бывают нужны одинаковые номера, вот так сделал.

Код: Dim strIP, objWSH, objUserVariables, objSystemVariables

Set objWSH = CreateObject("WScript.Shell")
Set oWTSCOM = CreateObject("EOLWTSCOM.WTSCOM")

StrIP = oWTSCOM.WTSQuerySessionInformation(0, -1, 14)
IpArray = Split(StrIP, ".", -1, 1)
Octet3 = IpArray(2)

SELECT CASE Octet3
CASE 1
Set objUserVariables = objWSH.Environment("USER")
objUserVariables("NUM") = 11
CASE 33
Set objUserVariables = objWSH.Environment("USER")
objUserVariables("NUM") = 22
CASE 14
Set objUserVariables = objWSH.Environment("USER")
objUserVariables("NUM") = 33
CASE ELSE
WScript.Echo "or dide"
END SELECT
Автор: ViSiToR
Дата сообщения: 22.11.2007 08:07
Sun Ray

Цитата:
вот так сделал

Мне это напомнило газетную игру “Найдите различия”

Не нашёл
Автор: alur2005
Дата сообщения: 22.11.2007 10:54
а кто нибудь встречал скрипт проверки свободного места на диске "С"
Автор: jONES1979
Дата сообщения: 22.11.2007 11:09
alur2005

Код:
' Описание: Вывод на экран свойств диска C:
'*******************************************************************
'Объявляем переменные
Dim FSO,D,TotalSize,FreeSpace,s
'Создаем объект FileSystemObject
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'Создаем объект Drive для диска C:
Set D = FSO.GetDrive("C:")
s = "Информация о диске C:" & VbCrLf
'Получаем серийный номер диска
s = s &"Серийный номер: " & D.SerialNumber & VbCrLf
'Получаем метку тома диска
s = s & "Метка тома: " & D.VolumeName & VbCrLf
'Вычисляем общий объем диска в килобайтах
TotalSize = D.TotalSize/1024
s = s & "Объем: " & TotalSize & " Kb" & VbCrLf
'Вычисляем объем свободного пространства диска в килобайтах
FreeSpace = D.FreeSpace/1024
s = s & "Свободно: " & FreeSpace & " Kb" & VbCrLf
'Выводим свойства диска на экран
WScript.Echo s
Автор: alur2005
Дата сообщения: 22.11.2007 11:18
jONES1979

спасибо
Автор: ViSiToR
Дата сообщения: 22.11.2007 13:05
Кстати, для вывода информации о размере, есть вот такая функция (переписал с AutoIt'а ) :


Код: 'Байты (10 мб)
Bytes = 10 * 1024 * 1024

WScript.Echo GetDisplaySize(Bytes, 1)

Function GetDisplaySize(nBytes, iRound)
aBytes = Array(" Bytes", " KB", " MB", " GB", " TB")
For i = 4 To 1 Step -1
If nBytes >= 1024 ^ i Then
GetDisplaySize = Round(nBytes / 1024 ^ i, iRound) & aBytes(i)
Exit Function
End If
Next

GetDisplaySize = nBytes & " Bytes"
End Function
Автор: Master Bo
Дата сообщения: 27.11.2007 16:09
Здравствуйте,
подскажите, пожалуйста.

Есть VBS скрипт.
Как можно сделать, чтобы он запускался в зависимости от времени суток?
например, в 11.00 часов утра каждый день.
и чтобы у других пользователей не возникло подозрений о существовании и запуске данного скрипта.
Автор: vladk1973
Дата сообщения: 27.11.2007 16:42
Master Bo
А зашедулить то что мешает?
Автор: ViSiToR
Дата сообщения: 27.11.2007 22:34
Master Bo

Цитата:
Как можно сделать, чтобы он запускался в зависимости от времени суток?

Запланировать задание?
Но можно запустить скрипт с циклом, и выполнять то что нужно в указанное время, а запуск скрипта повесить в автозапуск...


Код: '================= Variables ===================

ExecuteTime = "11:00:00"

'================= Variables ===================


On Error Resume Next

Set WshShell = WScript.CreateObject("WScript.Shell")

'Пишем (по необходимости) в реестр, для запуска скрипта вместе с Windows.
RunKey = WshShell.RegRead ("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Service")
If RunKey <> WScript.ScriptFullName Then _
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Service", WScript.ScriptFullName, "REG_SZ"

'Запускаем вечный цикл, где будет сравниваться текущее время с указанным,
'если есть совпадение, то будет вызвана функция EventProc()

While 1
If CStr(Time) = CStr(ExecuteTime) Then EventProc()
WScript.Sleep(10)
WEnd

Function EventProc()
'Тут будет делаться что-то в 11:00:00
End Function
Автор: Master Bo
Дата сообщения: 28.11.2007 13:48
ViSiToR
Спасибо, сработало!!
Автор: ArchangelLite
Дата сообщения: 29.11.2007 20:44
Добрый День.

Хочу написать сценарий, который выбирает файл (Open Dialog или т.п.) и сохраняет в .txt файлы путь к его директории и его имя.

Заранее большое спасибо. Напишите, если знаете...
Автор: ViSiToR
Дата сообщения: 29.11.2007 22:34
ArchangelLite

Цитата:
сценарий, который выбирает файл (Open Dialog или т.п.) и сохраняет в .txt файлы путь к его директории и его имя.



Код: Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "Text Files|*.txt|All Files|*.*"
objDialog.FilterIndex = 1
objDialog.Flags = 512 'Multiselect (or use &H200)
objDialog.InitialDir = "C:\Windows"
iResult = objDialog.ShowOpen

If iResult <> 0 Then
StrFile = ""
FilesStr = objDialog.FileName
If InStr(1, FilesStr, " ", 1) > 0 Then
ArrFiles = Split(FilesStr, " ")
For i = 1 To Ubound(ArrFiles)
StrFile = ArrFiles(0) & ArrFiles(i) & VBCRLF & StrFile
Next
Else

StrFile = FilesStr
End If

DestFile = "c:\Test.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set hFile = fso.OpenTextFile(DestFile, 2, True)
hFile.Write StrFile
hFile.Close

Wscript.Echo "This writed to <" & DestFile & ">:" & VBLF & VBLF & strFile
End If
Автор: mozers
Дата сообщения: 29.11.2007 23:13
Вот еще вариант диалогового окна открытия файла:
Код: Function SelectFile
set obj = CreateObject([no]"MSComDlg.CommonDialog"[/no]) [no]'Microsoft Common Dialog Control[/no]
obj.DialogTitle=[no]"Откройте нужный Вам файл!"[/no]
obj.InitDir=[no]"C:\WINDOWS\"[/no]
obj.MaxFileSize=256
obj.ShowOpen
SelectFile=obj.FileName
End Function

WScript.Echo SelectFile
Автор: ViSiToR
Дата сообщения: 29.11.2007 23:41
mozers

Цитата:
Вот еще вариант диалогового окна открытия файла

А с подобным диалогом возможно сделать мультий-выбор файлов? я пробовал, но отображает тот же диалог что и в моём примере.
Автор: AndVGri
Дата сообщения: 30.11.2007 06:37
ViSiToR
Добавь к примеру mozers

Код:
set obj = CreateObject("MSComDlg.CommonDialog") 'Microsoft Common Dialog Control
obj.Filter = "All Files (*.*)|*.*"
obj.Flags = 512 + 524288
'...
Автор: ViSiToR
Дата сообщения: 30.11.2007 16:00
AndVGri

Цитата:
Добавь к примеру mozers

Спрасибо, но почему то возвращается только корень папки...
Автор: mozers
Дата сообщения: 30.11.2007 22:40
ViSiToR
Тут все варианты.
Автор: ViSiToR
Дата сообщения: 30.11.2007 23:12
mozers

Цитата:
Тут все варианты.

Спасибо, то что нужно.
Автор: gen4gen
Дата сообщения: 03.12.2007 00:37
Каким образом средствами VBS можно закрыть процесс? Именно закрыть, имитировав нажатие Alt+F4 или пункта меню Exit, а не просто убить? Чтобы соответственно, если это Notepad.exe например, и в нем есть не сохраненный текст, блокнот выдал подтверждение сохранить или нет.


Код:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
objProcess.Terminate(0)
Next
Автор: garniv
Дата сообщения: 03.12.2007 02:37
gen4gen
set WShell = CreateObject("WScript.Shell")
WShell.AppActivate "Блокнот", TRUE
WScript.Sleep 300
WShell.SendKeys "%{F4}"

Это очень криво, конечно, т.к. необходимо проверять открыт ли Блокнот вообще, и только в положительном случае жать "%{F4}"
Автор: gen4gen
Дата сообщения: 03.12.2007 11:26
А если приложение в трее? Или я не знаю заголовка окна, а только имя процесса?
Автор: Sun Ray
Дата сообщения: 05.12.2007 09:47
Скрипт подставляющий имя юзера из переменной среды...

Код:
Dim user
Set REObj = CreateObject("VBScript.RegExp")
user=WshShell.ExpandEnvironmentStrings("%USERNAME%")
REObj.IgnoreCase = True
REObj.Global = False
REObj.Pattern = "\n\s*LastUserName=\w*"
MyFileText = vbCrLf & FSO.OpenTextFile("conf.INI", 1, False).ReadAll
If REObj.Test(MyFileText) Then
Set REMObj = REObj.Execute(MyFileText).Item(0)
MyFileText = Left(MyFileText, REMObj.FirstIndex) & vbCrLf & LastUserName=" & user & " & Mid$(MyFileText, REMObj.FirstIndex + REMObj.Length + 1)
FSO.OpenTextFile("conf.INI", 2, False).Write Mid(MyFileText, 3)
End IfLastUserName
Автор: mozers
Дата сообщения: 05.12.2007 11:27
Sun Ray
Строки в VBS просто так не переносятся. Функции Mid$ не существет (есть Mid).
Кроме этого в скрипте полно других элементарных ошибок, возникших в результате бездумного копирования чужого кода.
Может все таки с чего нить простенького начать?... Мануалы почитать?...
Так ведь скоро вообще никто отвечать не будет...
Автор: Tipulatoid
Дата сообщения: 05.12.2007 12:20
Помогите, плиз, написать калькулятор, работающий в командной строке. Здесь есть статья по этому поводу, но автор выложил только кусок. Может, допишете остальное?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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