📄 password.asm
字号:
;--------------------------------------------------------------------
; Copyright (c) 2004 Lucky
;--------------------------------------------------------------------
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Dialog.asm
; rc Dialog.rc
; Link /subsystem:windows Dialog.obj Dialog.res
;--------------------------------------------------------------------
.386
.model flat, stdcall
option casemap :none
;--------------------------------------------------------------------
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib
;--------------------------------------------------------------------
;ICO_MAIN equ 1000h ;图标
DLG_MAIN equ 1
IDC_REBOOT equ 1000
IDC_SHUTDOWN equ 2000
IDC_PASSWORD equ 3000
;--------------------------------------------------------------------
.data?
hInstance dd ?
hPassword dd ?
wndTaskBar dd ?
wndDestop dd ?
tmp dd ?
Counter dd ?
szBuf db 64 dup(?)
stWindowRect RECT <?>
;--------------------------------------------------------------------
.const
szMsg db '密码错误,你还有%d次机会输入密码',0
szTaskBarClass db 'Shell_TrayWnd',0
szDestopClass db 'Progman',0
szPwd db '+1-2*3/4',0
;--------------------------------------------------------------------
.code
;--------------------------------------------------------------------
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
mov eax,wMsg
.if eax == WM_CLOSE
nop
.elseif eax == WM_INITDIALOG
invoke ShowWindow,wndDestop,SW_HIDE
invoke ShowWindow,wndTaskBar,SW_HIDE
mov [Counter],05h
invoke SetCursorPos,300,200
invoke GetWindowRect,hWnd,addr stWindowRect
add stWindowRect.top,22
invoke GetDlgItem,hWnd,IDC_PASSWORD
mov hPassword,eax
.elseif eax == WM_PAINT
invoke SetFocus,hPassword
mov eax,FALSE
ret
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDC_SHUTDOWN
invoke ExitWindowsEx,EWX_SHUTDOWN,NULL
.elseif ax == IDC_REBOOT
invoke ExitWindowsEx,EWX_REBOOT,NULL
.elseif ax == IDOK
invoke GetDlgItemText,hWnd,IDC_PASSWORD,addr szBuf,sizeof szBuf
invoke lstrcmp,addr szPwd,addr szBuf
.if eax == 0
invoke FindWindow,addr szTaskBarClass,NULL
mov wndTaskBar,eax
invoke FindWindow,addr szDestopClass,NULL
mov wndDestop,eax
invoke EnableWindow,wndTaskBar,TRUE
invoke EnableWindow,wndDestop,TRUE
invoke ShowWindow,wndDestop,SW_SHOW
invoke ShowWindow,wndTaskBar,SW_SHOW
invoke SystemParametersInfo,SPI_SCREENSAVERRUNNING,0,0,0
invoke ClipCursor,NULL
invoke ExitProcess,NULL
.else
invoke SetDlgItemText,hWnd,IDC_PASSWORD,NULL
invoke SetFocus,hPassword
push [Counter]
pop ecx
dec ecx
push ecx
push ecx
invoke wsprintf,addr szBuf,addr szMsg,ecx
invoke SetWindowText,hWnd,addr szBuf
pop ecx
pop dword ptr[Counter]
.if ecx == 0
invoke ExitWindowsEx,EWX_REBOOT,NULL
.endif
.endif
.else
mov eax,FALSE
ret
.endif
.elseif eax == WM_MOUSEMOVE
invoke ClipCursor,addr stWindowRect
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;--------------------------------------------------------------------
start:
invoke SystemParametersInfo,SPI_SETFASTTASKSWITCH,1,addr tmp,0
invoke SystemParametersInfo,SPI_SCREENSAVERRUNNING,1,addr tmp,0
invoke FindWindow,addr szDestopClass,NULL
mov wndDestop,eax
invoke EnableWindow,wndDestop,FALSE
invoke FindWindow,addr szTaskBarClass,NULL
mov wndTaskBar,eax
invoke EnableWindow,wndTaskBar,FALSE
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;--------------------------------------------------------------------
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -