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

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

Автор: zoric
Дата сообщения: 18.07.2006 14:14
Скрепки и колобки
Автор: ViSiToR
Дата сообщения: 18.07.2006 17:26
Доброго времени суток уважаемые программисты специалисты!

Есть такой вопрос - Как можно имитировать нажатие двух клавиш (Ctrl Shift), и желательно, чтобы они были беспрерывно зажатыми до тех пор, пока в сстеме запущенный определённый процесс (т.е когда процесс закроется, то клавиши не должный быть зажатыми).
А вообще было бы идеально, если бы они оставались быть зажатыми в границах определённого активного окна (т.е когда это определённое окно не активно, то клавиши как бы будут отжиматься, а скрипт как бы будет уходить во временную спячку, и 'просыпаться' в момент активности того самого определённого окна).

У меня есть скрипт, который имитирует нажатие одной клавиши:

Код: DIM Wsh
Set Wsh = WScript.CreateObject("WScript.Shell")
Wsh.SendKeys "{Тут клавиша}"
'quit
Set Wsh = nothing
WScript.Quit
Автор: osmor66
Дата сообщения: 09.08.2006 17:45
Подскажите как из VBS запустить существующее и настроенно VPN соединение.
А потом после того как будут выполнены нужные операции (как операции сделать знаю)
его (соединение) закрыть.
Спасибо
Автор: zoric
Дата сообщения: 11.08.2006 13:53
При запуске скрипта стало появляться ошибка
Цитата:
Невозможно создание объекта контейнером ActiveX: "Microsoft.XMLDOM"

Пробовал в сети поискать - не нашёл НИЧЕГО. Неужели это только у меня?
Автор: ViSiToR
Дата сообщения: 11.08.2006 14:26
Есть такой вопрос - как в VBScript, проверить наличие на существование процесса в системе? что-то типа такого:


Код: If ProcessExists(process.exe) Then
do somthing...
Автор: mozers
Дата сообщения: 11.08.2006 15:00
ViSiToR
Код: Set Processes = GetObject("winmgmts://localhost")
Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")
For Each Proc In myProcEnum
    WScript.Echo Proc.Name & " " & Proc.ProcessId & " " & Proc.ExecutablePath & " " & Proc.CommandLine
Next
Автор: ViSiToR
Дата сообщения: 11.08.2006 18:41
mozers
Спасибо за отзыв, но если честно, я не совсем понимаю что с этим делать. Куда нужно прописывать нужный для опознания процесс, и как сделать чтобы в случае его отсутствия, происходило определённое действие?
Автор: mozers
Дата сообщения: 11.08.2006 22:39
ViSiToR
Да... RFTM вообще то...
Сначала запускаем Блокнот, а потом этот скрипт (назовем его KillNotepad.vbs):
Код: Set Processes = GetObject("winmgmts://localhost")
Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")
For Each Proc In myProcEnum
If Proc.Name = "notepad.exe" Then
' пример действий если найден заданный процесс
WScript.Echo "Я вижу что запущен Блокнот!" & vbNewLine & "Ща его грохну..."
Proc.Terminate
' Все! Можно и че нить другое делать...
End If
Next
Автор: popinou
Дата сообщения: 11.08.2006 23:10
Добрый вечер,
Кто может помочь внести изменения в макрос, написанный в VBS ?
Речь идет о макрос к программе перевода Промт -
Я хочу включить информацию, находящуюся в тексте макроса в формате

Dictionary.Add "мама", "maman"
Dictionary.Add "папа", "papa"

в последовательный файл в формате txt - Но я не умею это делать. Помогите пожалуйста.
Заранее благодарю всех за помочь -


Цитата:
код:


Set RE = New RegExp
RE.Global = True
'
Set Dictionary = CreateObject("Scripting.Dictionary")

Dictionary.Add "папа", "papa"
Dictionary.Add "мама", "maman"
Dictionary.Add "марина", "Marina"

Sub PreserveForDictionary(ParaIndex)
a = Dictionary.Keys
For i = 0 To Dictionary.Count -1
RE.Pattern = a(i)
Set Matches = RE.Execute(Paragraphs(ParaIndex).SourceText)
For Each Match in Matches
Call Paragraphs(ParaIndex).Preserve(Match.FirstIndex, Match.Length, False, 0)
Next
Next
End Sub

Sub ReplaceFromDictionary(ParaIndex)
Set TargetRanges = Paragraphs(ParaIndex).Ranges
For I = 0 To TargetRanges.Count - 1
Set TargetRange = TargetRanges(I)
Value = Paragraphs(ParaIndex).SourceText(TargetRange.OriginStart, TargetRange.OriginLength)
If Dictionary.Exists(Value) Then
Value = Dictionary(Value)
Call Paragraphs(ParaIndex).ReplaceTarget(TargetRange.Start, TargetRange.Length, Value)
TargetRange.Length = Len(Value)
TargetRange.Property("PROMT_MACROS") = "This text was changed by macro!!!"
End If
Next
End Sub

Sub Document_BeforeTranslation(ParaIndex)
PreserveForDictionary(ParaIndex)
End Sub

Sub Document_AfterTranslation(ParaIndex)
ReplaceFromDictionary(ParaIndex)
End Sub
Автор: ViSiToR
Дата сообщения: 11.08.2006 23:50
mozersmozers


Цитата:
Сначала запускаем Блокнот, а потом этот скрипт (назовем его KillNotepad.vbs):

Но таким образом, всё что будет между For и Next, в любом случае будет выполнятся, а мне нужно, чтобы при условии отсутствия процесса, он же и будет запускаться. Т.е, допустим, в системе висит процесс dmaster.exe, и при запуске скрипта, должна произойти проверка, и если был найден процесс, то скрипт по сути должен завершить работу (Set WshShell = Nothing или в этом роде), а если процесс не был определён (т.е нет такого процесса в системе), то скрипт должен запустить программу (dmaster) - но сам акт запуска я умею делать, мне нужно именно условие и проверка на существование процесса.
Автор: mozers
Дата сообщения: 12.08.2006 10:48
popinou
Цитата:
Речь идет о макрос к программе перевода Промт -
Я хочу включить информацию, находящуюся в тексте макроса в формате
Что она там делает? Зачем это вообще нужно? А, впрочем, - дело твое...

Цитата:
в последовательный файл в формате txt
Запись в файл выполняется с помощью FileSystem Object. Хорошее описание всех его свойств и методов (на русском и с примерами) - тут.

ViSiToR
Ну, элементарно, же, Ватсон
Код: Set Processes = GetObject("winmgmts://localhost")
Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")
myProc = False
For Each Proc In myProcEnum
If Proc.Name = "notepad.exe" Then
myProc = True
End If
Next
If Not myProc Then
WScript.Echo "Что то я НЕ вижу что запущен Блокнот." & vbNewLine & "Ща я его запушу!..."
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "notepad.exe", 1, true
Else
WScript.Echo "Блокнот уже запущен!"
End If
Автор: ViSiToR
Дата сообщения: 12.08.2006 16:30
mozers

Цитата:
Ну, элементарно, же, Ватсон

Приогромное спасибо, Холмс
Автор: ViSiToR
Дата сообщения: 15.08.2006 05:40
Есть такой вопрос:

Нужно в определённом файле, найти строчку содержащую определённые символы, и если символы найдены, то нужно чтобы создавался файл (например, Exists.tmp). Т.е, у меня есть допустим файл test.txt, и в этом файле, нужно осуществить поиск таких слов: «Привет Мир», если в этом файле существую эти слова, то должен создаваться файл Exists.tmp, если не существует, то ничего пусть не делается.

Очень важно - поиск нужно осуществлять именно кириллицей, и при этом не зависимо от кодировкий файла и\или текста в нём.

Возможно такое осуществить на VBS? очень и очень надо!
Заранее благодарю!
Автор: mozers
Дата сообщения: 15.08.2006 17:53
ViSiToR
Цитата:
Возможно такое осуществить на VBS? очень и очень надо!
Заранее благодарю!

Если "очень и очень надо" то сделаешь сам и никого благодарить не надо будет.
Случай то достаточно хорошо описанный (в том же справочнике FileSystem Object)
Сначала читаешь файл:
Код: Set CurrentFile = FSO.OpenTextFile("test.txt", ForReading, False, TristateUseDefault)
ReadText = CurrentFile.ReadAll
Автор: Keponom
Дата сообщения: 21.08.2006 13:26
Как можно использовать переменные среды в теле скрипта (например создавать каталог с именем пользователя и машины) переменные %UserName%, %ComputerName%, %USERPROFILE%

Надо для резервного копирования моихдокументов пользователей на сервер
Автор: Troitsky
Дата сообщения: 21.08.2006 14:08
Keponom

Цитата:
Как можно использовать переменные среды в теле скрипта

В VB для этих целей есть весьма удобная функция Environ()
Например
Код:
Environ("USERNAME")
Environ("COMPUTERNAME")
Environ("USERPROFILE")
Автор: mozers
Дата сообщения: 21.08.2006 14:20
Keponom
Чаще использование функции ExpandEnvironmentStrings удобнее:
Код: set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.ExpandEnvironmentStrings("%USERNAME%")
WScript.Echo WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
WScript.Echo WshShell.ExpandEnvironmentStrings("%USERPROFILE%")
Автор: Keponom
Дата сообщения: 21.08.2006 14:25
Спасибо всем нашел эти значения в реестре, оттуда я знаю как вытянуть


Цитата:
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")

strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue
Wscript.Echo "Current History Buffer Size: " & dwValue


strKeyPath = "SOFTWARE\Microsoft\Windows Script Host\Settings"
strValueName = "TrustPolicy"
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
Wscript.Echo "Current WSH Trust Policy Value: " & strValue
Автор: ViSiToR
Дата сообщения: 21.08.2006 14:55
mozers
Большое Спасибо, с поиском разобрался. Но вот есть другой вопрос...

Как можно на vbs, осуществить проверку на то, существует ли файл по ссылке в сети?
В основном, нужно проверять файлы с расширением *.zip и *.rar. Но чтобы проверка была корректная, и без исключении.
Автор: mozers
Дата сообщения: 21.08.2006 14:56
Keponom
Цитата:
нашел эти значения в реестре

При чем тут это ??? Ты не забыл о чем спрашивал?

Добавлено:
ViSiToR
Имеется в виду http ссылка?
Как закачать страницу или файл если он имеется по указанной ссылке - знаю, а вот как не закачивая проверить существование???...
Не знаю. Никогда не надо было.
Пользуй WGET - там есть такая опция.
Автор: ViSiToR
Дата сообщения: 21.08.2006 15:39
mozers

Цитата:
Имеется в виду http ссылка?

В осовнном да.


Цитата:
Как закачать страницу или файл если он имеется по указанной ссылке - знаю, а вот как не закачивая проверить существование???...


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

Добавлено:
т.е сели закачка не удалась , то желательно чтобы создался файл как метка (error.tmp).
Автор: mozers
Дата сообщения: 21.08.2006 16:08
ViSiToR
Вот тебе функция для закачки файла по его url:
Код: Sub DownloadFile(url, filename)
' Сохраняет URL в файл
Set oXmlHttp = CreateObject("Microsoft.XMLHTTP")
On Error Resume Next
oXmlHttp.Open "GET", url, False
oXmlHttp.Send

If Err.Number = 0 Then
Do : WScript.sleep 10 : Loop While oXmlHttp.ReadyState <> 4
if oXmlHttp.status = 200 Then
body = oXmlHttp.responseBody
'---------------------------------------------------------------
' 1й вариант сохранения полученного потока
Const adTypeBinary = 1, adSaveCreateOverWrite = 2
Set oStream = CreateObject("AdoDB.Stream")
oStream.Type = adTypeBinary
oStream.Open
oStream.Write body
oStream.SaveToFile filename, adSaveCreateOverWrite
oStream.Close
' ---------------------------------------------------------------
' 2й вариант сохранения полученного потока
'~ sOut = ""
'~ For i = 0 to UBound(body)
'~ sOut = sOut & chrw(ascw(chr(ascb(midb(body,i+1,1)))))
'~ Next
'~ Set fso = CreateObject("Scripting.FileSystemObject")
'~ Set file = fso.OpenTextFile(filename, 2, True)
'~ file.Write sOut
'~ file.Close
'---------------------------------------------------------------
WScript.Echo "File saved: " & filename
Else
WScript.Echo "There was a problem retrieving the XML data: " & oXmlHttp.statusText
End If
Else
WScript.Echo "Error load from url: " & url
End If
End Sub

DownloadFile "http://cwashington.netreach.net/downloads/scripts/vbscript/ftp_using_ie_xml.zip", "C:\TEMP\ftp_using_ie_xml.zip"
Автор: Miheeshe
Дата сообщения: 23.08.2006 09:45
Доброго времени суток всем... подскажите пожалуйста решение такового вопроса... писал скрипт, который из службы каталогов на удаленном компе считывает пользователей, а затем на своем контроллере домена создает контакты для этих пользователей.... как все это дело можно организовать при помощи LDAP запросов....
как приконнектиться к контроллеру и считать с него информацию я знаю....

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("User ID") = имя пользователя
objConnection.Properties("Password") = пароль
objConnection.Properties("Encrypt Password") = True
objConnection.Properties("ADSI Flag") = 1
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "SELECT Name,description,telephonenumber,mail,givenName,initials,sn,physicalDeliveryOfficeName FROM 'GC://айпишник/dc=,dc=' WHERE mail='*'AND objectClass='user' AND displayname <> 'SystemMailbox*'ORDER BY displayname"
Set RS = objCommand.Execute

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

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("User ID") = имя пользователя
objConnection.Properties("Password") = пароль
objConnection.Properties("Encrypt Password") = True
objConnection.Properties("ADSI Flag") = 1
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "INSERT INTO..................... а далеше не знаю,
по сути дела, мне нужно только запрос эскюэльный правильно составить....
подскажите кто нибудь !!!!
Автор: ViSiToR
Дата сообщения: 23.08.2006 10:13
mozers


Цитата:
Вот тебе функция для закачки файла по его url:

Большое спасибо!
Но если честно, у самого не получается ...

Я пробовал так:


Код:
' Пробую функцию, но она ругается на то, что я не умею к ней обращаться
GetFile(http://Link/file.zip, c:\file.zip)

' Пробую с кавычками, но тогда ругается на скобкий, убираю скобкий, ругается на кавычки
GetFile("http://Link/file.zip", "c:\file.zip")

Function GetFile(url, filename)
Set oXmlHttp = CreateObject("Microsoft.XMLHTTP")
Set oStream = CreateObject("AdoDB.Stream")
oStream.Type = adTypeBinary

oXmlHttp.Open "GET", url, False
oXmlHttp.Send

If oXmlHttp.Status <> 200 Then
GetFile = 1
Exit Function
End If

oStream.Open
oStream.Write oXmlHttp.responseBody
oStream.SaveToFile filename, adSaveCreateOverWrite
oStream.Close

GetFile = 0
End Function
Автор: LEX1
Дата сообщения: 29.08.2006 11:34
ViSiToR

Цитата:
Пробую с кавычками, но тогда ругается на скобкий

Функция ведь ещё и значение возвращает

Код: retVal=GetFile("http://Link/file.zip", "c:\file.zip")
Автор: ViSiToR
Дата сообщения: 29.08.2006 11:56
LEX1

Цитата:
Функция ведь ещё и значение возвращает

О, теперь не ругается но и ничего не делает, просто висит как процесс в системе и фсё!


Код: retVal=GetFile("http://Link/file.zip", "c:\file.zip")

If retVal = @error Then
;Тут по идее должен вылезать меседжбокс, но он не вылазит.
    MsgBox "ok" ; А желательно чтобы создовался файл (любой-пустой - как метка).
        Else
    Exit
    
End If

Function GetFile(url, filename)
Set oXmlHttp = CreateObject("Microsoft.XMLHTTP")
Set oStream = CreateObject("AdoDB.Stream")
oStream.Type = adTypeBinary

oXmlHttp.Open "GET", url, False
oXmlHttp.Send

If oXmlHttp.Status <> 200 Then
GetFile = 1
Exit Function
End If

oStream.Open
oStream.Write oXmlHttp.responseBody
oStream.SaveToFile filename, adSaveCreateOverWrite
oStream.Close

GetFile = 0
End Function
Автор: LEX1
Дата сообщения: 29.08.2006 13:01
ViSiToR

Цитата:
но и ничего не делает, просто висит как процесс в системе и фсё!

VBS это не AutoIt.

Цитата:
Реально вообще осуществить такое на vbs?

Разумеется.

Код:
If retVal = 0 Then MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
Автор: ViSiToR
Дата сообщения: 29.08.2006 13:53
LEX1


Цитата:
VBS это не AutoIt.

Знаю, просто они похожи


Цитата:
Разумеется.

Тоже не работает, я даже верную ссылку прописываю (а вместо 0 ставлю 1), но ничего не происходит .
Автор: mozers
Дата сообщения: 29.08.2006 14:18
ViSiToR
Уважаемый! Все вопросы твои - от полного (абсолютного) незнания VBS. (ты же даже как строку закомментировать не знаешь!).
Ты хочешь решить свою проблему и не желаешь знать даже основы скриптописательства.
Я знаю как писать скрипты но мне безынтересна твоя проблема. Извини.
Что я могу - так это дать скрипт для загрузки обновлений DrWeb. напиши на mozers(собака)mail.ru. Сможешь его приспособить под свои нужды - молодец...
Автор: ViSiToR
Дата сообщения: 29.08.2006 14:43
mozers

Цитата:
ты же даже как строку закомментировать не знаешь!

Знаю - вот так
' Закоментированная Строка

Просто путаю, я привык с AutoIt'ом работать, а там строка коментируется через ;


Цитата:
не желаешь знать даже основы скриптописательства.

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

Но всё-же спасибо на том что есть(?).

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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