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

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

Автор: ViSiToR
Дата сообщения: 28.12.2007 16:54
AndVGri

Цитата:
Вот ещё версия

О, то что нужно, спасибо!

P.S
А по поводу InputBox есть идеи? там тоже нельзя узнать нажал ли юзер Отмена, или он просто не ввёл ничего и нажал OK
Автор: AndVGri
Дата сообщения: 29.12.2007 02:51
ViSiToR
Так InputBox при нажатии "Отмена" возвращает пустую строку. Так что ориентируйся на это. С наступающим
Автор: Maza Faka
Дата сообщения: 29.12.2007 06:21
С наступающим всех!

Подскажите как средствами vbs получить PID процесса и убить его?
Автор: ViSiToR
Дата сообщения: 29.12.2007 10:24
AndVGri

Цитата:
InputBox при нажатии "Отмена" возвращает пустую строку

В этом то и проблема...

Во пример:


Код: Do
    Input = InputBox("Type something:", "Hi", "Default")
    If Input = "" Then Exit Do
    MsgBox "You typed: " & Input
Loop
Автор: AndVGri
Дата сообщения: 29.12.2007 10:42
ViSiToR
Ну так и спроси через

Код:
If Input = "" Then
If MsgBox("Вы ничего не ввели. Отменить выполение?", _
vbQuestion + vbYesNo, "Внимание") = vbYes Then
Exit Do
End If
End If
Автор: ViSiToR
Дата сообщения: 29.12.2007 11:21
AndVGri

Цитата:
так и спроси через

Это единственный способ, но не очень удобьный, имхо.


Цитата:
использовать Default, как действие по умолчанию?

Но как определить что юзер ввёл Default, и не нажал Отмена?

Ладно, не критично, мне это по сути для общего круга знании нужно было.
Спасибо ещё раз за помощь.
Автор: AndVGri
Дата сообщения: 29.12.2007 14:06
ViSiToR

Цитата:
Input = InputBox("Type something:", "Hi", "Default")

Так "Default" и есть текст по умолчанию, если пользователь ничего не вводил, то в Input = "Default", если он нажал "Ок", если нажата "Отмена", то будет Input = "". Если же стёр "Default" и ничего не ввёл, то Input = "", что будем считать эквивалентным "Отмена"
Автор: ViSiToR
Дата сообщения: 29.12.2007 14:23

Цитата:
Если же стёр "Default" и ничего не ввёл, то Input = "",

Будет ровняться "" вне зависимости от того, нажал ли юзер "ОК" или "Отмена" - поэтому определить что конкретно он нажал невозможно, мне например нужно узнать что юзер нажал ОК, но при этом хочет использовать значение по умолчанию, и этого проверить немогу, т.к он мог нажать Отмена - вот если бы функция устанавливала уровень ошибочности (Err.Number) при нажатии Отмена, тогда было бы удобнее.
Автор: mozers
Дата сообщения: 30.12.2007 16:48
chainick2006
Цитата:
как можно получить список зарегистрированных в системе COM-объектов

Код: Set objWMIService = GetObject([no]"winmgmts:\\.\root\CIMV2"[/no])
Set colItems = objWMIService.ExecQuery([no]"SELECT * FROM Win32_ClassicCOMClassSetting"[/no], , 48)
For Each objItem In colItems
If Len(objItem.ProgId) > 0 And (Len(objItem.InprocServer32) > 0 Or Len(objItem.LocalServer32) > 0) Then
Wscript.Echo [no]"Description: "[/no] & objItem.Description
If Len(objItem.VersionIndependentProgId) > 0 Then
Wscript.Echo [no]"VersionIndependentProgId: "[/no] & objItem.VersionIndependentProgId
Else
Wscript.Echo [no]"ProgId: "[/no] & objItem.ProgId
End If
Wscript.Echo [no]"ComponentId: "[/no] & objItem.ComponentId
If Len(objItem.InprocServer32) > 0 Then
Wscript.Echo [no]"InprocServer32: "[/no] & objItem.InprocServer32
Else
Wscript.Echo [no]"LocalServer32: "[/no] & objItem.LocalServer32
End If
Wscript.Echo [no]"------------------------------------"[/no]
End If
Next
Автор: Maza Faka
Дата сообщения: 31.12.2007 11:36
ViSiToR

Цитата:
Я нашёл только средствами WMI:

Сгодится! Спасибо!
Автор: IVAN8
Дата сообщения: 04.01.2008 18:20
Добрый день.
Есть скрипт для Indesign, который открывает линкованые eps в MathType.

Dim myInDesign
Dim MySel
Set myInDesign = CreateObject("InDesign.Application")
Set MySel = myInDesign.Selection
fname = MySel.Item(1).Graphics.Item(1).ItemLink.FilePath
Set WshShell = CreateObject("WScript.Shell")
ReturnCode = WshShell.Run("MathType.exe """+fname+"""", 1, True)

Как дописать или переделать скрипт так, чтобы MathType печатал формулу в PDF и закрывался.

Задача, на самом деле, состоит в том, чтобы из готовых eps’ов сделать PDF.
Я пытался просто печатать файлы списками, но в реестре есть только это

HKEY_CLASSES_ROOT\Applications\MathType.exe\shell\open\command
"C:\Program Files\MathType\MathType.exe" "%1"

Может, есть возможность написать некую программу, которая бы открывала с помощью MathType файлы из указанной папки, а затем отправляла на печеть?

Буду признателен за советы.
Автор: DonkeyHottt
Дата сообщения: 12.01.2008 18:15
Друзья, как с помощью vbs сделать активным окно, а потом закрыть его?
Скрипт уже есть просто надо дописать в него это дополнение.
Заранее спасибо.
Автор: ViSiToR
Дата сообщения: 12.01.2008 22:59
DonkeyHottt

Цитата:
как с помощью vbs сделать активным окно, а потом закрыть его?


Мне не известен vbs метод закрытия окна, но можно использовать сочетание клавиш Alt + F4...


Код: Set WshShell = CreateObject("WScript.Shell")

iActive = WinWaitActivate "Title", 5
If iActive = 1 Then WshShell.SendKeys("%{F4}")

Function WinWaitActivate(Title, TimeOut)
    TimerInit = Timer
    iRet = WshShell.AppActivate(Title)
    While iRet = 0
        Wscript.Sleep(10)
        iRet = WshShell.AppActivate(Title)
        If TimeOut > 0 And (Timer - TimerInit) >= TimeOut Then
            WinWaitActivate = 0
            Exit Function
        End If
    WEnd
    WinWaitActivate = 1
End Function
Автор: DonkeyHottt
Дата сообщения: 13.01.2008 14:02
ViSiToR
Спасибо за ответ, но к сожалению мои скромные знания vbs, а точнее их полное отсутствие не позволили воспользоваться им в полной мере. Дело вообще вот в чем.
Есть некий скрипт, который запускает программу (база данных Access) и вводит логин и пароль а потом нажимает несколько раз "OK" чтобы убрать всякие всплывающие окошки во время старта базы. И все, но остается одно окно (кстати у него нет кнопки на панели задач, как это для vbs считается окном или что это) и закрывать его приходится в ручную тыкая мышом в крестик. Хотелось бы автоматизировать этот процесс. Скрипт писал не я. Я только нашел похожий и методом тыка адаптировал его для своих целей. Но остается это окно...
Я добавил Ваш код в конец своего. Для опытов использую "PrimalScript". В Вашем коде заменил "Title" на название своего окна "Copy file (for non-reg users)"
В названии окна есть круглые скобки.
Получил:

Код: set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\...\2000.mdb"
WScript.Sleep 3000
WshShell.SendKeys "123"
WScript.Sleep 300
WshShell.SendKeys "{tab}"
WScript.Sleep 300
WshShell.SendKeys "456"
WScript.Sleep 300
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
Set WshShell = CreateObject("WScript.Shell")

iActive = WinWaitActivate "Copy file (for non-reg users)", 5
If iActive = 1 Then WshShell.SendKeys("%{F4}")

Function WinWaitActivate(Copy file (for non-reg users), TimeOut)
TimerInit = Timer
iRet = WshShell.AppActivate(Copy file (for non-reg users))
While iRet = 0
Wscript.Sleep(10)
iRet = WshShell.AppActivate(Copy file (for non-reg users))
If TimeOut > 0 And (Timer - TimerInit) >= TimeOut Then
WinWaitActivate = 0
Exit Function
End If
Wend
WinWaitActivate = 1
End Function
Автор: ViSiToR
Дата сообщения: 13.01.2008 15:14
DonkeyHottt

Цитата:
В Вашем коде заменил "Title" на название своего окна "Copy file (for non-reg users)"

Заменить то надо было, но не в самой же функции


Код: Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\...\2000.mdb"
WScript.Sleep 3000
WshShell.SendKeys "123"
WScript.Sleep 300
WshShell.SendKeys "{tab}"
WScript.Sleep 300
WshShell.SendKeys "456"
WScript.Sleep 300
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"
WshShell.SendKeys "{Enter}"

iActive = WinWaitActivate "Copy file (for non-reg users)", 5
If iActive = 1 Then WshShell.SendKeys("%{F4}")

Function WinWaitActivate(Title, TimeOut)
TimerInit = Timer
iRet = WshShell.AppActivate(Title)
While iRet = 0
Wscript.Sleep(10)
iRet = WshShell.AppActivate(Title)
If TimeOut > 0 And (Timer - TimerInit) >= TimeOut Then
WinWaitActivate = 0
Exit Function
End If
Wend
WinWaitActivate = 1
End Function
Автор: DonkeyHottt
Дата сообщения: 13.01.2008 17:16
ViSiToR
Опять этаже ошибка и в этой же строке.

Код: iActive = WinWaitActivate "Copy file (for non-reg users)", 5
Автор: Rush
Дата сообщения: 13.01.2008 18:40
DonkeyHottt

Цитата:
"Предпологается наличие окончания инструкции"
Компилятор не доходит до функции помоему. А что ему надо?

Ему нужны скобки в функции:

Код: iActive = WinWaitActivate ("Copy file (for non-reg users)", 5)
Автор: DonkeyHottt
Дата сообщения: 13.01.2008 19:42
Rush

Цитата:
Ему нужны скобки в функции:

точно! Сработало.
Окно закрылось, правда вместе со всей базой
Автор: DonkeyHottt
Дата сообщения: 15.01.2008 18:33
Этот код почему-то 2 раза нажимает Alt-F4.
То есть, если я руками запускаю базу и после старта делаю это окно активным мышкой и потом нажимаю Alt-F4 один раз, то закрывается только это маленькое окно, а вся база остается, если еще раз нажать Alt-F4, то уже закроется вся база. Вот и получается, что код нажимает Alt-F4 2 раза. Но почему, сам не пойму.
Автор: ViSiToR
Дата сообщения: 15.01.2008 21:30
DonkeyHottt

Цитата:
получается, что код нажимает Alt-F4 2 раза

Скрипт посылает один раз, видимо посылает именно когда главное окно активно.

Какой заголовок у главного окна?

P.S
Для подобной автоматизации лучше использовать AutoIt
Автор: DonkeyHottt
Дата сообщения: 15.01.2008 22:51
ViSiToR

Цитата:
Скрипт посылает один раз, видимо посылает именно когда главное окно активно.

Заменил в коде Wscript.Sleep(10) на Wscript.Sleep(300) и все заработало. Теперь главное окно не закрывается, а только маленькое! Спасибо!
И за AutoIt тоже спасибо. Сейчас буду вникать в него.
Автор: chainick2006
Дата сообщения: 28.01.2008 12:28
ребята, а как представить целое число с предваряющими нулями?
Например, есть число 58, а мне нужно его представить как 00058. Пробовал юзать функцию formatNumber, но ничего не получилось.

Спасибо!
Автор: alroy
Дата сообщения: 28.01.2008 12:51
chainick2006
Непонял тебе потом с ним как с числом работать или на экран вывести ??? если на экран то
MsgBox "000058"

Добавлено:
FormatNumber(expr[, numDigitsAfterDecimal[, includeLeadDigit[, useParens[, groupDigits]]]])

Возвращает строку, отформатированную в числовом формате. Параметр expr задаёт значение для форматирования. Если необязательные параметры не заданы, значения берутся из региональных настроек. Параметр numDigitsAfterDecimal задаёт количество десятичных разрядов справа от точки. Параметр includeLeadDigit задаёт отображение лидирующих нулей для дробных значений (true или false). Параметр useParens задаёт отображение скобок для отрицательных значений (true или false). Параметр groupDigits задаёт группировку разрядов с использованием разделителя из региональных настроек (true или false).

Автор: chainick2006
Дата сообщения: 29.01.2008 12:17
alroy, я организовую порядковый номер элемента и вывожу его как текст. т.е. имею я 58, 59, 60 , а авывести мне нужно 000058, 000059, 000060.

Просто в нормальных языках есть функция printf (sprintf), а здесь я такого не нашел. Ведь не циклом же их мне генерировать ((((

спасибо.
Автор: AndVGri
Дата сообщения: 30.01.2008 03:25
chainick2006
Зачем же циклом?

Код:
WScript.Echo NumberWithZero(6, 60)

Function NumberWithZero(AllZero, IntNumber)
Dim vCount, sPart
sPart = CStr(IntNumber)
vCount = Len(sPart)
If vCount < AllZero Then
NumberWithZero = String(AllZero - vCount, "0") & sPart
Else
NumberWithZero = sPart
End If
End Function
Автор: chainick2006
Дата сообщения: 30.01.2008 11:25
AndVGri, спасибо.

З.Ы. Как то не очень красиво в VB получается программировать
Автор: Smitis
Дата сообщения: 01.02.2008 21:46
chainick2006

Цитата:
Просто в нормальных языках есть функция printf (sprintf), а здесь я такого не нашел.


Цитата:
З.Ы. Как то не очень красиво в VB получается программировать

В "нормальных" языках есть библиотеки. И соответствующий объём таких языков большой. А без библиотек цикл всё равно пришлось бы писать. В небольших скриптовых языках библиотеки отсутствуют - плата за компактность. Вместо библиотек приходиться делать заготовки, подобные приведёным AndVGri и включать их при необходимости в код.
Автор: weart
Дата сообщения: 03.02.2008 19:04
Из разряда пригодится

1. Берем библиотеку XMD5.dll - регистрируем
2. А вот так это работает:


Код:

Dim MD_
Set objMD5 = CreateObject("XStandard.MD5")
MD_ = objMD5.GetCheckSumFromFile("c:\tmp\image.jpg")
MsgBox MD_

Автор: slech
Дата сообщения: 05.02.2008 09:26
всем привет. есть такой скриптик

objDay=Day(Date)
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "D:\BackUp\Server*" & objDay & ".rar", "\\192.168.0.1\BackUp\", TRUE

он копирует файлы у которых сегодняшнее число ?


Добавлено:
подскажите как в конце этого копирования добавить оповещение на email ?
спасибо.
Автор: AndVGri
Дата сообщения: 05.02.2008 09:34
slech
Нет он копирует файлы Server*5.rar. Если они создавались по какой-нибудь маске, где перед точкой расширения стоит день, то будут скопированы все файлы с началом имени Server и концом номером текущего дня (месяца и года нет, так что будут копирваться за все месяцы и годы имеющие такой же день)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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