PDA

Показать полную графическую версию : [решено] VBS - Спрятанный ввод


Ragnazar
01-09-2012, 19:30
Нужна функция вроде InputBox и при вводе отображались звездочки
Но отправлялась именно введенная информация а не звездочки
(Нужно для формы ввода пароля)

Iska
02-09-2012, 10:52
Ragnazar, можете попробовать так:
Option Explicit

Const READYSTATE_COMPLETE = 4

Dim objIE
Dim objWindow

Dim boolDone
Dim strPassword


Set objIE = WScript.CreateObject("InternetExplorer.Application", "IE_")

With objIE
.Navigate "about:blank"

Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

.AddressBar = False
.MenuBar = False
.StatusBar = False
.ToolBar = False

With .Document
.write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Strict//EN"">" & vbCrLf & _
"<html>" & vbCrLf & _
" <head>" & vbCrLf & _
" <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>" & vbCrLf & _
" <meta http-equiv='Content-Language' content='ru'>" & vbCrLf & _
" <title>Input password</title>" & vbCrLf & _
" <style>" & vbCrLf & _
" body {" & vbCrLf & _
" margin: 1em 1em 1em 1em;" & vbCrLf & _
" color: MidnightBlue;" & vbCrLf & _
" background-color: LightSteelBlue" & vbCrLf & _
" }" & vbCrLf & _
" </style>" & vbCrLf & _
" </head>" & vbCrLf & _
" <body>" & vbCrLf & _
" <label for='sPassword' accesskey='P'>Enter <u>p</u>assword:</label>" & vbCrLf & _
" <input type='password' name='sPassword' id='sPassword' size='50'>" & vbCrLf & _
" <input type='button' value='OK' name='OK'>" & vbCrLf & _
" <input type='button' value='Отмена' name='Cancel'>" & vbCrLf & _
" </body>" & vbCrLf & _
"</html>"

.getElementsByName("OK").item(0).onclick = GetRef("IEButtonClick")
.getElementsByName("Cancel").item(0).onclick = GetRef("IEButtonClick")

With .getElementByID("sPassword")
.onKeyPress = GetRef("IEOnKeyPress")
.focus
End With

Set objWindow = .parentWindow

With .Body
objWindow.resizeTo .scrollWidth + 25, .scrollHeight + 32
objWindow.moveTo (objWindow.screen.availWidth - .offsetWidth) \ 2, (objWindow.screen.availHeight - .offsetHeight) \ 2
End With

Set objWindow = Nothing

'.getElementByID("sPassword").focus
End With

.Visible = True

boolDone = False
strPassword = Empty

Do
WScript.Sleep 100
Loop Until boolDone

On Error Resume Next
.Quit
On Error Goto 0
End With

Set objIE = Nothing

If Not IsEmpty(strPassword) Then
WScript.Echo "Password is [" & strPassword & "]"
Else
WScript.Echo "Password is not entered"
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub IE_OnQuit
boolDone = True
End Sub
'=============================================================================

'=============================================================================
Sub IEButtonClick
Select Case Me.Name
Case "OK"
strPassword = objIE.Document.getElementByID("sPassword").Value
boolDone = True
Case "Cancel"
boolDone = True
Case Else
' Nothing to do
End Select
End Sub
'=============================================================================

'=============================================================================
Sub IEOnKeyPress
Select Case Me.ownerDocument.parentWindow.event.keyCode
Case 13
strPassword = Me.Value
boolDone = True
Case 27
boolDone = True
Case Else
' Nothing to do
End Select
End Sub
'=============================================================================

Ragnazar
03-09-2012, 16:05
Спасибо!
Только вот при пустом пароле (ничего не вводя) выдает Password is []
Тоесть else почему-то не работает

Можно-ли как-то изменить активное окно? А то папка со скриптом остается активным

Iska
03-09-2012, 17:00
Только вот при пустом пароле (ничего не вводя) выдает Password is [] »
Ragnazar, всё верно. Ничего не ввели и нажали «OK»/«Enter» — пароль пустой. Нажали «Отмена»/«Esc» или просто закрыли диалог — то есть, отказались от ввода пароля — это другое. Попробуйте.

Можно-ли как-то изменить активное окно? А то папка со скриптом остается активным »
Вопрос не понятен. Поясните.

Ragnazar
05-09-2012, 09:25
Когда создается некое окно (от боксов до ie) то они как-то на заднем плане.
Что-бы они стали активными на них надо нажать но можно-ли автоматически это сделать?

Iska
05-09-2012, 11:37
Ragnazar, понятней не стало. Что за «боксы»?

Ragnazar
06-09-2012, 19:01
InputBox NsgBox Wscript.Echo
Когда на alt+Tab нажимаешь то меняется активное окно

Iska
06-09-2012, 20:19
Ясно. «Боксы» — это окна диалогов.

Теперь переведите всю фразу на русский язык:
Когда создается некое окно (от боксов до ie) то они как-то на заднем плане. »

Ragnazar
06-09-2012, 20:28
Когда создается диалоговое окно то что-бы оно было поверх всех окон мне нужно на него нажать
Или выбрать через Alt+Tab
Или нажать на него на панели Пуск (В нижней части где все включеные окна)

Iska
07-09-2012, 08:14
Когда создается диалоговое окно »
Речь идёт всё ещё про это окно, создаваемое скриптом:

http://img805.imageshack.us/img805/739/image00020120907081326.png

?

Ragnazar
07-09-2012, 08:27
Да и про него тоже
http://s56.radikal.ru/i152/1209/7c/8a90904bdfad.jpg

Iska
07-09-2012, 08:33
У меня такого не происходит.

Запишите короткое видео, демонстрирующее данное поведение с данным скриптом.

Ragnazar
07-09-2012, 09:09
http://www.youtube.com/watch?v=KM2dLMvkMmU&feature=youtu.be

Iska
07-09-2012, 10:26
Ragnazar, насколько я понимаю, у Вас проблема в том окне, откуда Вы запускаете скрипты. Что это за окно? Оно не похоже на окно Проводника.

Ragnazar
07-09-2012, 10:33
Да. Это Explorer++ (Проводник со вкладками)
Но такая проблема из видео только с этим скриптом

Iska
07-09-2012, 11:25
Ragnazar, скажите, наблюдается ли у Вас та же проблема при использовании обычного Проводника?

Ragnazar
07-09-2012, 12:08
Да.

Iska
07-09-2012, 13:28
Ragnazar, сожалею, у меня подобного не происходит.




© OSzone.net 2001-2012