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

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

Автор: CYMar
Дата сообщения: 16.11.2009 11:47
Товарищи! Кто нибудь может посоветовать что нибудь подобное AppActivate? Пролистал тему, многие задаються вопросом, но решения так и не нашел. Вот суть проблемы:
Необходимо после запуска системы открыть приложение, и после открытия данного приложения открыть одно из его окон (скорее всего по Hotkey F11).

Код: Option Explicit
Dim WshShell, theAzi
Set WshShell = WScript.CreateObject("WScript.Shell")
Set theAzi = WshShell.Exec("azi.exe")
WScript.Sleep 15000
WshShell.AppActivate theAzi.ProcessID
WshShell.SendKeys "{F11}"
Автор: Sergey_AV
Дата сообщения: 16.11.2009 13:42
Подскажите, плииз - есть скрипт: http://forum.ru-board.com/topic.cgi?forum=5&topic=29819&start=1142&limit=1&m=1#1
как бы избавиться от консольного окошка при его работе? Имеется ввиду действие программы ping.exe. Сам то скрипт запустить без консольного окошка можно, а следы его деятельности?
Автор: mozers
Дата сообщения: 17.11.2009 15:24
CYMar
Цитата:
после открытия данного приложения открыть одно из его окон
Такие задачи лучше решать с помощью AutoIt (он под такие дела заточен).

Sergey_AV
Консольное окошко возникает не от ping.exe, а от oShell.Exec
Можно заменить вызов
Код: oShell.Exec("%comspec% /c ping.exe " & url & " 2>&1")
Автор: Ufimez
Дата сообщения: 18.11.2009 06:55
Здравствуйте.
есть форма, на ней TDBGrid в ней нередактируемые колонки и строки, по ним можно перемещаться, можно ли каким либо образом узнать текст ячейки на которой находишься?

- копирование в буфер обмена непроходит
- с помощью AutoItX3.dll Au3Info получилось получить информацию об объекте
Class - TDBGrid
Instance - 1
но вот текст показанный и скрытый там отсутствует
Автор: alur2005
Дата сообщения: 19.11.2009 11:04
Подскажите можно ли как то с помощью VBS узнать под кем сейчас работает залогинившийся user , под пользователем , под локальным админом или под опытным пользователем.
Автор: Sergey_AV
Дата сообщения: 20.11.2009 12:00
mozers

Цитата:
Консольное окошко возникает не от ping.exe, а от oShell.Exec
Можно заменить вызов

Спасибо! Вроде бы при помощи добрых людей все заработало .
Автор: aknyazhev
Дата сообщения: 25.11.2009 11:40
Господа, помогите отладить скрипт. Сам я необходимыми знаниями не обладаю, поиском по гуглю задачу не решил.

Вводная:
Есть статья
http://www.samag.ru/cgi-bin/go.pl?q=articles;n=12.2005;a=05
В ней в конце есть глава "Подведение итогов". В ней рассматривается скрипт excel.vbs, там же приводят ЧАСТЬ его листинга, цитирую:


"Далее приводится фрагмент сценария, реализующего все эти действия.

Листинг 7. Создание документа Excel c результатами

…………….

Set s = oE.Sheets(1) ' Лист 1

s.Name = "Список"

Set s1 = oE.Sheets(2) ' Лист 2

s1.Name = "Сумма"

s.Rows(1).RowHeight = 2 * s.StandardHeight

s.Cells(1,1) = "Список установленных приложений"

s.Cells(2,1) = "Имя компьютера"

s.Cells(2,2) = "Приложения"

s.Columns("A:B").Columns.AutoFit

With s.Range("A1:B1")

.MergeCells = True

.VerticalAlignment = xlCenter

.HorizontalAlignment = xlCenter

.Font.Size=14

End With

s1.Rows(1).RowHeight = 2 * s1.StandardHeight

s1.Cells(1,1) = "Количество установленных приложений"

s1.Cells(2,1) = "Приложение"

s1.Cells(2,2) = "Всего установок"

s1.Columns("A:B").Columns.AutoFit

With s1.Range("A1:B1")

.MergeCells = True

.VerticalAlignment = xlCenter

.HorizontalAlignment = xlCenter

.Font.Size=14

End With

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set fso = CreateObject("Scripting.FileSystemObject")

' Получаем сведения о файлах, находящихся в данной папке

Set fld = fso.GetFolder(".")

Set objTextFile2 = objFSO.OpenTextFile("c:\temp\tmp", ForWriting, True)

For Each fi In fld.Files

If fi.name<>"excel.vbs" AND fi.name<>"result.xls" Then

' Файл сценария и файл отчета не открывать

Set readPCFile = objFSO.OpenTextFile(fi, ForReading)

i = 0

s.Cells(n, 1) = fi.name ' Имя файла – это имя компьютера

Do Until readPCFile.AtEndOfStream

strNextLine = readPCFile.Readline

i = i + 1

' Первые 6 строк в файлах отчетах – это шапка,

' экспортировать не нужно

If i>6 Then

s.Cells(n, 2) = strNextLine

objTextFile2.WriteLine (strNextLine)

n = n + 1

End If

Loop

readPCFile.Close

End If

Next

objTextFile2.close

f=3

Set objTextFile2 = objFSO.OpenTextFile("c:\temp\tmp", ForReading)

Do Until ObjTextFile2.AtEndOfStream

strNextLine = objTextFile2.Readline

' ищем вхождения имени приложения

Set fc = s1.Columns("A").Find(strNextLine)

If fc Is Nothing Then ' не нашли, тогда добавляем

s1.Cells(f,1)=strNextLine

Set fc = s.Columns("B").Find(strNextLine)

If Not fc Is Nothing Then

count=0

With s.Columns("B")

Set c = .Find(strNextLine)

If Not c Is Nothing Then

firstAddress = c.Address

Do

' считаем количество установок

count=count+1

Set c = .FindNext(c)

Loop While Not c Is Nothing And c.Address <> firstAddress

End If

End With

s1.Cells(f,2)=Count ' сохраняем количество установок

End If

f=f+1

End If

Loop"

Вопрос. Что мне нужно дописать в начале листинга, что бы он заработал? Очень надеюсь на вашу помощь, господа.
Автор: alur2005
Дата сообщения: 25.11.2009 18:20
aknyazhev

вот тебе программа и никаких скриптов

http://forum.ru-board.com/topic.cgi?forum=35&topic=8637&start=0
Автор: Hugo121
Дата сообщения: 26.11.2009 17:01
Не подскажете, как определить, числовое ли значение в Array(x, 1)?
IsNumeric и Val не работают...
Т.е. мне надо поменять переменные, если там число (3 цифры), но ничего не делать, если пусто или текст. Не хочется анализировать символы, может есть попроще выход?
if Val(Dt(x,5)) <> ent then ent = Dt(x,5): sdvig = sdvig + 1
Автор: Nagual
Дата сообщения: 26.11.2009 17:33
делаю замену фрагментов текста, а именно html классов на нижний регистр

// перевод классов в нижний регистр
html = html.replace(/class="[^№]*?"/g, '');

при этом текст заменяется на то, что в ''

сама функция выглядит так
.toLowerCase()

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

никак не соображу, где как написать

Автор: alroy
Дата сообщения: 26.11.2009 21:38
Hugo121
Честно говоря я не понял в чем у тебя проблема все работает вот пример ниже

Код:
Dim Arr(2,2)

Arr(0, 0)= "1111" : Arr(0, 1) = "aaaaaaaaaa"
Arr(1, 0)= "22222" : Arr(1, 1) = "bbbbbbbbbbb"



MsgBox("Это [" & Arr(0, 0) & "] цифра- ? " & IsNumeric(Arr(0, 0))& " !" )
Автор: Hugo121
Дата сообщения: 27.11.2009 08:16
alroy
Спасибо, работает, я наверное где-то в другом напутал...
Искал в доках - не нашёл такого оператора, вот и спросил.
Пока пошёл другим путём, обошёлся, но на будущее пригодится.

Добавлено:
Ещё вопрос - как обходится то, что после упаковки в exe в vobedit путь к скрипту изменяется на место распаковки экзешника? Может, другой программой компилить? Какой?

И ещё - как написать диалог выбора папки? Ни одного примера не нашёл, всюду файлы выбираются, а приспособить к папке не получается.
Автор: mozers
Дата сообщения: 27.11.2009 09:30
Nagual
Вопрос, при кажущейся простоте, с подвохом.
Если мы запишем так:
Код: html = html.replace(/class="([^№]*?)"/gi, 'class="' + '$1'.toLowerCase() + '"');
Автор: Hugo121
Дата сообщения: 27.11.2009 14:42
Сам нашёл насчёт папки, немного дополнил/переделал:


Код:
Dim objPath, objFolder, objFolderItem, objShell, strPath
Const MY_COMPUTER = &H11&
Const WINDOW_HANDLE = 0
Const OPTIONS = 0
objPath = ""
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(MY_COMPUTER)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path
Set objFolder = objShell.BrowseForFolder(WINDOW_HANDLE, "Select a folder:", OPTIONS, strPath)
If Not objFolder Is Nothing Then
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
Else MsgBox "Folder Not Selected!": wscript.quit
End If

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TheFolder = objFSO.GetFolder(objPath) 'каталог, где смотреть
Set TheFiles = TheFolder.Files

For Each AFile In TheFiles
Msgbox AFile
Next
Автор: alroy
Дата сообщения: 27.11.2009 16:14
Hugo121

Вот мой пример как выбрать папку


Код:
'пример прмер использования nanka "C:\"


Function nanka (str_byk)
On Error Resume Next
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.BrowseForFolder(0, "Выберите папку откуда вы хотите копировать файлы", 0, str_byk)
nanka = objFolder.Self.Path
If Err.Number <> 0 Then
MsgBox "Папка не выбрана!" , vbInformation
WScript.Quit
End If

End Function

Автор: Hugo121
Дата сообщения: 27.11.2009 16:26
Да, только мне надо папку как объект, что бы потом файлы обработать, вот в этом был затык. Просто путь получить легко, дальше не получалось.
Set TheFiles = TheFolder.Files
For Each AFile In TheFiles
Автор: Nagual
Дата сообщения: 28.11.2009 00:19
mozers
спасибо, как всегда на высоте, всё отлично пашет
Автор: Rush
Дата сообщения: 28.11.2009 09:00
Сорри, я, кажется, не так понял... Поэтому del
Автор: Hugo121
Дата сообщения: 28.11.2009 12:33
alroy

Спасибо, взял Ваш код, только вот не понял, как str_byk использовать, в итоге код такой получился:

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set TheFolder = objFSO.GetFolder(openfolder) 'каталог, где смотреть
Set TheFiles = TheFolder.Files 'все файлы каталога

For Each AFile In TheFiles
'здесь обработка файлов
Next

Function openfolder()
    On Error Resume Next
    Set objShellApp = CreateObject("Shell.Application")
    Set objFolder = objShellApp.BrowseForFolder(0, "Select Folder", 0)
    openfolder = objFolder.Self.Path
    If Err.Number <> 0 Then
         MsgBox "Folder Is Not Selected!" , vbInformation
         WScript.Quit
    End If
End Function
Автор: deyoneg123
Дата сообщения: 28.11.2009 13:44
Привет народ. Подскажите, как сравнить два бинарных файла?
Автор: alur2005
Дата сообщения: 29.11.2009 08:50
кто нибудь скрипт встречал под кем работает залогинившийся user , под пользователем , под админом или под опытным пользователем.
Автор: alroy
Дата сообщения: 29.11.2009 23:34
Hugo121


BrowseForFolder(<Hwnd>,<Заголовок>,<Опции>,<КорневаяПапка>)

str_byk Это - <КорневаяПапка>

<КорневаяПапка> - необязательный параметр. Корневая папка в окне "Выбор папки". Тип - строка. Пользователь не сможет пройти в окне "Выбор папки" выше этой папки. Если параметр не указан, корневой папкой будет рабочий стол Windows.




Честно говоря я не понимаю зачем это нужно но по своему опыту знаю что можно доработать мою функцию таким образом чтоб все происходило так
1 запуск функции выбор папки
2 в результате работы функция становиться массивом файлов выбранных в пункте 1

или другими словами функция возвращает массив файлов, а что вы там буди те делать с ними далее вам решать
Автор: Hugo121
Дата сообщения: 30.11.2009 08:21

Цитата:
зачем это нужно
- чтобы не выбирать файлы (их много, далее надо обработать все), а выбрать сразу всю папку.

Цитата:
функция возвращает массив файлов
- можно, будет на одну сторку меньше вне функции, но на сколько больше в функции?
Set TheFiles = nanka (str_byk)
For Each AFile In TheFiles
Автор: alroy
Дата сообщения: 30.11.2009 11:36
Hugo121
Set TheFiles = nanka ("C:\")
For Each AFile In TheFiles
вот так будет!!!

А по поводу использования моего решения оно становится выигрышным когда нужно например не одну папку обработать а например несколько значительное сокращение кода!!!
Автор: Hugo121
Дата сообщения: 01.12.2009 15:31
alur2005
Подойдёт?

Код:
' List Resultant Set of Policy User Privilege Rights


strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\rsop\computer")

Set colItems = objWMIService.ExecQuery("Select * from RSOP_UserPrivilegeRight")

For Each objItem in colItems
For Each strAccountList in objItem.AccountList
Wscript.Echo "Account list: " & strAccountList
Next
Wscript.Echo "Precedence: " & objItem.Precedence
Wscript.Echo "User Right: " & objItem.UserRight
Next
Автор: alur2005
Дата сообщения: 01.12.2009 17:51
Hugo121

нет не то , мне нужно выловить пользователей - локальных админов.
есть такая команда net localgroup administrators , а мне бы желательно скрипт в этом исполнении.
Автор: Hugo121
Дата сообщения: 02.12.2009 10:10
Я тут выше спрашивал, чем компилить, чтобы путь к скрипту/экзешнику определялся (VbsEdit не годится), сам себе отвечаю - подходит ExeScript (проверил на Ex.Scr.3.0.8m.rar)
Автор: BumerangII
Дата сообщения: 02.12.2009 23:40
Помогите, пробую писать на VBScript и при попытке запустить приложение
ниже приведенным способом
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("%ProgramFiles%\Network Associates\VirusScan\mcconsol.exe")

выдает вот такую ошибку.

Script: M:\!Work\Project\mcafee.vbs
Line: 2
Char: 1
Error: The system cannot find the file specified.
Code: 80070002
Source: (null)

Подскажите, что я делаю не так.
Автор: vlth
Дата сообщения: 03.12.2009 02:11
BumerangII

Здесь путь к исполняемому файлу содержит пробелы ("Program Files", "Network Associates"). В таких случаях путь нужно заключать в двойные кавычки:

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """"&"%ProgramFiles%\Network Associates\VirusScan\mcconsol.exe"&"""",1
(или WshShell.Run chr(34)&"%ProgramFiles%\Network Associates\VirusScan\mcconsol.exe"&chr(34),1
Автор: BumerangII
Дата сообщения: 03.12.2009 09:54
vlth
спасибо заработало !!

есть еще вопрос

необходимо получить окружение среды %COMPUTERNAME% и отправить его через
WshShell.SendKeys " " программе.

как выдать её на экран - уже нашел, а вот как передать программе не знаю.
Set WshSysEnv = WshShell.Environment("process")
WScript.Echo WshSysEnv("COMPUTERNAME")

А вообще задача стоит настроить Sheduler для сканирования в антивирусе McAfee.

Я пытаюсь реализовать это вот таким способом

Код: set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """"&"%ProgramFiles%\Network Associates\VirusScan\mcconsol.exe"&"""",1
WScript.Sleep 100
WshShell.AppActivate "VirusScan Console"
WScript.Sleep 50
WshShell.SendKeys "{TAB}"
WScript.Sleep 10
WshShell.SendKeys "{DOWN 5}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "{TAB 6}"
WScript.Sleep 100
WshShell.SendKeys "{DOWN 5}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys " "
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys " "
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 50
WshShell.SendKeys "3"
WScript.Sleep 50
WshShell.SendKeys "{TAB}"
WScript.Sleep 50
WshShell.SendKeys "0"
WScript.Sleep 50
WshShell.SendKeys "{TAB}"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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