Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Дек
Создание окна ввода пароля на чистом Ассемблере
Posted by obzor under assembler
Небольшая демка, которая создаёт «окно регистрации» с полем ввода пароля, и последующей его проверкой. Оригин пароль лежит в открытом виде, но это сейчас не важно.
Окно диалоговое, строится в секции-ресурсов, а создаётся функцией DialogBoxParam() вместо CreateWindowEx(). Как видно, здесь уже нет триады Get/Translate/DispatchMessage() — этим занимается сама система, которая по-сути и создаёт в фоне родительское окно чз CreateWindowEx(). Если юзер введёт валидный пароль, то из оконной процедуры «MyProc» (псевдоним WindowProc) вызывается пользовательская функция «GetMsgTime», чтобы сбоксить приветствие + время мессаги, полученное через GetMessageTime(). Кстати последняя возвращает время в миллисек с последнего запуска системы, а не дату/день/час.
; fasm-code
;-------------
format pe gui
include 'win32ax.inc'
include 'encoding\win1251.inc'
;//---------------------------
.data
ID_BOX = 102
pass db '123456789',0
okey db 'Спасибо за регистрацию!',10
buff rb 256
;//---------------------------
.code
start: invoke DialogBoxParam,0,69,0,MyProc,0 ; создаём окно
invoke ExitProcess,0
; Процедура обработки оконных сообщений (имеет 4 параметра из структуры MSG)
proc MyProc, hndl, msg, wparam, lparam
cmp [msg],WM_COMMAND
je @cmd ;<--- если кнопки Ок/Отмена
cmp [msg],WM_CLOSE
je @close ;<--- если закрыли окно
jmp @next ;<---------- игнор остальных сообщений!
; Смотрим какие кнопки юзаются
@cmd: cmp [wparam],BN_CLICKED shl 16 + IDCANCEL
je @close ;<--- если да
cmp [wparam],BN_CLICKED shl 16 + IDOK
jne @next ;<--- если нет
; Значит буттон "ОК" - читаем 10 символов из бокса в свой буфер
invoke GetDlgItemText,[hndl],ID_BOX,buff,10
; Проверить строки на валидность
mov esi,buff ; источник
mov edi,pass ; приёмник
mov ecx,10 ; длина строки
repe cmpsb ; сравнить по-байтно..
jcxz @ok ; ок, если ECX=0 (совпало по всей длине)
invoke MessageBox,0,<'Пароль неверный!',0>,<'Тест',0>,0
jmp @close ; иначе: облом и на выход
@ok: call GetMsgTime ; good - зовём свою функцию
@close: invoke EndDialog,[hndl],-1 ; прихлопнуть окно
@next: xor eax,eax ; коллбэк системе
ret ; ^^^^^
endp ;<--------------- конец оконной процедуры
;-----------
GetMsgTime:
invoke GetMessageTime
cinvoke wsprintf,buff,<'Время сообщения: %u мс.',0>,eax
invoke MessageBox,0,okey,<'Тест',0>,0
ret
.end start ;<--------------- конец секции-кода ---------------
;//----------
; секция ресурсов с описанием окна
section '.rsrc' data resource readable
directory RT_DIALOG,dialogs
resource dialogs,69,LANG_ENGLISH+SUBLANG_DEFAULT,rsrc_dialog
dialog rsrc_dialog,'Окно регистрации',70,70,190,60,WS_CAPTION+WS_SYSMENU,,,'Segoe UI',8
dialogitem 'STATIC','Введите код:',-1,10,10,190,8,WS_VISIBLE
dialogitem 'EDIT','',ID_BOX,10,20,170,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP
dialogitem 'BUTTON','ОК',IDOK,85,40,45,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON
dialogitem 'BUTTON','Отмена',IDCANCEL,135,40,45,15,WS_VISIBLE+BS_PUSHBUTTON
enddialog
Теперь возьми fasm, распакуй архив в любою свою папку, запусти fasmw.exe, скопируй этот код в его окно, и нажми [F9] — результ должен быть примерно таким. Далее можешь добавлять в этот шаблон любые свои обработчики типа:
cmp [msg],WM_ххх
je @xxx
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)