.386
.Model Flat, StdCall
Option Casemap :None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include winmm.inc
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib winmm.lib
include macro.asm
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.DATA
szAppName db "HelloWin",0
TestString db "Win32 assembly is great and easy!",0
FontName db "script",0
.DATA?
hInstance dd ?
myBrush HBRUSH ?
hMine dd ? ;找到的NotePad的handle
hdc1 dd ? ;找到的NotePad的DC的Hand
hFont dd ? ;创建一种字体
.CODE
START:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
invoke ExitProcess,0
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
LOCAL wndclass :WNDCLASSEX
LOCAL msg :MSG
LOCAL hWnd :HWND
LOCAL logbrush :LOGBRUSH
mov logbrush.lbStyle,BS_HATCHED
RGB 57,128,244
mov logbrush.lbColor,eax
mov logbrush.lbHatch,HS_CROSS
invoke CreateBrushIndirect,addr logbrush
mov myBrush,eax
mov wndclass.cbSize,sizeof WNDCLASSEX
mov wndclass.style,CS_HREDRAW or CS_VREDRAW
mov wndclass.lpfnWndProc,offset WndProc
mov wndclass.cbClsExtra,0
mov wndclass.cbWndExtra,0
push hInst
pop wndclass.hInstance
invoke LoadIcon,NULL,IDI_APPLICATION
mov wndclass.hIcon,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wndclass.hCursor,eax
push myBrush
pop wndclass.hbrBackground
mov wndclass.lpszMenuName,NULL
mov wndclass.lpszClassName,offset szAppName
mov wndclass.hIconSm,0
invoke RegisterClassEx, ADDR wndclass
.if (EAX==0)
invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),addr szAppName,MB_ICONERROR
ret
.endif
invoke CreateWindowEx,/
NULL,/
ADDR szAppName,/
CTXT("http://www.aogosoft.com"),/
WS_OVERLAPPEDWINDOW,/
200,/
200,/
400,/
200,/
NULL,/
NULL,/
hInst,/
NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax,msg.wParam
ret
WinMain endp
TimerProc proc
local cfRGB:COLORREF
local fnText:HGDIOBJ
invoke FindWindow,CTEXT('notepad'),NULL
.if (EAX==0)
ret
.endif
mov hMine,EAX ;保存NotePad的Handler
invoke GetDC,EAX ;取得 DC
mov hdc1,EAX
invoke CreateFont,/
100,/
40,/
0,/
0,/
FW_BLACK,/
0,/
0,/
0,/
ANSI_CHARSET,/
OUT_DEFAULT_PRECIS,/
CLIP_CHARACTER_PRECIS,/
DEFAULT_QUALITY,/
DEFAULT_PITCH or FF_SWISS,/
CTEXT("宋体")
mov hFont,eax ;保存一下这种字体的handle
invoke SelectObject,hdc1,hFont ;将这种字体设置给DC
RGB 200,200,50
invoke SetTextColor,hdc1,eax ;准备好笔
RGB 0,0,255
invoke SetBkMode,hdc1,eax ;准备好背景
invoke TextOut,hdc1,50, 50,CTEXT('王朝到此一游'),12 ;写字啦
invoke DeleteObject,hFont ;释放字体
invoke ReleaseDC,hMine,hdc1 ;释放DC
ret
TimerProc endp
WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
LOCAL hdc :HDC
LOCAL ps :PAINTSTRUCT
local rect :RECT
LOCAL hfont:HFONT
.if uMsg==WM_CREATE
invoke PlaySound,CTXT("C:/WINDOWS/Media/Windows XP 启动.wav"),NULL, SND_FILENAME or SND_ASYNC
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWin, ADDR ps
mov hdc,eax
invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,/
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,/
DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,/
ADDR FontName
invoke SelectObject, hdc, eax
mov hfont,eax
RGB 200,200,50
invoke SetTextColor,hdc,eax
RGB 40,100,255
invoke SetBkColor,hdc,eax
; invoke TextOut,hdc,100,30,ADDR TestString,SIZEOF TestString
invoke GetClientRect,hWin,addr rect
invoke DrawText,hdc,CTXT("Hello,Windows XP!"),-1,addr rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
invoke SelectObject,hdc, hfont
invoke EndPaint,hWin, ADDR ps
invoke TimerProc
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
.endif
ret
WndProc endp
END START