Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 3 / 1
Регистрация: 22.06.2013
Сообщений: 45

Как реализовать универсальную форму ввода пароля?

28.11.2013, 21:49. Показов 1654. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите чайнику как спецы решают такую задачу.
В стандартном InputBox не нашел возможности замены вводимого на символы типа * (как в TextBox passwordchar) .
1. Естесссно, создать свою форму, тем более, что она проста, как нигерйский валенок. Как шаблон можно сохранить.
Однако в некоторых проектах, где эта форма может понадобиться один раз на тысячу запусков, вроде как-то нерационально автоматически ее включать.
Затеял обсуждение здесь:
Динамическое создание формы
Идеальным выглядит написать свою универсальную функцию вместо InputBox, которая программно создает форму и возвращает введенный пароль. Но, как я понял, стандартными средствами VB, программно создать форму "с нуля" низзя, можно только копию уже имеющейся, потом очистить и добавить все, что надо. Видимо, так и сделаю. Однако, если исходная форма громоздкая, то ее "клонирование" может тормозить прогу. А если проект ваще без форм?..
2. Можно научить InputBox звездочки показывать?
Нашел в сети заковыристый способ через API. Код переписал.
Этот код вешает прогу, выдавая сразу четыре разных сообщения об ошибках
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Option Explicit
  'код модуля. А в форме кнопка и метка.
      Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
      Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
      Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
      Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
      Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
      Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
      Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const WH_CBT = 5
      Private Const HCBT_ACTIVATE = 5
      Private m_lMsgHandle As Long
      Private m_lhHook As Long
      Private Const ES_CENTER = &H1&
    Private Function GetMessageBoxHandle(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    
      If lMsg = HCBT_ACTIVATE Then
      m_lMsgHandle = wParam
      UnhookWindowsHookEx m_lhHook
      m_lhHook = 0
      End If
      GetMessageBoxHandle = False
    End Function
    Private Sub InputBoxTimerUpdateEvent(hWnd As Long, uiMsg As Long, idEvent As Long, dwTime As Long)
    
      Dim res As Long
      If m_lMsgHandle = 0 Then Exit Sub
      res = FindWindowEx(m_lMsgHandle, 0, Edit, "")
      SendMessage res, 1052, 42, ByVal 0&
      SendMessage res, &H441, ES_CENTER, ByVal 0&
    End Sub
    Public Function InputBoxEx(sMsgText As String, Optional sTitle As String = "D.G.Secured InputBox") As String
    
      Dim lTimerUpdate As Long
      m_lhHook = SetWindowsHookEx(WH_CBT, AddressOf GetMessageBoxHandle, App.hInstance, GetCurrentThreadId())
      lTimerUpdate = SetTimer(0, 0, 0, AddressOf InputBoxTimerUpdateEvent)
      InputBoxEx = InputBox(sMsgText, sTitle)
      KillTimer 0, lTimerUpdate
    End Function
3. Может, как-то еще?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2013, 21:49
Ответы с готовыми решениями:

Как реализовать запись нового пароля из текстового поля в таблицу базы
Привет. Имеется таблица в базе данных вот с такими столбцами: NumberUser, Password, FullName. В поле со списком я должен выбирать фамилию...

Как сделать поле ввода пароля не через новую форму?
Есть форма, в которой нужно добавить разделение на пользователя и администратора. Чтобы при клике на пункт меню "редактировать"...

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода пароля
4.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное для ввода пароля.

5
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
28.11.2013, 21:59
Цитата Сообщение от chai_nick Посмотреть сообщение
Можно научить InputBox звездочки показывать?
Можно. Вот пример {Цензура}
2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
28.11.2013, 22:17
Так ведь есть шаблон, уже с кодом, или нужно что-то другое?
Миниатюры
Как реализовать универсальную форму ввода пароля?   Как реализовать универсальную форму ввода пароля?  
1
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
28.11.2013, 22:20
Цитата Сообщение от SoftIce Посмотреть сообщение
Так ведь есть шаблон, уже с кодом, или нужно что-то другое?
Ему не нужны формы в проекте.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.11.2013, 22:31
Цитата Сообщение от chai_nick Посмотреть сообщение
Однако в некоторых проектах, где эта форма может понадобиться один раз на тысячу запусков, вроде как-то нерационально автоматически ее включать.
Надуманная проблема. Какая разница, сколько в проекте форм, есть ли скрытые формы и как это вообще может быть нерационально?
Нерационально включать в проект код на десяток-другой строк, работу которого вы не совсем понимаете, а добавить стандартный диалог форму Логин-Пароль, что может быть проще?
2
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
28.11.2013, 23:46
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Вот вариант, убрано все лишнее.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
 
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
Private Const WH_CBT As Long = 5
Private Const EM_SETPASSWORDCHAR As Long = &HCC
Private Const HCBT_ACTIVATE As Long = 5
 
Dim hHook As Long
 
Public Function ExInputBox(Prompt As String, Optional Title, Optional Default, _
                           Optional Xpos, Optional ypos, Optional HelpFile, Optional Context) As String
    hHook = SetWindowsHookEx(WH_CBT, AddressOf InputBoxProc, App.hInstance, App.ThreadID())                 ' Установка CBT хука
    ExInputBox = InputBox(Prompt, Title, Default, Xpos, ypos, HelpFile, Context)                            ' Вызов InputBox'а
End Function
 
Private Function InputBoxProc(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long       ' Процедура хука
    If lMsg = HCBT_ACTIVATE Then                                                                            ' При активации окна
        Dim hEdit As Long                                                                                   ' Хендл текстбокса
        hEdit = FindWindowEx(wParam, 0, "Edit", vbNullString)                                               ' Ищем текстбокс
        SendMessage hEdit, EM_SETPASSWORDCHAR, Asc("*"), ByVal 0                                            ' Устанавливаем текстбоксу стиль ввода пароля
        UnhookWindowsHookEx hHook                                                                           ' Отключаем хук
    End If
End Function
    
Sub Main()
    Debug.Print ExInputBox("Password")                                                                      ' Проверка
End Sub
Вложения
Тип файла: rar SubclassInputBox.rar (1.3 Кб, 10 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2013, 23:46
Помогаю со студенческими работами здесь

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

Пытаюсь сделать форму ввода пароля, но не выходит. СРОЧНО!
Всем привет пытаюсь сделать форму ввода пароля, но не выходит, файл формы и файл авторизации лежит в одной папке, но он почему-то не может...

Разделенный вход через форму ввода пароля и логина
Здравствуйте! Имеется БД с таблицами, формами, отчетами, макросами и модулем VBA. Мне нужно сделать разделенный вход через форму ввода...

После ввода пароля открыть одну форму и закрыть другую
Всем добрый вечер народ помогите плиз) Надо чтобы после ввода пароля открывалась первая форма и скрывалась 8 делал так но выдаёт ошибку...

Ввод данных в форму ввода логина и пароля на интернет-странице
Добрый день! Подскажите, как создать .bat файл для ввода пароля и логина на внутреннем сайте в локальной сети (при заходе по IP-адресу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru