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

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

Автор: Xein
Дата сообщения: 12.02.2008 09:20
Set objUser = GetObject _
("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")

objUser.Put "streetAddress", "Building 43" & _
VbCrLf & "One Microsoft Way"
objUser.Put "l", "Redmond"
objUser.Put "st", "Washington"
objUser.Put "postalCode", "98053"
objUser.Put "c", "US"
objUser.Put "postOfficeBox", "2222"
objUser.SetInfo

Как применить этот скрипт для всех пользователей домена?
Автор: titris
Дата сообщения: 12.02.2008 18:57
ViSiToR
titris
Если я верно понял, скрипт должен работать циклом, запускать определённую программу, ждать 1.5 м, закрывать её, и так по кругу?

Нет,к сожалению не так ты понял,скрипт должен только закрывать программу,если она запущена в Windows-через полторы минуты,если запущена другая программа,прописанная в скрипте,дожен закрыть и ее.Ничего по циклу там нет,просто в случае открытия программа должна закрыться и так до ребута системы
Автор: ViSiToR
Дата сообщения: 12.02.2008 22:07
titris

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

После чего? полторы минуты должно пройти после закрытия первой программы?


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

Без цикла этого не добиться

Попытка #2:


Код: Program = "SomeProgram.exe"

While True
    WScript.Sleep 300
    
    If ProcessExists("Notepad.exe") Then
        ProcessClose("Notepad.exe")
        
        WScript.Sleep 90 * 1000 '90 секунд
        
        If ProcessExists(Program) Then ProcessClose(Program)
    End If
WEnd

Function ProcessExists(ProcessName)
    Set Processes = GetObject("winmgmts://localhost")
    Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")
    For Each Proc In myProcEnum
        If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then
            ProcessExists = True
            Exit Function
        End If
    Next
    ProcessExists = False
End Function

Function ProcessClose(ProcessName)
    Set Processes = GetObject("winmgmts://localhost")
    Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")
    For Each Proc In myProcEnum
        If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then
            Proc.Terminate
        End If
    Next
End Function
Автор: titris
Дата сообщения: 12.02.2008 22:24
Ай,спасибо,ViSiToR,буду пробовать.А будет ли это работать не только со стандартными программами Windows? Имеется ввиду,например xnview.nero,e.t.c?
Автор: ViSiToR
Дата сообщения: 13.02.2008 00:38
titris

Цитата:
будет ли это работать не только со стандартными программами Windows? Имеется ввиду,например xnview.nero


С сервисами? не думаю, для сервиса нужна немного другая функция...


Код: iSrvPID = ServiceExists("xnview.nero", 0)

If iSrvPID <> False Then MsgBox "Ok, <xnview.nero> service runing (PID: " & iSrvPID & ")."

Function ServiceExists(ServiceName, iPartial)
    Set oServices = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set ServiceEnum = oServices.ExecQuery("select * from Win32_Service")
    
    For Each Serv In ServiceEnum
        If StrComp(Serv.Name, ServiceName, 1) = 0 Or (iPartial And InStr(1, Serv.Name, ServiceName, 1)) Then
            ServiceExists = Serv.ProcessID
            If Not ServiceExists Then ServiceExists = True
            
            Exit Function
        End If
    Next
    
    ServiceExists = False
End Function
Автор: titris
Дата сообщения: 13.02.2008 19:39
Да,с сервисами не работает-говорит,что не удается найти указанный файл,источник WshShell.Exec-а как можно это подправить для сервисов?
Автор: slech
Дата сообщения: 13.02.2008 22:07
всем ещё разок привет.
может кто всё же поможет разобраться с моим вопросом ?

спасибо.
Автор: ViSiToR
Дата сообщения: 14.02.2008 10:24
titris

Цитата:
как можно это подправить для сервисов?

Функцию я же пирвёл в своём посте, она не работает?
Автор: titris
Дата сообщения: 14.02.2008 20:39

Цитата:
Функцию я же пирвёл в своём посте, она не работает?

Я твой ответ еще не видел на момент написания поста-буду проверять-спасибо
Автор: highold
Дата сообщения: 15.02.2008 13:23
Друзья. кто знает группу "Boom Devil"? Они просто исчезли, а единственный их диск, который у меня был, затерся и восстановлению не подлежит. Помогите найти, пожалуйста!!

Добавлено:
Извините, я не то сделал что-то
Автор: Nervniy2000
Дата сообщения: 19.02.2008 17:13
нужно поменять часть одной из строк в xml файле, подскажите что нибудь.
т.е. открыть, найти, заменить, закрыть измененный.
можт есть какие идеи?
Автор: Rush
Дата сообщения: 19.02.2008 18:29
Nervniy2000

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

Посмотри сюда - http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=460#10
Все то же самое, только замени своими данными...
Автор: DonkeyHottt
Дата сообщения: 19.02.2008 20:46
Друзья, можно несколько вопросов:
1. Как в vbs (какая команда) имитирует нажатие стрелок, Tab, ALT, Ctrl, Shift
2. Как закрыть окно зная его название но не используя "Alt-А4", Смысл в том, что в окне одной программы открыто другое окно и если нажать "Alt-А4", то закроется вся программа, а нужно закрыть только это окно, которое внутри. Названия этих окон разные.
Спасибо всем за помощь!
Автор: ViSiToR
Дата сообщения: 19.02.2008 23:33
DonkeyHottt
1.

Код: Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys("{TAB}")
Автор: Nervniy2000
Дата сообщения: 20.02.2008 12:28
Rush

Цитата:
Посмотри сюда - http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=460#10
Все то же самое, только замени своими данными...

все бы хорошо, только структура у всех файлов разная, но во всех есть одинаковые фрагменты. нужно найти фрагмент и заменить его.
Автор: Rush
Дата сообщения: 20.02.2008 17:34
Nervniy2000

Цитата:
структура у всех файлов разная, но во всех есть одинаковые фрагменты. нужно найти фрагмент и заменить его.

Если исходить из того примера (а тебе он нужен не весь, инпутбоксы тебе ни к чему), то просто в переменную str пишешь фрагмент, который тебе нужно заменить, а в переменную str2 - то чем нужно заменять.

Код: ' Читаем нужный файл
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("имя файла", 1)
setFile = f.ReadAll
f.Close
' Включаем регулярные выражения
Set regEx = New RegExp
regEx.Global = True
regEx.IgnoreCase = True ' Если регистр символов имеет значение, то поменять на False
' Маски для замены
str="фрагмент, который меняем"
str2="текст, на который меняем"
' Меняем значения нужного фрагмента
setFile = ReplaceText (setFile, str, str2)
' Записываем в файл
Set f = fso.OpenTextFile("имя файла", 2)
f.Write setFile
f.Close
' Очищаем
Set f = Nothing
Set fso = Nothing
Set regEx = Nothing
' Функция замены
Function ReplaceText(txt, patrn, replStr)
regEx.Pattern = patrn
ReplaceText = regEx.Replace(txt, replStr)
End Function
Автор: DonkeyHottt
Дата сообщения: 20.02.2008 19:47
ViSiToR
Спасибо! А как имитировать нажатие ALT CTRL и стрелок всех четырех?
WshShell.SendKeys("{alt}") дает ошибку.
Автор: Rush
Дата сообщения: 20.02.2008 21:03
DonkeyHottt

Цитата:
А как имитировать нажатие ALT CTRL и стрелок всех четырех?


WshShell.SendKeys("+") ' Shift
WshShell.SendKeys("^") ' Ctrl
WshShell.SendKeys("%") ' Alt
WshShell.SendKeys("{LEFT}") ' Стрелка влево
WshShell.SendKeys("{RIGHT}") ' Стрелка вправо
WshShell.SendKeys("{UP}") ' Стрелка вверх
WshShell.SendKeys("{DOWN}") ' Стрелка вниз

Добавлено:
Для имитации нажатия нескольких клавиш с шифтом можно написать:

Код: WshShell.SendKeys("+(xyz)")
Автор: DonkeyHottt
Дата сообщения: 20.02.2008 22:05
Rush
Спасибо!
Работает
Только вот окно всетаки почему-то не закрывается вышеописаным способом.
А можно на vbs имитировать нажатие мышкой на крестик в углу окна? Похоже другим способом его не закрыть
Автор: Nagual
Дата сообщения: 20.02.2008 22:57
Скрипт для удаления концевых пробелов в файлах
Написан для устранения кривизны тэга [code] движка (админа) форума
Особенно актуален для темы Задачи на bat-файлах

Итак, del_spaces.vbs

Код:
===============================================
If WScript.Arguments.Count=0 Then
MsgBox
"Не заданы параметры!",,"Удаление концевых пробелов"
WScript.Quit
End If
Set
fso=CreateObject("Scripting.FileSystemObject")
For Each
warg In WScript.Arguments
Set f=fso.GetFile(warg)
Set
txt=f.OpenAsTextStream(1)
Str=""
While Not txt.AtEndOfStream
Str=Str&RTrim(txt.ReadLine())&vbCrLf
Wend
txt.Close
set f1=fso.OpenTextFile(warg,2)
f1.Write Str
f1.Close
Next
===============================================

Синтаксис:
del_spaces.vbs file1 [file2 file3 fileN]




Сценарий для удаления концевых пробелов, а также и пустых строк
В сценарии используется никсовая утилита sed
На выходе получаем файл в кодировке ansi(1251)
Кому надо, цикл для работы с параметрами, дописывайте сами

Код:
===============================================
@echo off
chcp 1251>nul
title
Удаление концевых пробелов и пустых строк
set inp=orig.txt
set out=edit.txt
if exist %inp% sed -r -e "/^$/d" %inp%>__._&&sed -r -e "s/[ \t]*$//" __._>__.-&&more __.->%out%&&del/q __.?
===============================================
Автор: XXXXL
Дата сообщения: 22.02.2008 18:29

Цитата:
Rush
, помоги ещё раз пожалуйста. Только что бы изменилось одно слово PASSWORD.
Если забыл то вот тут почитай
У меня самого никак не получается самому сделать.
вот строка:
ZTnBatch.exe -h 192.168.1.1 -p PASSWORD -c "poe drop poe0"
Автор: ViSiToR
Дата сообщения: 22.02.2008 19:55
XXXXL

Цитата:
Только что бы изменилось одно слово PASSWORD



Код: ' Окна ввода данных
'Login_Input = InputBox("Введите логин:", "Внимание!", "")
Password_Input = InputBox("Введите пароль:", "Внимание!", "")


' Задаём переменную для имени файла
FileName = "Test.txt"

' Читаем нужный файл
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(FileName, 1)
FileContent = f.ReadAll
f.Close

' Включаем регулярные выражения
Set regEx = New RegExp
regEx.Global = True
regEx.IgnoreCase = True

' Маски для замены
Pettern = "-p ([^\d]+) -c"
PatternReplace = "-p " & Password_Input & " -c"

' Меняем значения пароля
FileContent = ReplaceText(FileContent, Pettern, PatternReplace)

' Записываем в файл после замены
Set f = fso.OpenTextFile(FileName, 2)
f.Write FileContent
f.Close

' Очищаем
Set f = Nothing
Set fso = Nothing
Set regEx = Nothing


' Функция замены
Function ReplaceText(txt, patrn, replStr)
    regEx.Pattern = patrn
    ReplaceText = regEx.Replace(txt, replStr)
End Function
Автор: ViSiToR
Дата сообщения: 22.02.2008 22:08

Цитата:
Позже может сделаю..

Вроде сделал: Copy_From_Ru-Board_Installer_to_IE.vbs (5 kb).

Правда у меня один глюк проявляется - когда копируем, текущее окно IE теряет фокус (возможно это мой локальный глюк, в последнее время ещё не такие глюки бывали ).

Добавлено:
P.S
Кому интересно, могу и для Opera сделать .
Автор: JustVisiter
Дата сообщения: 23.02.2008 06:42
Стоит такая задача: зная только имя пользователя в AD, добавить его в определённую группу AD. Столкнулся с проблемой: как указать пользователя, не зная, в каком OU он находиться. Везде в примерах идёт подключение через LDAP, где необходимо указать OU, иначе "объект в домене не найден".
Подскажите пожалуйста, как это сделать?
Автор: XXXXL
Дата сообщения: 23.02.2008 08:31
ViSiToR Спасибо


Автор: ViSiToR
Дата сообщения: 23.02.2008 12:40
Обновил Copy_From_Ru-Board_Installer_to_IE.vbs (3 kb).

Убрал лишнее, и исправил несколько ошибок (на последней строке не убирался пробел + ещё пару синтаксических ошибок).
Автор: Nagual
Дата сообщения: 23.02.2008 14:47
ViSiToR
Цитата:
С этим тегом оно не связано, скорее с тегом br - если копировать текст с двумя строками, то мы видим что только первая строка имеет лишний пробел на конце, значит до символа перевода строки добавляется пробел.
написал бы ты это админу, мне это не интересно, веришь?

интересно вот что...
господа, как получить имя текущей папки, в которой находится скрипт, подчеркну, только имя текущей папки, а не полный путь до нее, желательно без использования регулярных выражений
пример:
есть папка, в которой лежит скрипт
C:\Documents and Settings\All Users
надо получить
All Users
Автор: ViSiToR
Дата сообщения: 23.02.2008 16:06
Nagual

Цитата:
как получить имя текущей папки, в которой находится скрипт, подчеркну, только имя текущей папки



Код: Set fso = CreateObject("Scripting.FileSystemObject")

Path = WScript.ScriptFullName '"C:\Documents and Settings\All Users\test.vbs"
ParentPath = fso.GetParentFolderName(Path)
FolderName = fso.GetBaseName(ParentPath)

Wscript.Echo FolderName
Автор: Ortios
Дата сообщения: 23.02.2008 17:51
Друзья, помогите решить проблему.
Есть команда net send, посылающая сообщения в сети. На тех серверах в сети, на которые редко заглядываешь со временем накапливается большое количество этих сообщений, пока все сбросишь опухнешь. Короче нужен скрипт, который бы махом закрывал накопившиеся на данном сервере сообщения. Групповые политики не предлагать.
Автор: Dem_anywhere
Дата сообщения: 23.02.2008 23:12
А если службу мессенджера перезапустить - не сбросятся?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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