Новичок
Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005
Репутация: нет Всего: 1
|
Код | format PE GUI 4.0 entry start
include 'win32a.inc'
IDC_EDIT = 100 IDC_BUTTON = 101 ;................................................................... ;СЕКЦИЯ ДАННЫХ section '.data' data readable writeable classb db 'static',0 textb1 db '№1:',0 textb2 db '№2:',0 textb3 db '№3:',0 textb4 db '№3:',0 textb5 db '№4:',0 textb6 db '№5:',0 _class db 'GetNumberClass',0 _title db 'ПРИВІТ',0 text1 db 'точка',0 _edit db 'edit',0 _button db 'button',0 _button_tit db 'НАТИСНИ',0 _button_tit1 db 'НАТИСНИ_1',0 _error db 'Ошибка создания окна',0 _error_num db 'Сначала введите число до 8 знаков',0
wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class ;...........................................................................
section '.data?' data readable writeable
msg MSG hEdit dd ? flag dd ? iVar dd ? buf rd 16 ;................................................................... ;СЕКЦИЯ КОДА section '.code' code readable executable
start: invoke GetModuleHandle,0 mov [wc.hInstance],eax invoke LoadIcon,0,IDI_APPLICATION mov [wc.hIcon],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClass,wc test eax,eax jz error
invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,\ 128,128,756,292,NULL,NULL,[wc.hInstance],NULL test eax,eax jz error
;invoke CreateFile,'COM1',GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL msg_loop: invoke GetMessage,msg,NULL,0,0 cmp eax,1 jb end_loop jne msg_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop
error: invoke MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK
end_loop: invoke ExitProcess,[msg.wParam]
proc WindowProc hwnd,wmsg,wparam,lparam push ebx esi edi cmp [wmsg],WM_CREATE je .wmcreate cmp [wmsg],WM_COMMAND je .wmcommand cmp [wmsg],WM_DESTROY je .wmdestroy .defwndproc: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp .ret ;................................................. .wmcreate: ;создадим редактор (стиль ES_NUMBER - ждем число) ;.OKNO_1: invoke CreateWindowEx,WS_EX_CLIENTEDGE,_edit, \ 0,WS_VISIBLE+WS_CHILDWINDOW+ES_NUMBER+ES_AUTOHSCROLL+ES_NOHIDESEL,\ 40,40,50,20,[hwnd],IDC_EDIT,[wc.hInstance],NULL mov [hEdit],eax ;дадим ему фокус ввода ; invoke SetFocus,eax ;ограничимсячислом с 8 знаками invoke SendMessage,[hEdit],EM_SETLIMITTEXT,8,0 ; это окно-- надпись над окном invoke CreateWindowEx,0,classb,textb1,WS_VISIBLE+WS_CHILD+ BS_PUSHBUTTON+WS_TABSTOP,\ 40,10,80,20,[hwnd],1001,[wc.hInstance],0 ; координаты в основном окне : 40- горизонталь ;invoke CreateFile,'COM1',GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL ; invoke CreateFile,'COM1',GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL
;...................................................... ;OKNO_2: ;создадим редактор (стиль ES_NUMBER - ждем число) invoke CreateWindowEx,WS_EX_CLIENTEDGE,_edit, \ 0,WS_VISIBLE+WS_CHILDWINDOW+ES_NUMBER+ES_AUTOHSCROLL+ES_NOHIDESEL,\ 140,40,50,20,[hwnd],IDC_EDIT,[wc.hInstance],NULL mov [hEdit],eax ;дадим ему фокус ввода invoke SetFocus,eax ;ограничимсячислом с 8 знаками invoke SendMessage,[hEdit],EM_SETLIMITTEXT,8,0 ; окно- имя окна2 invoke CreateWindowEx,0,classb,textb2,WS_VISIBLE+WS_CHILD+ BS_PUSHBUTTON+WS_TABSTOP,\ 140,10,80,20,[hwnd],1001,[wc.hInstance],0 ;...................................................... ;//////////////////////////////////////////////////////////////// ;создадим кнопку ; ЧОМУ ВОНА КОНТРОЛЮЄ ТІЛЬКИ ПЕРШЕ ВІКНО???? ; KNOPKA1: invoke CreateWindowEx,0,_button,_button_tit,\ WS_VISIBLE+WS_CHILDWINDOW+BS_DEFPUSHBUTTON,10,220,100,20,\ [hwnd],IDC_BUTTON,[wc.hInstance],NULL ; KNOPKA2: invoke CreateWindowEx,0,_button,_button_tit1,\ WS_VISIBLE+WS_CHILDWINDOW+BS_DEFPUSHBUTTON,120,220,100,20,\ [hwnd],IDC_BUTTON,[wc.hInstance],NULL ;.................................... invoke CreateFile,'COM1',GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL ;.................................................... jmp .finish .wmcommand: mov eax,[wparam] ;нажата кнопка? cmp ax,IDC_BUTTON jne .finish ;получим в EAX число из редактора (flag - флаг корректности, последний параметр 1-знаковое число) invoke GetDlgItemInt,[hwnd],IDC_EDIT,flag,1 cmp [flag],1 je .numok ;нет числа invoke MessageBox,[hwnd],_error_num,_title,MB_ICONINFORMATION+MB_OK ;дадим фокус редактору invoke SetFocus,[hEdit] jmp .finish .numok: ;сохраним в переменной mov [iVar],eax ;получим еще раз, но сейчас как строку
invoke GetDlgItemText,[hwnd],IDC_EDIT,buf,16 ;выведем
invoke MessageBox,[hwnd],buf,_title,MB_OK ;и завершимся
.wmdestroy: invoke PostQuitMessage,0 .finish: xor eax,eax .ret: pop edi esi ebx ret endp ;......................................................................
;ТАБЛИЦА ИМПОРТА section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL'
include 'api\kernel32.inc' include 'api\user32.inc'
|
Спасибо за ответ. Ну в этом коде я вставил invoke CreateFile,'COM1',GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL и при запуске ошибки не выдает, но и окно не открывает. Я понимаю что этой одной строчки не достаточно, но подскажите как же правильно написать обработчик прийома байт с компорта и вывести байт в окне, спасибо. Это сообщение отредактировал(а) pettimm - 24.10.2016, 20:31
|