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

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

Автор: jONES1979
Дата сообщения: 16.12.2006 14:05

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


Ага... Я так и подумал,.. потом стал дальше смотреть, вдруг ты выбранный фрейм прогоняешь через какой-нить OCR и не нешёл этого... Вот и задумался.
Автор: CLOPOMOR
Дата сообщения: 18.12.2006 07:53
Как в VBS можно реализовать перехват системных событий ( в частности открытия окна IE (начале инет сеанса в идеале)) .
Нужно чтоб после открытия эксплорера скрипт предлагал загрузить обновления на Др Веб и при соглазии благополучно все грузил .
Также надо установить леммит времени серфинга = 1 час после истечения которого выводится сообщение -вы исчерпали леммит бла бла бла... закрывается обозреватель ( в идеале рубится инет соединение -если это не фантастика)

Вообщем с вторым и третьим пунктом сам разберусь, а на счет перехвата событий нужна консультация...
Автор: Troitsky
Дата сообщения: 18.12.2006 09:20
CLOPOMOR

Цитата:
Как в VBS можно реализовать перехват системных событий ( в частности открытия окна IE (начале инет сеанса в идеале)) .
Нужно чтоб после открытия эксплорера скрипт предлагал загрузить обновления на Др Веб и при соглазии благополучно все грузил .

А не проще вместо того, чтобы "перехватывать системные события" назначить в IE домашнюю страницу, в которую твой скрипт и будет встроен?
Открываешь IE -> грузится страница -> выполняется скрипт.
Такое решение, по-моему, гораздо прозрачнее.
Автор: CLOPOMOR
Дата сообщения: 18.12.2006 10:19
Так то оно так , но както слишком прозаично да и не всегда удобно .
Автор: Troitsky
Дата сообщения: 18.12.2006 10:42
CLOPOMOR
Иначе тебе придется писать нечто, которое будет болтаться в оперативной пямяти и следить-следить-следить Одним скриптом тут обойтись, по-моему, невозможно. Копать нужно в сторону создания самостоятельного приложения (тем более с учетом пп. 2, 3)
Автор: Sindikat
Дата сообщения: 18.12.2006 22:04
Подскажите, как можно при помощи vbs перекодировать строку из кодировки dos(866) в win(1251)?
Автор: mozers
Дата сообщения: 19.12.2006 11:25
Sindikat
Код: function dos2win(text){
var out = ""
var dos="Ђ ЃЎ‚ўѓЈ„¤…Ґрс†¦‡§€Ё‰©ЉЄ‹«Њ¬Ќ-Ћ®ЏЇђа‘б’в“г”д•е–ж—з?и™йљк›лњмќнћоџппя"
var win="АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяя "
for (i=0; i<text.length; i++) {
var ch = text.charAt(i);
var index = dos.indexOf(ch)
if (index >= 0){
ch = win.charAt(index);
}
out = out + ch;
}
return out;
}
Автор: CLOPOMOR
Дата сообщения: 19.12.2006 19:36
Troitsky

Думаю мож процессы отслеживать - появился IE then и поехали, а как счетчик натикает так и процесс убрать и чтоб незапускался...

Блин замучался я с ним

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

Set FavoritesPath = WSHShell.SpecialFolders("Favorites")

Set MyShortcut = WSHShell.CreateShortcut (FavoritesPath +"\\ БЛАБЛАБЛА.URL")

MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings("http://forum.ru-board.com")

msgbox "БЛАБЛАБЛА"

MyShortcut.Save ()

Это JS изначально был а я его переклепать хочу только не выходит , что я упустил?





Автор: jONES1979
Дата сообщения: 20.12.2006 11:55
CLOPOMOR

то что ты просишь делается на скриптах c использовнием технологии WMI. Там есть механизм событий(events)

В книжке А.Попова Е.Шишкина "Администирование с помощью WMI и WMIC" подобный пример точно есть.
В инете надо искать наверное на http://www.microsoft.com/technet/scriptcenter/default.mspx
Автор: CLOPOMOR
Дата сообщения: 20.12.2006 15:38
jONES1979
Благодарю за ссылку , я туда хожу иногда только с английским проблемы (ибо все время немецкий изучал)) ) . Глянь плиз скрипт добавления в избранное, никак не пойму в чем ошибка
Автор: WRFan
Дата сообщения: 23.12.2006 21:22

Цитата:
вдруг ты выбранный фрейм прогоняешь через какой-нить OCR и не нешёл этого...


в математике я совсем не разбираюсь, а для OCR программирования надо быть математическим экспертом

накатал скриптик для нормализации ИЕ окон, типа когда открываются без разных полосок:


Код:
'ON ERROR RESUME NEXT
dim objShell2
dim objShellWindows2
set objShell2 = CreateObject("Shell.Application")

set objShellWindows2 = objShell2.Windows

For i = 0 to objShellWindows2.Count - 1

Set objIE = objShellWindows2.Item(i)
if (InStr(1,objIE.locationurl, "http://",0) = 1) then 'check if Window is IE or Windows Explorer. You can also use Win32_Process class [WMI] IF you are running IE as a SEPARATE process (iexplore.exe): http://msdn2.microsoft.com/en-us/library/aa394372.aspx
objIE.fullscreen = false
objIE.resizable = true
objIE.menubar = true
objIE.statusbar = true
objIE.theatermode = false
objIE.toolbar = true
objIE.addressbar = true
objIE.statustext = ""
end if
next
set objShellWindows2 = nothing
set objShell2 = nothing
Автор: jONES1979
Дата сообщения: 24.12.2006 17:00

Цитата:
в математике я совсем не разбираюсь, а для OCR программирования надо быть математическим экспертом


ABBYY FineReader Scripting Edition

В каком то журнале(диске к журналу) видел OCR-библиотеку, вроде бесплатную, c API под разное... Сейчас вот порылся у себя, нет, не могу найти и даже названия не помню ...
Автор: WRFan
Дата сообщения: 28.12.2006 01:51
ещё раз переписал скрипт для нормализации окон (см. внизу), добаил исправление размеров окна. для выяснения данных height и width использую WMI. вообще WMI - очень интересная штука, с её помощью можно делать, что угодно - мониторить изменение файлов, создание папок и файлов, читать реестр, писать в реестр, мониторить перформанс процессов и т.д. язык правда жуть какой тяжёлый. вчера 10 часов подряд писал скрипт для мониторинга создания файлов в определённой папке. весь скрипт на 102 строчки, да ещё и жрёт 70% cpu, если много файлов в папке. но всё равно интересно

WMI Reference: http://msdn2.microsoft.com/en-us/library/aa394572.aspx
WQL (SQL for WMI) Reference: http://msdn2.microsoft.com/en-us/library/aa394606.aspx


Код:
ON ERROR RESUME NEXT
set objShell = CreateObject("Shell.Application")
set objShellWindows = objShell.Windows

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DisplayConfiguration")
For Each objItem in colItems
height = objItem.PelsHeight
width = objItem.PelsWidth
Next

for each obj in objShellWindows


if obj.type = "HTML-Dokument" then
if (not Err = 430) then 'is the window IE or WE? WE Class doesnt support Automation, returning error 430

Err.Clear

if (objShellWindows.count > 0) and (obj.visible = false) then
if (not Err = 424) then 'if invisible IE windows exist (an invisible InternetExplorer.Application might be in memory). Error 424 (Object required) means either no windows open, or the entire objShell crashed!
obj.visible = true
end if
end if

obj.fullscreen = false
obj.resizable = true
obj.menubar = true
obj.statusbar = true
obj.theatermode = false
obj.toolbar = true
obj.addressbar = true
obj.statustext = "" ' doesnt work properly!
obj.height = height 'if resolution height is e.g. 840, actual height is 842. Everything above 833 is ignored and set to 842
obj.width = width

end if
end if

Err.Clear

next
set objShellWindows = nothing
set objShell = nothing

'For testing the script with invisible IE windows use the following script:

'Set objIE = WScript.CreateObject("InternetExplorer.Application","objIE_")
'objIE.visible = false
'msgbox objShellWindows.count

'Execute the Window Normalisation Script BEFORE clicking away the msgbox!
Автор: zeroandruxa
Дата сообщения: 28.12.2006 12:20
Народ такая проблема - написал скрипт для копирования файлов из одной машины на вторую, когда запускаю все ок, поставил на шедулер (раз в день) - смотрю папки - неделю выполняется а потом перестает - не пойму в чем дело, когда запускаю сам все работает, может что с секьюрити?
Автор: distance
Дата сообщения: 28.12.2006 12:53
WRFan

Цитата:
вчера 10 часов подряд писал скрипт для мониторинга создания файлов в определённой папке. весь скрипт на 102 строчки, да ещё и жрёт 70% cpu, если много файлов в папке

силён, однако.
у меня на c++ ушло порядка 2х недель для аналогичной задачи мониторинга...
потом, ради интереса, переписал на c# за 2 дня, но 10 часов - мощнО:P)
Автор: WRFan
Дата сообщения: 30.12.2006 09:43
distance

да скрипты для таких задач уже существуют. мне только надо было его переделать, чтобы он не только создание файлов во всех подпапках мониторил, но и создание самих папок в главной папке. а если новая папка создаётся, скрипт прибивает все мониторы ("EventSinks") и создаёт новые, в том числе и для новой папки. использовал WMI для мониторинга и собирания инфы о числе и названиях папок.

SWbemSink объект + __InstanceCreationEvent класс для мониторинга, Win32_Subdirectory класс для перечисления папок в loop-е. кому интересно - ссылы на WMI наверху. могу и offline документацию дать, после двух часов бесплодных попыток мне таки удалось её риппнуть из вот этого релиза:

http://www.microsoft.com/downloads/details.aspx?FamilyId=E15438AC-60BE-41BD-AA14-7F1E0F19CA0D&displaylang=en

сама документация величиной в 40мб, ещё пара мб для MS document explorer-а, а качается чёрт те сколько, 150 мегов инсталляха скачала и весь хард мне загадила. риппнул, что надо - WMI и IIS документацию, потом uninstall и до свидания
Автор: xTOPOLx
Дата сообщения: 05.01.2007 23:12
Всем привет!!!
Подскажите пожалусто хорошую книгу по VBScript как для начинающего!?
Автор: CLOPOMOR
Дата сообщения: 09.01.2007 17:13
Здравствуйте !
Приведите плиз пример скрипта копирующего файлы *.tmp если таковые есть в папку TMPFILES, и копирующего строки содержащие символ $$ из файла 1.txt во все файлы TMPFILES\ *.tmp

В принципе знаю как реализовать это в BATC скрипте , а чтоб в VBS наверно недорос еще, только простейшие операции с файлами постигаю...
Кстати а действует в VBS оператор goto и какие еще есть операторы перехода?
Автор: WRFan
Дата сообщения: 21.01.2007 03:41

Цитата:
Подскажите пожалусто хорошую книгу по VBScript как для начинающего!?


http://www3.oxedion.com/index.php/download/8338d6e31fbed8cfbce8b29452bae264


Цитата:
Кстати а действует в VBS оператор goto


нет. он только в Visual Basic работает, а в VBScript не включён:

Visual Basic for Applications Features Not In VBScript:
http://msdn2.microsoft.com/en-us/library/30593abb.aspx

я кстати наконец то выяснил, как создавать объекты в браузере так сказать на ходу через vbscript:


Код:
<SCRIPT LANGUAGE="vbscript">
Set TheObject = Document.createElement("object")
document.body.appendChild(TheObject)

'TheObject.classid = "clsid:4C599241-6926-101B-9992-00000B65C6F9" 'Forms.Image.1
TheObject.classid = "clsid:04A1E553-FE36-4FDE-865E-344194E69424" 'msinkaut.InkPicture.1
TheObject.id = "picture"
TheObject.picture = LoadPicture("C:\bla.jpg")

Set regEx = New RegExp
regEx.Pattern = TheObject.classid
regEx.IgnoreCase = true
if regEx.Test("clsid:4C599241-6926-101B-9992-00000B65C6F9") = true then 'Forms.Image.1
TheObject.autosize = 1
TheObject.SpecialEffect = 1
TheObject.MousePointer = 0

elseif regEx.Test("clsid:04A1E553-FE36-4FDE-865E-344194E69424") = true then 'msinkaut.InkPicture.1
TheObject.SizeMode = StretchImage
end if
</SCRIPT>
Автор: Tipulatoid
Дата сообщения: 31.01.2007 11:07
Здравствуйте
igor_andreev дал мне код, который убирает все слова из текстового файла и оставляет одни лишь цифры:

Код: Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = fso.OpenTextFile("stock.txt", 1, false)
Set f = fso.OpenTextFile("skipped_stock.txt", 2, true)
fsContent = fs.ReadAll
fs.Close

Set regEx = New RegExp
regEx.Pattern = "\D(\s[\s\-\,0-9]{4,})$"
regEx.MultiLine = True
regEx.Global = True
Set Matches = regEx.Execute(fsContent)
For Each Match in Matches
RetStr = RetStr & Match.Value & vbCRLF
RetStr = regEx.Replace(RetStr, "$1")
Next
f.Write RetStr
f.Close
Автор: igor_andreev
Дата сообщения: 31.01.2007 11:33
Tipulatoid
Эт я промахнулся, я то на 2000 сразу последнюю версию WSH устанавливаю
en или ru около 700 Кб


Добавлено:
Поправка - код убирает не ВСЕ слова, а только в начале строки и оставляет последующие за ним четыре столбика цифр
stock.txt

Цитата:

SAGA -6,42 -9,24 10,55 1,23
PlayGirl 8,92 15,57 20,56 4,39
...и т.д.
Автор: Tipulatoid
Дата сообщения: 31.01.2007 14:29
igor_andreev
Понял, спасибо.
Чуток поправлю - код оставляет не 4 столбика цифр, а, похоже, что сколько угодно. Я ему скармливал файл с 8-ью цифровыми колонками - все сохранял. Мне, собственно, так и нужно
Автор: igor_andreev
Дата сообщения: 31.01.2007 15:31
Ну да, там в {4,} - значит от четырех и до бесконечности
Автор: Tipulatoid
Дата сообщения: 31.01.2007 16:15
igor_andreev
Можно еще немного понаглеть
Есть еще задача, которая мне, гуманитарию, кажется весьма трудно формализуемой:
Есть файл quality.txt:

Код: SAGA Очень хорошее Хорошее Очень хорошее
PlayGirl Очень хорошее Очень хорошее Очень хорошее
Уфа Хорошее Менее удовлетворит. Удовлетворительное
BSC КФХ Славинка Хорошее Хорошее Хорошее
Raul Gonsalez Очень хорошее Хорошее Хорошее
Last champion Хорошее Хорошее Удовлетворительное
Автор: Troitsky
Дата сообщения: 31.01.2007 16:24
Tipulatoid

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

Как вариант: заменить сначала
"Очень хорошее" на 1,
"Хорошее" на 2,
"Удовлетворительное" на 3,
"Менее удовлетворит." на 4;
Отчленить последние пять символов от каждой строки;
В отчлененном куске все пробелы заменить на любой нужный символ;
Сделать обратное преобразование: 1 на "Очень хорошее" и т.д.

Итого в одну строчку девять вложенных функций замены
Автор: Tipulatoid
Дата сообщения: 31.01.2007 17:14
Troitsky
Спасибо, вы формализовали задачу. Одно замечание - отчленить не 5 символов, а 3 только - сами оценки, названия не нужно.
Однако я в VBS вообще не шарю. Мне код нужен Я вообще свою программку в командной строке пишу (bat-файл) Там эту задачу, похоже, вовсе не решить.
Еще раз - если код писать долго, то не надо беспокоиться.
Автор: Troitsky
Дата сообщения: 31.01.2007 18:28
Tipulatoid

Цитата:
Одно замечание - отчленить не 5 символов, а 3 только - сами оценки, названия не нужно
А как же еще два пробела между тремя цифрами?


Цитата:
Мне код нужен
Ну, например, что то в таком духе
Код: Set fso = CreateObject("Scripting.FileSystemObject")

Set fstream1 = fso.OpenTextFile("temp1.txt", 1)
Set fstream2 = fso.OpenTextFile("temp2.txt", 2)

While Not fstream1.AtEndOfStream
    strLine = fstream1.ReadLine
    strLine = Trim(strLine)
    strLine = Replace(strLine, "Очень хорошее", "1")
    strLine = Replace(strLine, "Хорошее", "2")
    strLine = Replace(strLine, "Удовлетворительное", "3")
    strLine = Replace(strLine, "Менее удовлетворит.", "4")
    strLine = Right(strLine, 5)
    strLine = Replace(strLine, " ", "=")
    strLine = Replace(strLine, "1", "Очень хорошее")
    strLine = Replace(strLine, "2", "Хорошее")
    strLine = Replace(strLine, "3", "Удовлетворительное")
    strLine = Replace(strLine, "4", "Менее удовлетворит.")
    fstream2.Write strLine & vbCrLf
Wend

fstream2.Close
fstream1.Close

Set fstream1 = Nothing
Set fstream2 = Nothing
Set fso = Nothing
Автор: AlexStud
Дата сообщения: 01.02.2007 13:00
Всем привет!
Покритикуйте, плиз, скрипт...
Совсем начинающий, много чего еще не знаю, поэтому просю оценить, предлагать варианты модификации и технологии и т.д. и т.п.

Скрипт раскладывает файлы из корневой директории в папки по годам и по месяцам, на основании свойства LastModified, файлы меньше 4096 байт удаляет.


Код:
Option Explicit
'On Error Resume Next

Dim strComputer, wmiNS, wmiQuery
Dim objWMIService, objFSO, objFile, objF, objItem
Dim colFiles, colItems
Dim strMonth, strYear, strFolder, strPath, strPathMove
Dim SMTPServer, Recipient, From, Subject, Message, msg

wmiNS = "\root\CIMV2"
strComputer        = "."
wmiQuery = "SELECT Name, FileSize, LastModified FROM CIM_DataFile WHERE Path = '\\Fax\\XXXXXXX\\'"
strPath = "d:\fax\XXXXXXX\"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & wmiNS)
Set colFiles = objWMIService.ExecQuery (wmiQuery)
For Each objFile In colFiles
    If objFile.FileSize < 4096 Then
        objFile.Delete
    Else        
        strMonth = Mid(objFile.LastModified, 5, 2)
        strYear = Left(objFile.LastModified, 4)
        strFolder = strMonth & "." & strYear & "\"
            strPathMove = strPath & strYear & "\" & strFolder
            SubCheckFolder strYear, strPath, strPathMove
            Set objF = objFSO.GetFile(objFile.Name)
            objF.Move strPathMove
    End If    
Next

GenericSendmail SMTPserver, From, Recipient, Subject, Message

Sub SubCheckFolder (strYear, strPath, strPathMove)
    If objFSO.FolderExists(strPath & strYear & "\") Then
        If objFSO.FolderExists(strPathMove) Then
        Else
        objFSO.CreateFolder(strPathMove)
        End If
    Else
         objFSO.CreateFolder(strPath & strYear & "\")
    objFSO.CreateFolder(strPathMove)
    End If
End Sub

Sub GenericSendmail (SMTPserver, From, Recipient, Subject, Message)
    SMTPServer = "outlook.contora.ru"
    Recipient = "admin@contora.ru, a@contora.ru"
    From = "admin@contora.ru"
    Subject = "Факсы разобранны!"
    Message = "Факсы разобранны!!!" & vbcrlf & "Ура!!!"
    
    set msg = WScript.CreateObject("CDO.Message")
    msg.From = From
    msg.To = Recipient
    msg.Subject = Subject
    msg.TextBody = Message
    msg.Configuration.Fields ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
    msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    msg.Configuration.Fields.Update
    msg.Send
End Sub
Автор: ViSiToR
Дата сообщения: 09.02.2007 19:01
Подскажите, как использовать выход из цикла:


Код: While 1
Exit Loop
Wen
Автор: igor_andreev
Дата сообщения: 09.02.2007 19:58
ViSiToR

Цитата:
как использовать выход из цикла

По какому условию выход?

Цитата:
и где можно про это почитать

Windows Script 5.6 Documentation

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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