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

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

Автор: alur2005
Дата сообщения: 16.04.2007 13:27
igor_andreev

спасибочки.



Тут собрал еще одну удобняшку ,выводит в текстовый файл следующую информацию.

Имя пользователя : user
Имя компьютера : computer
Вход в домен : domain
Ключ продукта :xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
ID продукта :xxxxx-OEM-xxxxxxx-xxxxx

сам файл VBS http://slil.ru/24248513

[more=Подробнее...]

'********************************************************************
'*
'* File: InfoPC.vbs
'* Created: 2007.17.04
'* Version: 1.0
'*
'********************************************************************-->

'Процедура запуска внешней программы
Set WshNetwork = WScript.CreateObject("WScript.Network")
Sub NetSend(Application, Wait)
Set WSHShell = WScript.CreateObject("WScript.Shell")
X = WSHShell.Run(Application, 0, Wait)
End Sub
'_________________________________________________________________________

'Подождем на всякий случай 5 секунд
WScript.Sleep 5000

InfoUser = "Имя пользователя : " & WshNetwork.UserName

'Chr(10) - это переход на новую строку
info = InfoUser & Chr(10)
info = info & "Имя компьютера : " & WshNetwork.ComputerName
info = info & Chr(10)
info = info & "Вход в домен : " & WshNetwork.UserDomain

'____________________________Работа с ключом Windows_____________________________________________

Set WshShell = WScript.CreateObject("WScript.Shell")
strDigitalProductId="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"
'strOffXPRU="HKLM\SOFTWARE\Microsoft\Office\10.0\Registration\{91110419-6000-11D3-8CFE-0050048383C9}\DigitalProductId"

strXPKey=GetKey(WshShell.RegRead(strDigitalProductId))
'strOffXPRUKey=GetKey(WshShell.RegRead(strOffXPRU))

'CopytoClipboard
set ie=CreateObject("internetExplorer.application")
ie.navigate "about:blank"
do until ie.readystate=4: wscript.sleep 1: loop
ie.document.parentwindow.clipboardData.setData "Text", strXPKey


'MsgBox "WinXP:"&strXPKey&chr(13)&_
'"key in clipboard"
' "OffXP:"&strOffXPRUKey

Function GetKey(rpk)

Const rpkOffset=52:i=28
szPossibleChars="BCDFGHJKMPQRTVWXY2346789"

Do 'Rep1
dwAccumulator=0 : j=14
Do
dwAccumulator=dwAccumulator*256
dwAccumulator=rpk(j+rpkOffset)+dwAccumulator
rpk(j+rpkOffset)=(dwAccumulator\24) and 255
dwAccumulator=dwAccumulator Mod 24
j=j-1
Loop While j>=0
i=i-1 : szProductKey=mid(szPossibleChars,dwAccumulator+1,1)&szProductKey
if (((29-i) Mod 6)=0) and (i<>-1) then
i=i-1 : szProductKey="-"&szProductKey
End If
Loop While i>=0 'Goto Rep1

GetKey=szProductKey
End Function
'____________________________Работа с ключом Windows ID _____________________________________________

Set SNSet = GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
for each SN in SNSet


'_________Запись значений в файл Имя пользователя,Домен,Имя компьютера,Серийный номер,ID продукт_________

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("c:\PCinfo.txt", 8, true)

file.WriteLine(info)
file.Write("Ключ продукта :")
file.WriteLine(strXPKey)
file.Write("ID продукта :")
file.WriteLine(SN.SerialNumber)
file.WriteBlankLines(2)
file.Close

next


'InfoUserSend = "net send ComputeName" & " User :" & WshNetwork.UserName & Chr(10) & " ..."
'Call NetSend(InfoUserSend, True)

[/more]


Автор: minicoder
Дата сообщения: 17.04.2007 23:54
добры время сутаг =)

подскажити код на .js
необходимо ф файле найти нужный текст и заменить иго другим ....

ПЛИЗЗЗ оч нуно =)
Автор: distance
Дата сообщения: 18.04.2007 11:28
minicoder
function ReplaceText(fileName, pattern, replacedText)
{
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var f = fso.GetFile(fileName);
    var ts = f.OpenAsTextStream(1); // 1 = ForReading
    if (!ts.AtEndOfStream)
    {
        var buf = ts.ReadAll();
        ts.Close();
        var ts = f.OpenAsTextStream(2); // 2 = ForWriting
        buf = buf.replace(pattern, replacedText);
        ts.Write(buf);
        ts.Close();
    }
}

// пример
ReplaceText("1.txt", /A/g, "B");
Автор: minicoder
Дата сообщения: 18.04.2007 12:17
distance ....... =) ОГРОМНОЕЕЕЕ СПАСИБО ВАМ !!!!!!! СПАСИБОООО =)

Добавлено:
distance ИЗИНИТИ КАНЕШ ..... как сделать чтоб заменяемый символ в вашем примере "A"
был переменной..... ReplaceText("1.txt", /A/g, "B");
с символом "B" работает как переменная если убрать кавычки а "A" ЧТОТ НИНАЮ КАГ сделать
ато получаится что фсе символы "A" заменяются ..... а мне нужно чтоб она була переменной ТАГ КАГ СИМВОЛЫ ЗАМЕНЯЕМЫЕ В ТЕКСТЕ МНОГО И ФАЙЛОФ МНОГА =)
присвоил значение к примеру
A="7777";

ПОДСКАЖИТИ ЕСИ МОНА ТАКОЕ =)

Автор: distance
Дата сообщения: 18.04.2007 14:19
minicoder
вместо заменяемого текста может быть как строка, так и регулярное выражение.
использование просто строки черевато побочными эффектами
например в такой записи:
ReplaceText("file.txt", "A", "B");
если файл file.txt содержит строку: 111AAA222
то после вызова функции там будет 111BAA222, а не 111BBB222, как можно было бы ожидать.
Поэтому надо строить регулярное выражение

var re = /что-то/g; // g = глобальная замена
var replaceTo = "заменяемый текст"; // можно использовать макроподстановку групп, подробнее - см. url
ReplaceText("file.txt", re, replaceTo);
Автор: mozers
Дата сообщения: 18.04.2007 16:39
minicoder
distance тебе все очень правильно сказал.
Если ты уверен что строка поиска не может быть истолкована как регулярное выражение, то можно подставлять эту строку при задании регулярного выражения:
Код: var re = new RegExp(find_string,"gi"); //i-игнорирование регистра
Автор: minicoder
Дата сообщения: 18.04.2007 19:16
distance & mozers ///////
=) я канеш мож надоел но я прост не шарю гг ....... тыкал тыкал .. читал читал ... неполучаится =)

напишити плиззз код сами мну тут

чтоб в начале кода задавались переменые А и В
А = "слово";
В = "слово замена";

дальши оно там чёто делаит ищит и заменяится по данным переменных =)
и заканьчюитси =)

гг =)
Автор: KillHunter
Дата сообщения: 18.04.2007 23:45
Всем доброго времени суток.Необходимо написать "удобняшку" на VBScript,которая при выходе юзера из домена копировала содержимое папки Мои документы на файл сервак в папку с именем пользователя, с заменой изменённых файлов.
Домен,под win2k3.Заранее спасибо.
Автор: minicoder
Дата сообщения: 19.04.2007 00:55
нужно ищё одна штука...
ищет текст в файле а фсё что после него удаляется

как ето на js замутить подскажите еси не трудно......

Автор: AlexStud
Дата сообщения: 17.05.2007 13:05
Есть вопрос, может не туда - тогда сорри...

Нужно подключить принтер именно из-под пользователя (win xp) не давая user'y дополнительных прав на локальную машину:

(часть logon скрипта в GP)
...
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer WHERE DeviceID = '\\\\10.101.1.11\\hp LaserJet 1160'")
If colItems.Count = 0 Then
Set objNetwork = CreateObject("WScript.Network")
objNetwork.AddWindowsPrinterConnection "\\10.101.1.11\hp LaserJet 1160"
objNetwork.SetDefaultPrinter "\\10.101.1.11\hp LaserJet 1160"
End If
...
(часть logon скрипта в GP)

С правами админа работает нормально, есессна.
Поможите, плиз.
Автор: gap5
Дата сообщения: 17.05.2007 13:57
Кстати, а ни в чей извращенный разум не приходила идея написать скрипт который бы отключал юзеру клавиатуру и мышку? Иногда надо что-то настроить через radmin, а туповатый юзер мешает...
Автор: Rush
Дата сообщения: 17.05.2007 14:27
gap5
На VBScript не знаю, а на васике писать минуту...

Код: Option Explicit

Private Declare Function blockinput Lib "user32" Alias "BlockInput" (ByVal fBlock As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Main()
Dim timeMS As Long
If Command$ <> "" Then
timeMS = Command$
blockinput True
Sleep timeMS
blockinput False
End
Else
End
End If
End Sub
Автор: megamozg13
Дата сообщения: 17.05.2007 15:02
gap5
если сеть на WinNT-подобных, проще dameware юзать.
Автор: gap5
Дата сообщения: 17.05.2007 19:30
Хочу написать считалку трафика по SNMP, задача запускать внешнюю софтину, которая опрашивает девайс, получает от него 2 переменных (входящий и исходящий трафик) и далее записывает их содержимое в файл "текущая-дата.log" в формате

<in>XXX</in>
<out>XXX</out>

Но есть один момент - девайс может перегрузиться (между опросами) и тогда значине счетчиков сбросится, по этому надо их значения с чем-то сравнивать...

Пока вижу такую процедуру:

а0)
Запускаем внешние команды "data.exe -trafficin" и "data.exe -trafficout"
Пишем их вывод (набор цифр) в переменные CUR-IN и CUR-OUT соответственно, далее смотрим:

если нет файла "prev.log" идем на а1) если он есть на б1)

а1) создаем файл "prev.log" и пишем в него значения
(1 строка) CUR-IN,
(2) CUR-OUT
(3) CURRENT-DATE
(4) 0
(5) 0
после умираем (или, если со временем не будет утечки мозгов (как с этим в vbs?), засыпаем на 5 минут и потом повторяем все с команды а0).

б1) считываем содержимое "prev.log"
1 строка в PREV-IN
2 строка в PREV-OUT
3 строка в PREV-DATE
4 строка в TODAY-IN
5 строка в TODAY-OUT

далее сравниваем - если PREV-DATE = текущей дате, то идем на в1)
если не равен текущей дате идем на а1) (т.е. как бы начинаем отсчет с нуля для новой даты)

в1)
если PREV-IN < CUR-IN, и PREV-OUT < CUR-OUT (т.е. счетчики не сбрасывались)
получаем разницу и прибавляем текущие показания, т.е. CUR-IN - PREV-IN + TODAY-IN = LOG-IN, и CUR-OUT - PREV-OUT + TODAY-OUT = LOG-OUT.

если PREV-IN > CUR-IN, и PREV-OUT > CUR-OUT (т.е. счетчики на девайсе сбрасывались)
просто восстанавливаем актуальное значение, т.е. TODAY-IN + CUR-IN = LOG-IN, TODAY-OUT + CUR-OUT = LOG-OUT

пишем в файл CURRENTDATE.log значения <in>LOG-IN</in> и <out>LOG-OUT</out> далее идем на в2)

в2) пишем значения в "prev.log"
(1строка) CUR-IN
(2) CUR-OUT
(3) CURRENTDATE
(4) LOG-IN
(5) LOG-OUT

Вроде все предусмотрел или нет?
Кому не сложно, накидайте примерный вид этого на vbs.
Автор: Feldsherus
Дата сообщения: 19.05.2007 15:00
Привет народ!
Подскажите как с помощью VBScript получить ip-адрес ADSL(dial-up) соединения в виде текстовой строки.

всем заранее огромное спасибо
Автор: AndVGri
Дата сообщения: 19.05.2007 15:52
Feldsherus
Всё-таки лень скачать vbsedit? отлавливай свой ADSL по мак-адресу

Код:
' List IP Addresses for a Computer

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set IPConfigSet = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
    WScript.Echo IPConfig.ServiceName
    WScript.Echo IPConfig.MacAddress
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
WScript.Echo IPConfig.IPAddress(i)
Next
End If
Next
Автор: Feldsherus
Дата сообщения: 19.05.2007 23:12
AndVGri Спасибо тебе огромное!!! Очень выручил!
Автор: ViSiToR
Дата сообщения: 21.05.2007 05:43
Такой вроде простой вопрос: Как проверять по условию без чувствительности к регистру букв?

К примеру хочу проверить две переменные, чтобы регистр букв не играл никакой роли:


Код: TestVar1 = "test"
TestVar2 = "tEst"

If TestVar1 = TestVar2 Then MsgBox "OK"
Автор: AndVGri
Дата сообщения: 21.05.2007 06:26
ViSiToR
If StrComp(TestVar1, TestVar2, vbTextCompare) = 0 Then MsgBox "Ok"
Автор: ViSiToR
Дата сообщения: 21.05.2007 18:26
AndVGri

Цитата:
If StrComp(TestVar1, TestVar2, vbTextCompare) = 0 Then MsgBox "Ok"

Спасибо, то что нужно.
Автор: alroy
Дата сообщения: 28.05.2007 10:45
Цикл While … Wend



While условие

тело цикла

Wend



В цикле While … Wend условие выполнения тела цикла проверяется перед началом очередной итерации. Если ( условие ) равно true, то тело цикла выполняется, в противном случае цикл завершается.
Автор: afandi
Дата сообщения: 29.05.2007 11:29
Коллеги срочно ножно узнать такую весч,

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

Автор: megamozg13
Дата сообщения: 29.05.2007 11:35
afandi

object.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
bWaitOnReturn = TRUE выставляй
Автор: afandi
Дата сообщения: 29.05.2007 12:14
т.е вы предлагаете вот так:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run("marcp.exe",3,TRUE)

Но у меня в данный момент запуск идет так:

Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("marcp.exe")
WScript.Sleep 3000
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{F10}"
WshShell.SendKeys "{RIGHT 7}"
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{DOWN 3}"
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{TAB 5}"
WshShell.SendKeys "{ENTER 2}"
Здесь эмулируется запуск вичисления в программе marcp.exe юзером.
Если я применю метод: WshShell.Run("marcp.exe",3,TRUE)
как мне переделать вышеописанный мой скрипт?

Я попитался отправить команду Alt+F4, так как в некоторых программах эта команда обрабативается программой после завершения выполнения текущей операции, но в моем случае при отправке команды Alt+F4 программа прекращает вычисления сразу и выключается.
Автор: megamozg13
Дата сообщения: 29.05.2007 12:50
afandi

Цитата:
Если я применю метод: WshShell.Run("marcp.exe",3,TRUE)

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

как вариант, использовать "Sleep" перед передачей "Alt+F4", но только если ты сможешь предугадать сколько нужно времени на вычисления...


Автор: afandi
Дата сообщения: 29.05.2007 12:58
Да я могу примерно оценить время работы программы +-5 минут погрешность. Но этот механизм не надежен к сожалениею.

В прежные годы программировал на Delphi в связи с этим вспомнил, что в сестеме программы отправляют кучу всяких систменых сообщении.

Поэтому нельзя ли например, отправить программе в процессе ее работы отправить какое либо системное сообщение на которое (например) программы ответить каким либо сообщением, и это сообщение использовать как признак того что программа еще работает и свою работу не закончила?


Автор: AndVGri
Дата сообщения: 29.05.2007 13:26
afandi

Код:
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("calc")
Do While oExec.Status = 0
WScript.Sleep 100
Loop

WScript.Echo oExec.Status
Автор: afandi
Дата сообщения: 29.05.2007 13:50
В моем случае я все таки нашел признак по которому можно определить когда программа завершила вычисления и я могу выгрузить ее через команду terminate.

В общем после завершения вчисления программа выдает окошко с текстом
И по команде WshShell.SendKeys "{TAB}" у меня выделяется весь этот текст, теперь осталось скопировать его. вот и вопрос, как ентот текст скопировать и проверить значение?
Если по каманде копирования в буфер не попадает искомый текст значить программа еще работает

так как скопировать текст из поля на котором в данный момент размещен фокус?
Автор: AndVGri
Дата сообщения: 29.05.2007 14:13
afandi
А чем тебя oExec.Status = 0 не устроила?

Цитата:


The Status property returns a value from an enumerated type.

WshRunning ( = 0)
The job is still running.

WshFinished ( = 1)
The job has completed


Цитата:
ак как скопировать текст из поля на котором в данный момент размещен фокус

Пошли ему "%A", затем "^C"
Получить скопированное
Автор: afandi
Дата сообщения: 29.05.2007 14:15
Как на WSH поместить содержимое CLIPBOARD в переменную?.
Нашел тут примерчик http://forum.developing.ru/archive/index.php/t-1448.html
//JScript

unction ReadClipboard(){
var texxt,
oIE = new ActiveXObject("InternetExplorer.Application");
oIE.navigate ("about:blank");
oIE.visible = 0;
while(oIE.Busy){ WScript.Sleep(10); }
texxt = oIE.Document.parentWindow.clipboardData.getData ("Text");
oIE.Quit();
return (texxt);
}

function WriteClipboard(mytext) {
var oIE = new ActiveXObject("InternetExplorer.Application");
oIE.navigate ("about:blank");
oIE.visible = 0;
while(oIE.Busy){ WScript.Sleep(10); }
oIE.Document.parentWindow.clipboardData.setData ("Text", mytext );
oIE.Quit();
}

А как эту кухню переделать в Wbscript?

Добавлено:


>> А чем тебя oExec.Status = 0 не устроила?
не устраивает тем что, программа которую запускаю из скрипта, сама не вырубается по заверешнию вычисления, эта задача лежит на скрипте


Добавлено:
Вот мой проблемный скрипт господа...
Set objHTM = CreateObject("htmlfile")
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("C:\Program Files\Inform-Systema\MarcSQL 1.8 MARC21\bin\marcp.exe")
WScript.Sleep 3000
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{F10}"
WshShell.SendKeys "{RIGHT 7}"
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{DOWN 3}"
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{TAB 5}"
WshShell.SendKeys "{ENTER 2}"
While Not WshExec.status = 1 'Пока программа работает....
WScript.Sleep 1000 'проверяем каждые 3 секунды
WshShell.SendKeys "{TAB}" 'Попитаемся попасть на текст
'WshShell.SendKeys "^{INS}" 'И скопировать его Ctrl+Ins
WshShell.SendKeys "^C"
'Нужно еще буфер предидущий почистит а как сделать?
strTXT = objHTM.ParentWindow.ClipboardData.GetData("text")
If strTXT <> "" Then WScript.Echo strTXT
'strTXT в этой переменной все таки не оказывается искомого текста а что то другое
Wend
'WshExec.Terminate

Добавлено:
Коллеги помогите мне разобратся

strTXT = objHTM.ParentWindow.ClipboardData.GetData("text")
If strTXT <> "" Then MsgBox strTXT

почемуто показывает текст "strTXT" а не содержимое переменной strTXT?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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