Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. format PE GUI 4.0
  2. entry start
  3. include 'E:\FASM1\INCLUDE\win32a.inc'
  4. ;Идентификаторы элементов управления
  5. ID_BUTTONSHOWMESSAGE = 3
  6. ID_BUTTONCANCEL = 10h
  7. ID_MESSAGETEXT = 4
  8. ID_HELLO = 5
  9. ID_GOODMORNING = 6
  10. ID_GOODDAY = 7
  11. ID_GOODEVENING = 8
  12. ID_GOODNIGHT = 9
  13. ID_BUTTONS = 0Ah
  14. ID_OK = 0Bh
  15. ID_OKCANCEL = 0Ch
  16. ID_RETRYCANCEL = 0Dh
  17. ID_YESNO = 0Eh
  18. ID_YESNOCANCEL = 0Fh
  19. section '.code' code readable executable
  20.  start:invoke GetModuleHandle, 0
  21.  invoke DialogBoxParam, eax, 1, HWND_DESKTOP, DialogProc, 0
  22.  invoke ExitProcess, 0
  23.  proc DialogProc hwnddlg, msg, wparam, lparam
  24.  xor eax, eax
  25.  cmp [msg], WM_CLOSE
  26.  je FreeDialog
  27.  cmp [msg], WM_INITDIALOG
  28.  je InitDialog
  29.  cmp [msg], WM_COMMAND
  30.  jne ExitProc
  31.  mov eax, BN_CLICKED
  32.  shl eax, 10h
  33.  add eax, ID_BUTTONCANCEL
  34.  cmp [wparam], eax
  35.  je FreeDialog
  36.  sub eax, ID_BUTTONCANCEL
  37.  add eax, ID_BUTTONSHOWMESSAGE
  38.  cmp [wparam], eax
  39.  jne ExitProc
  40.  ;Путем последовательной проверки состояний переключателей
  41.  ;определяем выбранный текст
  42.  invoke IsDlgButtonChecked, [hwnddlg], ID_HELLO
  43.  cmp eax, BST_CHECKED
  44.  jne CheckGoodMorning
  45.  mov eax, _TextHello
  46.  mov dword [_TextMessage], eax
  47.  jmp FindButtons
  48.  CheckGoodMorning:
  49.  invoke IsDlgButtonChecked, [hwnddlg], ID_GOODMORNING
  50.  cmp eax, BST_CHECKED
  51.  jne CheckGoodDay
  52.  mov eax, _TextGoodMorning
  53.  mov dword [_TextMessage], eax
  54.  jmp FindButtons
  55. CheckGoodDay:
  56.  invoke IsDlgButtonChecked, [hwnddlg], ID_GOODDAY
  57.  cmp eax, BST_CHECKED
  58.  jne CheckGoodEvening
  59.  mov eax, _TextGoodDay
  60.  mov dword [_TextMessage], eax
  61.  jmp FindButtons
  62.  CheckGoodEvening:
  63.  invoke IsDlgButtonChecked, [hwnddlg], ID_GOODEVENING
  64.  cmp eax, BST_CHECKED
  65.  jne CheckGoodNight
  66.  mov eax, _TextGoodEvening
  67.  mov dword [_TextMessage], eax
  68.  jmp FindButtons
  69.  CheckGoodNight:
  70.  mov eax, _TextGoodNight
  71.  mov dword [_TextMessage], eax
  72.  jmp FindButtons
  73.  FindButtons:
  74.  ;Аналогично определяем выбранный набор кнопок
  75.  invoke IsDlgButtonChecked, [hwnddlg], ID_OK
  76.  cmp eax, BST_CHECKED
  77.  jne CheckOkCancel
  78.  mov dword [_Buttons], MB_OK
  79.  jmp ShowMessage
  80.  CheckOkCancel:
  81.  invoke IsDlgButtonChecked, [hwnddlg], ID_OKCANCEL
  82.  cmp eax, BST_CHECKED
  83.  jne CheckRetryCancel
  84.  mov dword [_Buttons], MB_OKCANCEL
  85.  jmp ShowMessage
  86.  CheckRetryCancel:
  87.  invoke IsDlgButtonChecked, [hwnddlg], ID_RETRYCANCEL
  88.  cmp eax, BST_CHECKED
  89.  jne CheckYesNo
  90.  mov dword [_Buttons], MB_RETRYCANCEL
  91.  jmp ShowMessage
  92.  CheckYesNo:
  93.  invoke IsDlgButtonChecked, [hwnddlg], ID_YESNO
  94.  cmp eax, BST_CHECKED
  95.  jne CheckYesNoCancel
  96.  mov dword [_Buttons], MB_YESNO
  97.  jmp ShowMessage
  98.  CheckYesNoCancel:
  99.  mov dword [_Buttons], MB_YESNOCANCEL
  100.  ShowMessage:
  101.  ;Выводим сообщение в соответствии с настройками
  102.  invoke MessageBox, [hwnddlg], dword [_TextMessage], dword
  103.  [_TextMessage], dword [_Buttons]
  104.  ret
  105.  FreeDialog:
  106.  invoke EndDialog, [hwnddlg], 0
  107.  ExitProc: ret
  108.  InitDialog:
  109.  ;Устанавливаем заголовки элементов управления
  110.  invoke SetDlgItemText, [hwnddlg], ID_BUTTONSHOWMESSAGE,
  111.  _TextButtonShowMessage
  112.  invoke SetDlgItemText, [hwnddlg], ID_BUTTONCANCEL,
  113.  _TextButtonCancel
  114.  invoke SetDlgItemText, [hwnddlg], ID_HELLO, _TextHello
  115.  invoke SetDlgItemText, [hwnddlg], ID_GOODMORNING,
  116.  _TextGoodMorning
  117.  invoke SetDlgItemText, [hwnddlg], ID_GOODDAY, _TextGoodDay
  118. invoke SetDlgItemText, [hwnddlg], ID_GOODEVENING,
  119.  _TextGoodEvening
  120.  invoke SetDlgItemText, [hwnddlg], ID_GOODNIGHT,
  121.  _TextGoodNight
  122.  invoke SetDlgItemText, [hwnddlg], ID_BUTTONS, _TextButtons
  123.  invoke SetDlgItemText, [hwnddlg], ID_MESSAGETEXT,
  124.  _TextMessages
  125.  invoke SetDlgItemText, [hwnddlg], ID_OK, _TextOk
  126.  invoke SetDlgItemText, [hwnddlg], ID_OKCANCEL, _TextOkCancel
  127.  invoke SetDlgItemText, [hwnddlg], ID_RETRYCANCEL,
  128.  _TextRetryCancel
  129.  invoke SetDlgItemText, [hwnddlg], ID_YESNO, _TextYesNo
  130.  invoke SetDlgItemText, [hwnddlg], ID_YESNOCANCEL,
  131.  _TextYesNoCancel
  132.  ;Устанавливаем переключатели, «выбранные» по умолчанию
  133.  invoke SendDlgItemMessage, [hwnddlg], ID_HELLO, BM_SETCHECK,
  134.  BST_CHECKED, 0
  135.  invoke SendDlgItemMessage, [hwnddlg], ID_OK, BM_SETCHECK,
  136.  BST_CHECKED, 0
  137.  xor eax, eax
  138.  ret
  139.  endp
  140. section '.data' readable
  141. _TextButtonShowMessage db 'Показать сообщение', 0
  142. _TextButtonCancel db 'Выход', 0
  143. _TextHello db 'Привет', 0
  144. _TextGoodMorning db 'Доброе утро', 0
  145. _TextGoodDay db 'Добрый день', 0
  146. _TextGoodEvening db 'Добрый вечер', 0
  147. _TextGoodNight db 'Добрая ночь', 0
  148. _TextButtons db 'Кнопки', 0
  149. _TextMessages db 'Сообщения', 0
  150. _TextOk db 'OK', 0
  151. _TextOkCancel db 'ОК, Отмена', 0h
  152. _TextRetryCancel db 'Повтор, Отмена', 0h
  153. _TextYesNo db 'Да, Нет', 0h
  154. _TextYesNoCancel db 'Да, Нет, Отмена', 0h
  155. section '.bss' data readable writeable
  156. ;Сюда будет записан выбранный набор кнопок
  157. _Buttons dd 00h
  158. ;Сюда будет записан адрес выбранного сообщения
  159. _TextMessage dd 00h
  160. section '.idata' import data readable writeable
  161.  library kernel, 'KERNEL32.DLL' ,\
  162.  user , 'USER32.DLL'
  163.  import kernel,\
  164.  GetModuleHandle, 'GetModuleHandleA',\
  165.  ExitProcess , 'ExitProcess'
  166.  import user,\
  167.  DialogBoxParam, 'DialogBoxParamA',\
  168.  EndDialog , 'EndDialog' ,\
  169.  MessageBox , 'MessageBoxA' ,\
  170.  IsDlgButtonChecked, 'IsDlgButtonChecked',\
  171.  SetDlgItemText, 'SetDlgItemTextA',\
  172.  SendDlgItemMessage, 'SendDlgItemMessageA'
  173. section '.rsrc' resource data readable
  174.  directory RT_DIALOG, dialogs
  175.  resource dialogs,\
  176.  1, LANG_NEUTRAL, WorkWithEdit
  177.  dialog WorkWithEdit, 'Checkbox', 0, 0, 170, 95,
  178.  WS_CAPTION+WS_SYSMENU+DS_CENTER
  179.  ;Рамка группы переключателей выбора текста сообщения
  180.  dialogitem 'Button', 'Message text', ID_MESSAGETEXT, 5, 5,
  181.  70, 65, WS_VISIBLE+BS_GROUPBOX
  182.  ;Группа переключателей выбора текста сообщения
  183.  dialogitem 'Button', '', ID_HELLO, 7, 15, 60, 12,
  184.  WS_VISIBLE+BS_AUTORADIOBUTTON+WS_GROUP
  185.  dialogitem 'Button', '', ID_GOODMORNING, 7, 25, 60, 12,
  186.  WS_VISIBLE+BS_AUTORADIOBUTTON
  187.  dialogitem 'Button', '', ID_GOODDAY, 7, 35, 60, 12,
  188.  WS_VISIBLE+BS_AUTORADIOBUTTON
  189.  dialogitem 'Button', '', ID_GOODEVENING, 7, 45, 65, 12,
  190.  WS_VISIBLE+BS_AUTORADIOBUTTON
  191.  dialogitem 'Button', '', ID_GOODNIGHT, 7, 55, 60, 12,
  192.  WS_VISIBLE+BS_AUTORADIOBUTTON
  193.  ;Рамка группы переключателей выбора набора кнопок
  194.  dialogitem 'Button', '', ID_BUTTONS, 80, 5, 80, 65,
  195.  WS_VISIBLE+BS_GROUPBOX
  196.  ;Группа переключателей выбора набора кнопок
  197.  dialogitem 'Button', '', ID_OK, 82, 15, 30, 12,
  198.  WS_VISIBLE+BS_AUTORADIOBUTTON+WS_GROUP
  199.  dialogitem 'Button', '', ID_OKCANCEL, 82, 25, 60, 12,
  200.  WS_VISIBLE+BS_AUTORADIOBUTTON
  201.  dialogitem 'Button', '', ID_RETRYCANCEL, 82, 35, 70, 12,
  202.  WS_VISIBLE+BS_AUTORADIOBUTTON
  203.  dialogitem 'Button', '', ID_YESNO, 82, 45, 60, 12,
  204.  WS_VISIBLE+BS_AUTORADIOBUTTON
  205.  dialogitem 'Button', '', ID_YESNOCANCEL, 82, 55, 70, 12,
  206.  WS_VISIBLE+BS_AUTORADIOBUTTON
  207.  dialogitem 'Button', '', ID_BUTTONSHOWMESSAGE , 5, 75, 80,
  208.  15, WS_VISIBLE
  209.  dialogitem 'Button', '', ID_BUTTONCANCEL , 90, 75, 60,
  210.  15, WS_VISIBLE
  211.  Enddialog
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement