Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Определение кода нажатия кнопки (http://forum.oszone.net/showthread.php?t=293556)

Win4ester 06-01-2015 13:33 2452589

Определение кода нажатия кнопки
 
Здравствуйте. В общем проблема такая - делаю лабу по VBS. Задание такое:
Цитата:

Вывести примерно в правом нижнем углу экрана окно для ввода текстовой строки, показать эту строку в окне сообщений с кнопками Стоп,
Повтор и Пропустить и значком Question Mark. Затем в окне сообщений показать код нажатой кнопки при выходе из предыдущего окна.
Определить коды нажатия для всех кнопок.
В VBS я дуб дубом. Первую половину я сделал (окно вывел и все показал), а вот в последней части вообще допереть не могу - как показать код, и из какого окна. Перекопал хреналлион сайтов по сабжу - нигде ничерта нет( Помогите, плиз)

Iska 07-01-2015 03:17 2452858

Цитата:

Цитата Win4ester
Первую половину я сделал (окно вывел и все показал), »

И где Ваш код?

Цитата:

Цитата Win4ester
с кнопками Стоп,
Повтор и Пропустить »

Не существует такого. Есть «Abort/Retry/Ignore» из наиболее близкого.

Код:

Option Explicit

Const InputBoxNearestWidthInTwips  = 5495
Const InputBoxNearestHeightInTwips = 2390

With WScript.CreateObject("htmlfile").parentWindow.screen
        MsgBox MsgBox(InputBox("Введите текстовую строку:", "Ввод текстовой строки", "Текстовая строка", (.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips, (.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips), vbAbortRetryIgnore + vbQuestion, "Окно сообщения"), vbOKOnly, "Код нажатой кнопки"
End With

WScript.Quit 0


Win4ester 07-01-2015 13:47 2452959

Вложений: 1
Цитата:

Цитата Iska
И где Ваш код? »

Ой, пардоньте))
Цитата:

S = InputBox(vbLF & "Напишите строку текста:", _
"Окно ввода", , 20000, 12000)
Kod = MsgBox (S, vbAbortRetryIgnore+vbQuestion, _
"Окно сообщений")
Вот мой. Ваш почему-то ругается на .availWidth:
Файл 120835

Iska 07-01-2015 14:33 2452976

Цитата:

Цитата Win4ester
Ваш почему-то ругается на .availWidth: »

Надо полагать, есть какие-то ограничения, связанные с безопасностью данного объекта Automation в Вашей версии ОС и/или Internet Explorer. У меня под Windows XP SP3 и IE6 отрабатывает.

Давайте попробуем так:
Код:

Option Explicit

Const READYSTATE_COMPLETE = 4

Const InputBoxNearestWidthInTwips  = 5495
Const InputBoxNearestHeightInTwips = 2390


With WScript.CreateObject("InternetExplorer.Application")
        .Navigate "about:blank"
       
        Do
                WScript.Sleep 100
        Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
       
        With .document.parentWindow.screen
                MsgBox MsgBox(InputBox("Введите текстовую строку:", "Ввод текстовой строки", "Текстовая строка", (.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips, (.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips), vbAbortRetryIgnore + vbQuestion, "Окно сообщения"), vbOKOnly, "Код нажатой кнопки"
        End With
       
        .Quit
End With

WScript.Quit 0

Кстати, проверьте — не остаётся ли после отработки этого кода «висеть» в процессах «лишний» «iexplore.exe».

Win4ester 07-01-2015 14:43 2452980

Цитата:

Цитата Iska
не остаётся ли после отработки этого кода «висеть» в процессах «лишний» «iexplore.exe» »

Сейчас всё работает) Нет, iexplore не остаётся. Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением?

Iska 07-01-2015 14:58 2452990

Цитата:

Цитата Win4ester
Нет, iexplore не остаётся. »

Это хорошо. А какая у Вас версия IE?

Цитата:

Цитата Win4ester
Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением? »

Приблизительно. Точный размер окна InputBox зависит от настроек оформления (темы), от типа и размера системного шрифта, в случае длинного текста или заголовка — ещё и от их длины, я полагаю.

А так, да:
Код:

Const InputBoxNearestWidthInTwips  = 5495
Const InputBoxNearestHeightInTwips = 2390

— пересчитанные в твипы размеры окна InputBox с некоторым запасом. Положение окна по ширине:
Код:

(.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips
текущий доступный размер для окна по ширине (в пикселях) делится на разрешение устройства вывода (пикселей на дюйм) и умножается на число твипов в дюйме. Из полученного значения отнимается приблизительный размер окна InputBox по ширине. Для вычисления положения окна по высоте:
Код:

(.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips)
— рассуждения аналогичные.

Win4ester 07-01-2015 15:05 2452994

Цитата:

Цитата Iska
А какая у Вас версия IE? »

11.0.4. Спасибо огромное)
И ещё - я конечно понимаю, что наглею, но не могли бы вы помочь ещё с вот этим :angel::
Цитата:

Задайте с помощью функции Array значения 5-ти элементам массива,
представляющим собой геометрическую прогрессию. Покажите все
данные в окне сообщений.

Iska 07-01-2015 15:24 2453002

Цитата:

Цитата Win4ester
11.0.4. »

Спасибо, ясно.

Цитата:

Цитата Win4ester
с вот этим »

Код:

Option Explicit

Dim arrGeometricProgression

Dim i
Dim elem


arrGeometricProgression = Array(2, 4, 8, 16, 32)

MsgBox Join(arrGeometricProgression, vbLf)

For i = LBound(arrGeometricProgression) To UBound(arrGeometricProgression)
        MsgBox arrGeometricProgression(i)
Next

For Each elem In arrGeometricProgression
        MsgBox elem
Next

WScript.Quit 0

Три способа вывода: один — все элементы в одном окне, и два варианта вывода поэлементно.


Время: 00:40.

Время: 00:40.
© OSzone.net 2001-