📄 event.asm
字号:
include head.inc
ModalDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDD_DIALOG equ 101
IDC_COUNT equ 1000
IDC_CREATE equ 1001
WM_THREADDATA equ WM_USER+1
.data
.data?
hThreadPass HANDLE ?
hThreadInc HANDLE ?
hThreadDec HANDLE ?
hEvent HANDLE ?
Counter dd ?
ThreadID dd ?
.code
start:
invoke DialogBoxParam,NULL,IDD_DIALOG,NULL,addr ModalDlgProc,NULL
invoke ExitProcess,eax
ModalDlgProc proc uses edi hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
.if uMsg==WM_INITDIALOG
push hWnd
pop hThreadPass
invoke CreateEvent,NULL,FALSE,FALSE,NULL
mov hEvent,eax
mov Counter,0ffffh
.elseif uMsg==WM_COMMAND
.if lParam
mov eax,wParam
.if ax==IDC_CREATE
mov eax,offset ThreadProcInc
invoke CreateThread,NULL,NULL,eax,addr hThreadPass,0,addr ThreadID
mov hThreadInc,eax
mov eax,offset ThreadProcDec
invoke CreateThread,NULL,NULL,eax,addr hThreadPass,0,addr ThreadID
mov hThreadDec,eax
invoke GetDlgItem,hWnd,IDC_CREATE
invoke EnableWindow,eax,FALSE
.endif
.endif
.elseif uMsg==WM_THREADDATA
invoke SetDlgItemInt,hWnd,IDC_COUNT,wParam,FALSE
.elseif uMsg==WM_CLOSE
invoke CloseHandle,hEvent
invoke CloseHandle,hThreadInc
invoke CloseHandle,hThreadDec
invoke EndDialog,hWnd,FALSE
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
ModalDlgProc endp
ThreadProcInc proc uses edi param:dword
invoke WaitForSingleObject,hEvent,INFINITE
mov edi,param
mov ecx,0ffffh
again:
inc Counter
push ecx
invoke PostMessage ,[edi],WM_THREADDATA,Counter,0
pop ecx
loop again
ret
ThreadProcInc endp
ThreadProcDec proc uses edi param:dword
mov edi,param
mov ecx,0ffffh
again:
Dec Counter
push ecx
invoke PostMessage ,[edi],WM_THREADDATA,Counter,0
pop ecx
loop again
invoke SetEvent,hEvent
ret
ThreadProcDec endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -