format PE GUI 4.0 entry start include 'win32w.inc' section '.data' data readable writeable _class TCHAR 'FASMWIN32',0 _btncls TCHAR 'BUTTON',0 _btntxt TCHAR 'EXIT',0 _btntxt2 TCHAR 'notEXIT',0 _title TCHAR 'Win32 program template',0 _error TCHAR 'Startup failed.',0 _outfile TCHAR 'out.txt',0 wc WNDCLASS 0,WindowProc,0,0,0,0,0,COLOR_BTNFACE+1,0,_class msg MSG hwnd dd ? htest dd ? htest2 dd ? hfile dd ? result dw ? 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,256,192,0,0,[wc.hInstance],0 test eax,eax jz error msg_loop: invoke GetMessage,msg,0,0,0 cmp eax,1 jb end_loop jne msg_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop error: invoke MessageBox,0,_error,0,MB_ICONERROR+MB_OK end_loop: invoke ExitProcess,[msg.wParam] proc WindowProc hwnd,wmsg,wparam,lparam push ebx esi edi cmp [wmsg],WM_COMMAND je .wmcommand cmp [wmsg],WM_CREATE je .wmcreate cmp [wmsg],WM_DESTROY je .wmdestroy cmp [wmsg],WM_DROPFILES je .wmdropfiles .defwndproc: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp .finish .wmcommand: mov eax,[htest] cmp eax,[lparam] je .wmdestroy mov eax,[htest2] cmp eax,[lparam] jne .finish invoke MessageBox,0,0,0,MB_OK jmp .finish .wmcreate: invoke CreateWindowEx,0,_btncls,_btntxt,WS_VISIBLE+WS_CHILD+BS_PUSHBUTTON,1,1,64,32,[hwnd],0,[wc.hInstance],0 mov [htest],eax invoke CreateWindowEx,0,_btncls,_btntxt2,WS_VISIBLE+WS_CHILD+BS_PUSHBUTTON,67,1,64,32,[hwnd],0,[wc.hInstance],0 mov [htest2],eax jmp .finish .wmdestroy: invoke PostQuitMessage,0 xor eax,eax jmp .finish .wmdropfiles: .finish: 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'