久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5111|回復: 1
打印 上一主題 下一主題
收起左側

一篇win32匯編代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:1 發表于 2013-12-23 01:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
;Programmer Name:o70078
;Edit Date:2013/06/07
;App Name:PublicView
.386
.model flat,stdcall
option casemap:none

include windows.inc

include kernel32.inc
includelib kernel32.lib

include user32.inc
includelib user32.lib

include scrnsave.inc
includelib scrnsave.lib

include scrnsavw.inc
includelib scrnsavw.lib

include gdi32.inc
includelib gdi32.lib

include gdiplus.inc
includelib gdiplus.lib

include shell32.inc
includelib shell32.lib
include \masm32\Macros\Strings.mac

RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm

MTOM MACRO Data1,Data2
PUSH Data2
POP Data1
ENDM
MSUB MACRO Data1,Data2
PUSH EBX
MOV EBX,Data1
SUB EBX,Data2
MOV Data1,EBX
POP EBX
ENDM
MADD MACRO Data1,Data2
PUSH EBX
MOV EBX,Data1
ADD EBX,Data2
MOV Data1,EBX
POP EBX
ENDM

.const

Water STRUCT
ID DWORD ?;編號
WSIZE DWORD ?;大小(或者說和屏幕的距離?)關系到速度,越遠越慢
X DWORD ?
Y DWORD ?
Water ENDS
Num EQU 128
.DATA
Init DB 0 ;是否初次運行
Str1 DB '中國魔法師協會',0
Str2 DB '喵喵喵喵喵喵',0
.DATA?
hdc HDC ?;設備句柄
hInstance DD ? ;工程實例
CommandLine LPSTR ? ;命令行
Waters Water Num DUP (<0,0,0,0>) ;水滴
Brush DD ? ;刷子
ScreenSaveProc PROTO:HWND,:UINT,:WPARAM,:LPARAM
Rnd DWORD ? ;隨機數種子

.code
Main PROC
invoke GetModuleHandle,NULL
MOV [hInstance],EAX
invoke GetCommandLine
MOV [CommandLine],EAX
invoke GetTickCount
MOV [Rnd],EAX
;invoke MessageBox,NULL,$CTA0("此乃試看版(注意:請通過鍵盤按鍵關閉,將無視鼠標)"),$CTA0(""),MB_OK
invoke DialogBoxParam,hInstance,1000,NULL,ScreenSaveProc,NULL
invoke ExitProcess,0
Main ENDP

ScreenSaveProc PROC hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL ps: PAINTSTRUCT;它傳遞給BeginPaint,結束繪制再傳遞給EndPaint
LOCAL RECTs:RECT
PUSHAD
.IF uMsg==WM_INITDIALOG;初始化
invoke SetTimer,[hWin],1002,100,NULL
invoke ShowWindow,[hWin],SW_SHOWMAXIMIZED
invoke GetWindowDC,[hWin];取窗口DC
MOV [hdc],EAX
invoke SetBkColor,[hdc],0;設置背景色為黑
invoke CreateSolidBrush,0;純色刷子
MOV [Brush],EAX
invoke ShowCursor,FALSE;隱藏鼠標
invoke BringWindowToTop,[hWin];窗口最前
invoke GetWindowRect,[hWin],ADDR RECTs;取位置和大小
MOV EAX,[RECTs.right]
MOV EBX,Num
XOR EDX,EDX
INC EAX
DIV EBX;商:EAX
MOV ECX,Num
MOV EBX,0;OFFSET Waters
XOR EDI,EDI
D1:
ADD EBX,OFFSET Waters.X
MOV [EBX],EDI
SUB EBX,OFFSET Waters.X
PUSH EAX
ADD EBX,OFFSET Waters.WSIZE
MOV EAX,[Rnd];取得毫秒數
PUSH EDX
PUSH ECX
XOR EDX,EDX
DIV ECX;除以倒循環次數
MOV ECX,10
XOR EDX,EDX
DIV ECX;除以10
MOV EAX,EDX;取余數
POP ECX
POP EDX
INC EAX
SHL EAX,1
MOV DWORD PTR[EBX],EAX;速度
SUB EBX,OFFSET Waters.WSIZE
POP EAX
ADD EBX,SIZEOF Water
ADD EDI,EAX
LOOP D1
.ELSEIF uMsg==WM_TIMER;計時器
invoke GetWindowRect,[hWin],ADDR RECTs;取位置和大小
MOV ESI,DWORD PTR[RECTs.bottom]
MOV ECX,Num
XOR EBX,EBX
D2:
ADD EBX,OFFSET Waters.ID
INC DWORD PTR[EBX]
INC DWORD PTR[EBX]
.IF DWORD PTR[EBX]>4;文本
MOV DWORD PTR[EBX],0
.ENDIF
SUB EBX,OFFSET Waters.ID
ADD EBX,OFFSET Waters.WSIZE
MOV EDX,[EBX]
SUB EBX,OFFSET Waters.WSIZE
ADD EBX,OFFSET Waters.Y
ADD DWORD PTR[EBX],EDX;移動
.IF DWORD PTR[EBX]>ESI
PUSHAD
PUSH EBX
invoke GetTickCount;取得毫秒數
XOR EDX,EDX
DIV ECX;除以循環次數
MOV ECX,10
XOR EDX,EDX
DIV ECX;除以10
MOV EAX,EDX;取余數
POP EBX
INC EAX
SHL EAX,1
MOV DWORD PTR[EBX],EAX
POPAD
.ENDIF
SUB EBX,OFFSET Waters.Y
ADD EBX,SIZEOF Water
LOOP D2
invoke GetWindowRect,[hWin],ADDR RECTs;取位置和大小

invoke FillRect,[hdc],ADDR RECTs,[Brush];畫矩形(其實是清屏)
RGB 0,100,0
invoke SetTextColor,[hdc],eax;文字顏色
MOV EDI,OFFSET Waters
MOV ECX,Num
DO:
PUSH ECX
PUSH EDI
PUSH DWORD PTR 2;長度
MOV EAX,[EDI]
ADD EAX,6
ADD EAX,OFFSET Str2
PUSH EAX;字符串指針
ADD EDI,12
PUSH DWORD PTR[EDI];Y
SUB EDI,4
PUSH DWORD PTR[EDI];X
PUSH DWORD PTR[hdc]
CALL TextOut
SUB EDI,8
;SUB DWORD PTR[EDI],OFFSET Str2
POP EDI
ADD EDI,SIZEOF Water
POP ECX
LOOP DO
RGB 0,160,0
invoke SetTextColor,[hdc],eax;文字顏色
MOV EDI,OFFSET Waters
MOV ECX,Num
DO1:
PUSH ECX
PUSH EDI
PUSH DWORD PTR 2;長度
MOV EAX,[EDI]
ADD EAX,6
SUB EAX,2
ADD EAX,OFFSET Str2
PUSH EAX;字符串指針
ADD EDI,12
MOV EAX,DWORD PTR[EDI]
ADD EAX,16;下移
PUSH EAX;Y
SUB EDI,4
PUSH DWORD PTR[EDI];X
PUSH DWORD PTR[hdc]
CALL TextOut
SUB EDI,8
;SUB DWORD PTR[EDI],OFFSET Str2
POP EDI
ADD EDI,SIZEOF Water
POP ECX
LOOP DO1
RGB 0,255,0
invoke SetTextColor,[hdc],eax;文字顏色
MOV EDI,OFFSET Waters
MOV ECX,Num
DO2:
PUSH ECX
PUSH EDI
PUSH DWORD PTR 2;長度
MOV EAX,[EDI]
ADD EAX,6
SUB EAX,4
ADD EAX,OFFSET Str2
PUSH EAX;字符串指針
ADD EDI,12
MOV EAX,DWORD PTR[EDI]
ADD EAX,32;下移
PUSH EAX;Y
SUB EDI,4
PUSH DWORD PTR[EDI];X
PUSH DWORD PTR[hdc]
CALL TextOut
SUB EDI,8
;SUB DWORD PTR[EDI],OFFSET Str2
POP EDI
ADD EDI,SIZEOF Water
POP ECX
LOOP DO2

.ELSEIF uMsg==WM_NCHITTEST;鼠標
; .IF BYTE PTR[Init]>1
; JMP Close
; .ENDIF
; ADD BYTE PTR[Init],1
.ELSEIF uMsg==WM_CHAR;鍵盤
JMP Close
.ELSEIF uMsg==WM_KEYUP;鍵盤
JMP Close
.ELSEIF uMsg==WM_KEYDOWN;鍵盤
JMP Close
.ELSEIF uMsg==WM_CLOSE;窗口關閉
Close:
invoke ShowCursor,TRUE;顯示鼠標
invoke DeleteObject,[Brush]
invoke KillTimer,[hWin],1002
invoke ShowWindow,[hWin],SW_HIDE
invoke LoadIcon,[hInstance],100
invoke ShellAbout,[hWin],$CTA0("魔法流星雨"),$CTA0("中國魔法師協會"),EAX
invoke PostQuitMessage,NULL;發送程序結束消息給程序自己
.ELSE
POPAD
MOV EAX,FALSE
RET
.ENDIF
POPAD
MOV EAX,TRUE
RET
ScreenSaveProc ENDP

END Main


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:884042 發表于 2021-7-30 10:25 | 只看該作者
win32是啥?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人爽人人草 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 操操操日日日 | 免费中文字幕 | 亚洲午夜在线 | 久久99国产精一区二区三区 | 91精品国产综合久久久亚洲 | www.久久精品视频 | 91在线精品一区二区 | 婷婷色在线播放 | 成人精品视频99在线观看免费 | 成年网站在线观看 | 影音先锋男 | 久久久91精品国产一区二区三区 | 天天干天天插天天 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 黄片毛片在线观看 | 中文字幕视频在线观看 | av一区二区三区 | 在线观看www | 久久久999免费视频 999久久久久久久久6666 | 欧美激情 亚洲 | 久久九精品 | 国产精品一区二区久久 | 韩日视频在线观看 | 欧美日韩一区不卡 | 欧美日韩国产高清视频 | 欧美视频成人 | 国产精品久久久久久久午夜 | 黄网站在线播放 | 中文字幕亚洲视频 | 欧美日高清视频 | 精品国产一级片 | 天天躁日日躁狠狠躁白人 | 99精品网 | 请别相信他免费喜剧电影在线观看 | 9191av| 亚洲日本视频 | av男人天堂影院 | 老外黄色一级片 | 色伊人久久|