Простая программка. Есть возможность выбирать из каких символов будет пароль(ABC, abc, 123), все вместе или в любом соотношении. Так же настраивается длина пароля. Версия компилятора 4.31
Код:
;Глобальная переменная
Global simvol$
; Простая переменная
sp=10
;Константа окна
Enumeration
#Window_0
EndEnumeration
;Константы гаджетов
;
Enumeration
#Editor_0
#Button_0
#Button_1
#Button_2
#CheckBox_0
#CheckBox_1
#CheckBox_2
#Text_0
#Text_1
#Text_2
#spin
EndEnumeration
;Шрифты
Global FontID1
FontID1 = LoadFont(1, "Arial", 10)
Global FontID2
FontID2 = LoadFont(2, "Arial", 8)
; процедура открытия окна
Procedure Open_Window_0()
If OpenWindow(#Window_0, 400, 214, 268, 101, "Генератор паролей", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
; Далее размещаем гаджеты в окне
EditorGadget(#Editor_0, 10, 15, 150, 35)
ButtonGadget(#Button_0, 175, 15, 60, 20, "Сгенерить")
ButtonGadget(#Button_1, 175, 45, 90, 32, "Скопировать пароль",#PB_Button_MultiLine)
ButtonGadget(#Button_2, 250, 85, 15, 15, "?")
CheckBoxGadget(#CheckBox_0, 15, 55, 20, 20, "")
CheckBoxGadget(#CheckBox_1, 50, 50, 15, 30, "")
CheckBoxGadget(#CheckBox_2, 85, 55, 20, 20, "")
TextGadget(#Text_0, 15, 80, 15, 20, "ab")
TextGadget(#Text_1, 50, 80, 15, 15, "AB")
TextGadget(#Text_2, 85, 80, 15, 15, "12")
SpinGadget(#spin, 120, 57, 30, 20, 0, 100,#PB_Spin_Numeric)
EndIf
EndProcedure
; открываем окно с помощью вызова процедуры Open_Window_0()
Open_Window_0()
; Обновление текущего состояния SpinGadget
SetGadgetState (#spin, sp)
; Блок с данными
DataSection
StringData:
Data.s "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"
StringData1:
Data.s "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
StringData2:
Data.s "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"
StringData3:
Data.s "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"
StringData4:
Data.s "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"
StringData5:
Data.s "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
StringData6:
Data.s "0","1","2","3","4","5","6","7","8","9"
EndDataSection
;Процедура чтения случайного символа из блока с данными
Procedure$ readsimvol(b)
d=Random(b) ;Присваеваем переменной d случайное число по значению не более заложенного в переменной b
For x=0 To d
Read.s simvol$ ;Читаем символы до номера d включительно, и записывает в переменную simvol$
Next x ;В переменной simvol$ сохраняется последнее значение.
EndProcedure
; начало цикла
Repeat
; Если произошло событие нажатия кнопки "?" , то вывести сообщение
If EventID = #PB_Event_Gadget
If EventGadget() = #Button_2
MessageRequester("О программе", "Автор Станислав Будинов")
EndIf
EndIf
; результаты гаджетов: CheckBoxGadget
rez1 = GetGadgetState(#CheckBox_0) ; rez1 равен "1" или "0"
rez2 = GetGadgetState(#CheckBox_1) ; rez2 равен "1" или "0"
rez3 = GetGadgetState(#CheckBox_2) ; rez3 равен "1" или "0"
; Условия для чтения блока с данными(какие символы использовать в пароле)
If rez1=1 And rez2=1 And rez3=1
y=0
b=61
EndIf
If rez1=1 And rez2=1 And rez3=0
y=1
b=51 ; переменная b кол-во символов в блоке минус "1" для цикла
EndIf ; переменная y определяет номер блока StringData (0-6)
If rez1=1 And rez2=0 And rez3=0
y=2
b=25
EndIf
If rez1=1 And rez2=0 And rez3=1
y=3
b=35
EndIf
If rez1=0 And rez2=1 And rez3=1
y=4
b=35
EndIf
If rez1=0 And rez2=1 And rez3=0
y=5
b=25
EndIf
If rez1=0 And rez2=0 And rez3=1
y=6
b=9
EndIf
; если выполнится нажатие кнопки, то выполнить процедуру: readsimvol(b)
; так же выбираем нужный блок для чтения
; так же складываем символы в общую строку "sohr$"
; и пишем результат(пароль) в EditorGadget
; получаем значение(длину пароля) с помощью SpinGadget
If EventID=#PB_Event_Gadget
If EventGadget()=#Button_0
If rez1=0 And rez2=0 And rez3=0 ; если не отмечен ни один пункт
MessageRequester("Сообщение","Выберите пожалуйста символы для вашего пароля") ;выводим сообщение
Goto net ;прыгаем на метку Net: и отключаем тем самым кнопку "сгенерить".
EndIf
sp = GetGadgetState(#spin) ; получаем значение SpinGadget
For gl=1 To sp
Select y ; обнуляем счетчики чтения блока на нуль при каждом прохождении цикла
Case 0 ; ну и конечно выбор нужного блока
Restore StringData
Case 1
Restore StringData1
Case 2
Restore StringData2
Case 3
Restore StringData3
Case 4
Restore StringData4
Case 5
Restore StringData5
Case 6
Restore StringData6
EndSelect
readsimvol(b)
sohr$=sohr$+simvol$ ; складываем каждый раз строку к предыдущей
clip$=sohr$ ; переносим результат(пароль) в переменную clip$ для копирования в буфер обмена
Next gl
SetGadgetText(#Editor_0,sohr$) ;пишем общий результат(пароль) в EditorGadget
EndIf
EndIf
; если происходит событие нажатия кнопки #Button_1, то копируем пароль в буфер обмена
If EventID = #PB_Event_Gadget
If EventGadget() = #Button_1
SetClipboardText(clip$)
EndIf
EndIf
Net:
sohr$="" ; обнуляем переменную "sohr$"
EventID = WaitWindowEvent(10) ;Стандартный вызов процедуры ожидания события в PureBasic
Until EventID = #PB_Event_CloseWindow ; если закрыли окно выход из цикла
End ; Конец всему делу венец