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

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

Автор: LEX1
Дата сообщения: 29.08.2006 16:21
mozers

Цитата:
oStream.Type = adTypeBinary

Разве? По моему, так правильней:

Код: oStream.Type = 1
Автор: ViSiToR
Дата сообщения: 30.08.2006 07:06
LEX1

Цитата:
Вот рабочий вариант:


Не совсем - Например с такой ссылкой http://my.opera.com/Creat0R/homes/files/curl%26test.zip выдаёт ошибку (Неопознанная ошибка - По видемому в этой строчке: oXmlHttp.Send).
Автор: mozers
Дата сообщения: 30.08.2006 10:20
LEX1
Ты абсолютно прав. (я скопировал процедуру, опустив определения констант)
Ща переписал все заново и вставил в свой пост. Добавил еще вариант сохранения без использования "AdoDB.Stream".
На winscripter есть еще примерчик с использованием "InetCtls.Inet", но у меня, гад на этот класс ругается что "не лицензирован" У тебя нету ключика? - А я бы поделился ключем на "MSComDlg.CommonDialog" (тоже, кстати, весьма интересный компонент

ViSiToR
Не... Тут, имхо, дело - в самом компоненте "Microsoft.XMLHTTP". Не слишком он умный, не всегда может загрузить. Пользуй WGET - он все закачает
так и не сообщил ты мне свой адрес - а в том скрипте, что я говрил, как раз 2 варианта загрузки (с помощью "Microsoft.XMLHTTP" и WGET)
Автор: LEX1
Дата сообщения: 30.08.2006 14:03
mozers

Цитата:
у меня, гад на этот класс ругается

По этому поводу

Цитата:
Не слишком он умный, не всегда может загрузить

Угу, а по той ссылке редирект.

Добавлено:

Цитата:
Пользуй WGET - он все закачает

Возможно, лучше подойдёт cURL (если достаточно закачать только часть файла).
Автор: mozers
Дата сообщения: 30.08.2006 17:33
LEX1
Спасибо, помогло Как обещал - регистрилка "MSComDlg.CommonDialog":
Код: REGEDIT4

[HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905]
@="gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"

[HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908]
@="yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun"
Автор: BigPtica
Дата сообщения: 01.09.2006 08:22
Уважаемые. Может кто-нить подсказать, как с помощью скриптов поменять у службы действия, которые она должна выполнять после первого сбоя, второго сбоя и т.д.

Заранее благодарен.
Автор: mozers
Дата сообщения: 01.09.2006 09:12
BigPtica
Имхо сюда будет более в тему... (Тут - поделки не связанные с администрированием).
Автор: LEX1
Дата сообщения: 01.10.2006 18:10
Не соображу как избавиться от четырёх IF


Код: Function StringToUTF(TextString)
    sResult = ""
    For i = 1 To Len(TextString)
        Txt = Mid(TextString,i,1)
        code = Asc(Txt)

        If code >= 192 And code <= 239 Then Txt = Chr(208) & Chr(code - 48)
        If code >= 240 And code <= 255 Then Txt = Chr(209) & Chr(code - 112)
        If code = 168 Then Txt = Chr(208) & Chr(129)
        If code = 184 Then Txt = Chr(209) & Chr(145)

        sResult = sResult & Txt
    Next
    StringToUTF=sResult
End Function

MsgBox(StringToUTF("йцукен"))
Автор: Troitsky
Дата сообщения: 01.10.2006 23:15
LEX1

Цитата:
Не соображу как избавиться от четырёх IF

Применить конструкцию If...Then...Else. Так по крайней мере условие четыре раза подряд проверяться не будет.

Код: If code >= 192 And code <= 239 Then
Txt = Chr(208) & Chr(code - 48)
ElseIf code >= 240 And code <= 255 Then
Txt = Chr(209) & Chr(code - 112)
ElseIf code = 168 Then
Txt = Chr(208) & Chr(129)
ElseIf code = 184 Then
Txt = Chr(209) & Chr(145)
End If
Автор: LEX1
Дата сообщения: 02.10.2006 08:32
Troitsky
Спасибо. Но как оказалось основные тормоза не здесь. Вот на это уходит 90% времени:

Цитата:
For i = 1 To Len(TextString)
    Txt = Mid(TextString,i,1)
        
    sResult = sResult & Txt
Next
StringToUTF = sResult

Может быть есть более быстрые альтернативы? Или есть другой способ преобразования ANSI в UTF-8?

Добавлено:
Проблема в конкатенации строк. Как бы её ускорить?
Автор: Troitsky
Дата сообщения: 02.10.2006 09:39
LEX1
По поводу того что можно улучшить. Длину строки TextString
Код: Len(TextString)
Автор: distance
Дата сообщения: 02.10.2006 13:58
LEX1
а может лучше поискать такую функцию в системе?
вряд ли твой интерпретируемый свкрипт быдет работать быстрее
Автор: LEX1
Дата сообщения: 02.10.2006 14:35
Troitsky

Цитата:
лучше посчитать заранее и загнать в переменную

Это да

distance
Меня уже устраивает скорость . Там был основной тормоз в конкатенации строк. После перехода на прямую запись в файл, скорость выросла на порядок и вполне достаточна.
Автор: Snerov1k
Дата сообщения: 17.10.2006 22:55
Всем привет, подскажите если не сложно.
Есть код (скопирован с http://www.nobat.ru/unzip.html) для The Bat! По нажатию горячей клавиши ВАТ! сохраняет вложение в нужную директорию, потом запускаем скрипт и передаем ему параметром название этой директории, скрипт проверяет на наличие архивов и запускает нужный архиватор.

Нужно дописать что бы скрипт перед запуском архиватора сверялся с файликом log.txt, из той же папки, где указанно количество частей. т.е. если 3=3 то идем дальше, если нет - то стоп.
Если прошли дальше и разархивировали - спросил ДА - НЕТ и если да - начал выполнять следующий скрипт (уже готовый).
Если возможно помогите плз, или скажите где и что( о чем) почитать.


Код:
[more]
Call GoScript()

'Пример запуска скрипта
'%winbootdir%\wscript.exe "E:\temp\bat\extr_att.vbs" -p"E:\temp\bat" -z"C:\nt-zip" -r"C:\WINRAR" -a"C:\ARJ"
'-------------------------
sub GoScript()
Dim obj, i
Dim Path, ZipPath, rarPath, arjPath, acePath, haPath
dim oArgs

' !!!лично у меня все архиваторы сложены в одну директорию Windows

Path=""
ZipPath=""
rarPath=""
arjPath=""
acePath=""
haPath=""

'test.vbs -p"E:\temp\bat" -z"d:\WINDOWS" -r"d:\WINDOWS" -a"d:\WINDOWS"
'закомментированы пути для АСЕ и НА -c"" -ha""

Set oArgs = Wscript.Arguments
if oArgs.Count>0 then
for i=0 to oArgs.Count-1
tmpstr = Replace(LCase(oArgs(i)), chr(34), "")
if instr(1, tmpstr, "-p")>0 then Path=mid(tmpstr, 3, len(tmpstr))
if instr(1, tmpstr, "-z")>0 then ZipPath=mid(tmpstr, 3, len(tmpstr))
if instr(1, tmpstr, "-r")>0 then rarPath=mid(tmpstr, 3, len(tmpstr))
if instr(1, tmpstr, "-a")>0 then arjPath=mid(tmpstr, 3, len(tmpstr))
if instr(1, tmpstr, "-c")>0 then acePath=mid(tmpstr, 3, len(tmpstr))
if instr(1, tmpstr, "-ha")>0 then haPath=mid(tmpstr, 4, len(tmpstr))
next
end if


if Path = "" then Path = "E:\temp\bat" 'директория куда сохранили файлики

if ZipPath = "" then ZipPath = "d:\WINDOWS" ' chr(34) & ZipPath & "\pkzip25.exe" & chr(34) & " -ext -over=all " & chr(34) & Path & "\*.zip" & chr(34) & " " & chr(34) & Path & chr(34)

' рекомендую использовать Info-ZIP взять её можно здесь ftp://ftp.uu.net/pub/archiving/zip/WIN32/
' или любую другую утилиту, которая понимает длинные имена

if rarPath = "" then rarPath = "d:\WINDOWS" ' chr(34) & rarPath & "\RAR.EXE" & chr(34) & " x -o+ -y " & chr(34) & Path & "\*.rar" & chr(34) & " " & chr(34) & Path & chr(34)
if arjPath = "" then arjPath = "d:\WINDOWS" ' arjPath & "\ARJ.EXE x -y " & chr(34) & Path & "\*.arj" & chr(34) & " " & chr(34) & Path & chr(34)
'if acePath = "" then acePath = ""
'if haPath = "" then haPath = ""

'Wscript.Sleep(15000) ' спим 15 секунд, покуда бат савает файлики
' это необходимо чтобы избежать возможного конфликта доступа к файлам

if CheckExt(Path, "zip")=true then 'проверяем наличие zip файлов в директории Path
RunCommand chr(34) & ZipPath & "\pkzip25.exe" & chr(34) & " -ext -over=all " & chr(34) & Path & "\*.zip" & chr(34) & " " & chr(34) & Path & chr(34) ' формируем командную строку
end if

if CheckExt(Path, "rar")=true then 'проверяем наличие rar файлов в директории Path
RunCommand chr(34) & rarPath & "\RAR.EXE" & chr(34) & " x -o+ -y " & chr(34) & Path & "\*.rar" & chr(34) & " " & chr(34) & Path & chr(34) ' формируем командную строку
end if

if CheckExt(Path, "arj")=true then 'проверяем наличие arj файлов в директории Path
RunCommand arjPath & "\ARJ.EXE x -y " & chr(34) & Path & "\*.arj" & chr(34) & " " & chr(34) & Path & chr(34)
end if

end sub
'----------------------------

sub RunCommand(stAppName)
Set obj = WScript.CreateObject("WScript.Shell")
obj.run stAppName, 1, true ' запущаем программку
Set obj = nothing
' MsgBox "Усё OK"
end sub

function CheckExt(DirName, Ext)
Dim fso, f, f1, fc, s
CheckExt = false
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(DirName)
Set fc = f.Files

Ext = LCase(Ext)
For Each f1 in fc
s = LCase(fso.GetExtensionName(f1.name))
if s=Ext then
CheckExt = true
Exit For
end if
Next
end function
[/more]

Зарнее спасибо!
Автор: FrodoHobbit
Дата сообщения: 26.10.2006 14:34
Привет

Вот есть БАТ файл, задаю ему параметр, например, 1, он создает папки, и копирует нужные мне файлы в зависимости от параметра.

Интересно, а можно написать программу, показывающую всего 1! окно, с кнопками.

1я - кнопка, нажатие - запуск БАТ ника с параметром 1,
2я - аналогично, с параметром 2.

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

Главное - чтобы не ставить никаких визуал студий, и прочего, чтобы код можно было написать в блокноте, можно так?

Спасибо!

Добавлено:
Понял, что можно использовать VBS, приблизительно так -

<FORM NAME=forma>
<INPUT TYPE="button" NAME="knopka"
VALUE="1">
<OnClick= (а вот тут надо запустить БАТник с параметром 1)>
</FORM>
<SCRIPT LANGUAGE="VBScript">
</SCRIPT>


А как запустить программу из VB-скрипта?
Автор: ViSiToR
Дата сообщения: 26.10.2006 15:28
FrodoHobbit

Цитата:
Интересно, а можно написать программу, показывающую всего 1! окно, с кнопками.

1я - кнопка, нажатие - запуск БАТ ника с параметром 1,
2я - аналогично, с параметром 2.


Примерно так:


Код: Set wshshell = CreateObject("WScript.Shell")
Answer = MsgBox ("'No' for run with param 1 - 'Yes' for run with param 2", 36)
If Answer = 7 Then wshshell.Run ("BatFile.bat param1")
If Answer = 6 Then wshshell.Run ("BatFile.bat param2")
Set wshshell = Nothing
WScript.Quit
Автор: FrodoHobbit
Дата сообщения: 26.10.2006 15:33
Спасибо большое, про AutoIt особенно очень интересно...
Автор: ViSiToR
Дата сообщения: 15.11.2006 17:34
Есть два вопроса:

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



2) Как получить текст из буфера обмена?

Это нужно для того, чтобы можно было скриптом запустить программу, передавая её в качестве параметра веделенный (ну или хотябы скопированный) текст.
Автор: LEX1
Дата сообщения: 15.11.2006 20:20
ViSiToR
1) Если это Opera, то только Ctrl+C.
2) Малореально.
Автор: Troitsky
Дата сообщения: 15.11.2006 21:08
ViSiToR

Цитата:
2) Как получить текст из буфера обмена?

Вопросы по клипборду уже задавались. На четвертой странице, например, есть ссылка.


Добавлено:

Цитата:
1) Как получить выделенный текст из активного окна, например из такого

В сторону WinAPI копать надо.
Автор: ViSiToR
Дата сообщения: 15.11.2006 22:04
LEX1
Да, это для оперы, с одной стороны просто интересно, а с другой, это решение одной задачки


Цитата:
2) Малореально.

Вполне реально ...

Troitsky
Большое спасибо, вот что я там нашёл:


Код: Set objHTM = CreateObject("htmlfile")
strTXT = objHTM.ParentWindow.ClipboardData.GetData("text")

If strTXT <> "" Then MsgBox strTXT
Автор: LEX1
Дата сообщения: 15.11.2006 22:26
Troitsky
1) Можно поподробней? Это окошко (OperaWindowClass), не реагирует на WM_GETTEXT.
Кстати, а из VBScript можно вызвать WinApi?

ViSiToR
2) Использование для этого IE немножко не политкорректно Да и скорость должна быть не очень.

Цитата:
Просто он сначала ответил на вопрос 2), а потом на 1

Поправил
Автор: ViSiToR
Дата сообщения: 15.11.2006 22:56
LEX1
Про пункт 2), я спрашивал:


Цитата:
Как получить текст из буфера обмена?


А Troitsky ответил на этот вопрос так:


Цитата:
Вопросы по клипборду уже задавались


Но про функции WinApi это касалось первого вопроса:


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


Просто он сначала ответил на вопрос 2), а потом на 1)
Автор: Funt123
Дата сообщения: 27.11.2006 21:04
товарисчи, а как запустить два проводника, что они открылисль как по команде "Окна слева направо"?
Автор: jONES1979
Дата сообщения: 02.12.2006 17:44
Funt123

можно почти похоже:

возьми ЗА ОСНОВУ это

[more]
Код:
Set objWMIService = GetObject("Winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next

Set objExplorer = CreateObject("InternetExplorer.Application")

objExplorer.Navigate "File:c\\\"
objExplorer.ToolBar = 1
objExplorer.StatusBar = 1
objExplorer.Left = (intHorizontal - 400) / 2
objExplorer.Top = (intVertical - 200) / 2
objExplorer.Width = 400
objExplorer.Height = 200
objExplorer.Visible = 1
Автор: WRFan
Дата сообщения: 14.12.2006 01:33
в связи с тем, что rapidshare.com стали использовать анимированные гиф картинки, решил накатать vbscript, позволяющий работать с анимированными гифами вне зависимости от настроек браузера, т.к. в IE я gif анимацию отключил, чтобы на нервы не действовала. только я кончил писать скрипт, как ровно через 5 минут рапидшарцы снова заменили анимированные картинки на обычные. глупо. но не в этом дело. скрипт получился довольно интересный и может ещё понадобится. надыбал на сайте микрозофта бесплатную, а по возможностям бесценную activex библиотеку под названием Windows Image Acquisition Library v2.0. позволяет работать с имеджами. думал буду заменять линки на ани-гифы в рапидшарском сорс коде на мой vbscript на лету с помощью проксомитрона. но теперь неважно. а скрипт получился следующего содержания:


Код:
<SCRIPT LANGUAGE="VBSCRIPT">
'Set Http = CreateObject("MSXMLHTTP2.ServerXMLHTTPHTTP")
'Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")
Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
Set AdoStream = CreateObject("ADODB.Stream")
url = "http://127.0.0.1:85/asp/access4417101.gif" 'only for testing purposes
p=instrrev(url,"/")
filename = right(url,len(url)-p)
XMLHTTP.open "GET", url, False
XMLHTTP.Send
Set ADOStream = CreateObject("ADODB.Stream")
ADOStream.type = 1
ADOStream.Open
ADOStream.Write XMLHTTP.responseBody
Set filesys1 = CreateObject("Scripting.FileSystemObject")
Set folder = filesys1.GetSpecialFolder(2)
ADOStream.SaveToFile folder & "\" & filename, 2
ADOStream.Close

'---------------------------------------------

Dim Img 'As ImageFile
Dim IP 'As ImageProcess
Dim v 'As Vector

Set Img = CreateObject("WIA.ImageFile")
Set IP = CreateObject("WIA.ImageProcess")
Set v = CreateObject("WIA.Vector")

Img.LoadFile folder & "\" & filename

'If Img.IsAnimated Then
'msgbox "This is an animated image."
'Else
'msgbox "This is not an animated image."
'end if

'Img.ActiveFrame = Img.FrameCount
'Img.ActiveFrame = 12
for each oProperty in Img.Properties
if IsObject(oProperty.Value) Then
set oVector = oProperty.Value
for i = 1 to oVector.Count 'number of frames
if oVector(i) >= 15000 AND oVector(i) < 25000 then Img.ActiveFrame = i

'Select Case oVector(i)    
'Case 19928:
'Img.ActiveFrame = i
'msgbox Img.ActiveFrame
'End Select
next
end if
next

'---------------------------------------------

IP.Filters.Add IP.FilterInfos("Scale").FilterID
IP.Filters(1).Properties("MaximumWidth") = 350
IP.Filters(1).Properties("MaximumHeight") = 250
Set Img = IP.Apply(Img)
Img.SaveFile folder & "\hacked_" & filename

'---------------------------------------------

document.write("<IMG SRC=" & folder & "\hacked_" & filename & ">")
set filesys2 = CreateObject ("Scripting.FileSystemObject")
set demofile = filesys2.GetFile(folder & "\hacked_" & filename)
set demofile2 = filesys2.GetFile(folder & "\" & filename)
demofile.Delete
demofile2.Delete

</SCRIPT>
Автор: jONES1979
Дата сообщения: 14.12.2006 07:14
WRFan

Очень познавательно.
А для чего это было?
Автор: mozers
Дата сообщения: 14.12.2006 10:31
WRFan
Круто И чего только нельзя сделать на WSH при наличии головы на плечах!
Так уж брякну по-мелочи (из вредности
- загружать файло можно и без "ADODB.Stream" (пример)
- ссылка на вышеупомянутую библиотеку - Windows Image Acquisition Library v2.0
Автор: jONES1979
Дата сообщения: 14.12.2006 13:28
Funt123

Кстати, обнаружил сегодня способ лучше.
Цитата:
товарисчи, а как запустить два проводника, что они открылисль как по команде "Окна слева направо"?


Тебе должно понравиться

http://groups.msn.com/windowsscript/shellapplication.msnw
Автор: WRFan
Дата сообщения: 14.12.2006 23:54

Цитата:
А для чего это было?

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


Цитата:
загружать файло можно и без "ADODB.Stream" (пример

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

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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