谢谢PaulYoung[CCG]大侠指点!我一定将它写得更长!刚才没有拜读大侠的大作,实是遗憾。拜读之后,豁然开朗... (6千字)
标题: 谢谢PaulYoung[CCG]大侠指点!我一定将它写得更长!刚才没有拜读大侠的大作,实是遗憾。拜读之后,豁然开朗,于是又加上了自动获得ID的功能!内容:
这个功能未加测试,本人没有这个软件,只是照本宣科,做了这个东东。假设ID是DOS命令VOL显示的硬盘序列号:)
这次变动主要是数据段加了几个定义,INIT处加了Call GetID,当然又加了一个GedID Proc啦。本人有个毛病,复制和粘贴往往点错,于是又在序列号框中发送了一个只读的消息,这样就不会“误贴”啦~~~~~~~~~~
.386
.model flat,stdcall
option casemap:none
include hd.h
_ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
.data
NameLen dd 0
IDLen dd 0
IDSum dd 0
DecLen dd 0
InputOK dd 0
MsgMesaage1 db "请输入您的ID和用户名!",0
MsgCap db "小李注册表大师 v1.41 注册机 by 5,555",0
VName db 256 dup (0)
FSName db 256 dup (0)
Drive db "C:\",0
VID dd 0
.data?
hInstance HANDLE ?
UserName db 80 dup (?)
ID db 80 dup (?)
RegNum db 80 dup (?)
.const
DLG_MAIN equ 1000
IDC_ID equ 1001
IDC_RN equ 1002
ID_GEN equ 1003
ID_EXIT equ 1004
IDC_USER equ 1005
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlg,0
invoke ExitProcess,NULL
_ProcDlg proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
call GetID
invoke SetDlgItemText,hWnd,IDC_ID,addr ID
invoke SetWindowText,hWnd,ADDR MsgCap
invoke SendDlgItemMessage,hWnd,IDC_RN,EM_SETREADONLY,TRUE,NULL
.elseif eax == WM_COMMAND
mov eax,wParam
.IF lParam!=0
.if ax==ID_GEN
mov dword ptr InputOK,0
invoke RtlZeroMemory,addr ID,80
invoke RtlZeroMemory,addr UserName,80
invoke RtlZeroMemory,addr RegNum,80
invoke GetDlgItemText,hWnd,IDC_ID,addr ID,80
.IF eax != NULL
mov IDLen,eax
invoke GetDlgItemText,hWnd,IDC_USER,addr UserName,80
.IF eax != NULL
mov NameLen,eax
mov dword ptr InputOK,1
call Cal
invoke SetDlgItemText,hWnd,IDC_RN,addr RegNum
.ENDIF
.ENDIF
cmp dword ptr InputOK,1
jz Main_Exit
invoke MessageBox,NULL,addr MsgMesaage1,addr MsgCap,MB_OK or MB_ICONEXCLAMATION
.elseif ax==ID_EXIT
invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
.endif
.ENDIF
.else
mov eax,FALSE
ret
.endif
Main_Exit:
mov eax,TRUE
ret
_ProcDlg ENDP
Cal PROC
pushad
xor ebx,ebx
xor eax,eax
lea esi,ID
Cal_Lop1:
lodsb
test al,al
jz Cal_2
cmp al,'A'
jb Cal_1
cmp al,'Z'
ja Cal_1
add al,'a'-'A'
Cal_1:
add ebx,eax
jmp Cal_Lop1
Cal_2:
mov IDSum,ebx
mov eax,IDLen
add eax,NameLen
inc eax
mov ecx,57791
imul ecx
add ebx,eax
lea esi,UserName
xor eax,eax
Cal_Lop2:
lodsb
test al,al
jz ToAsc
add ebx,eax
jmp Cal_Lop2
ToAsc:
mov eax,ebx
lea ebp,RegNum
mov byte ptr [ebp],'8'
inc ebp
call Num2Dec
add ebp,DecLen
mov byte ptr [ebp],'2'
mov byte ptr [ebp+1],0
Cal_Exit:
popad
ret
Cal endp
Num2Dec Proc ;eax:Num to convert, ebp-->buffer
pushad
xor ecx,ecx
mov ebx,10
@Num2Dec_Lop1:
cdq
div ebx
push edx
inc ecx
test eax,eax
jnz @Num2Dec_Lop1
mov DecLen,ecx
@Num2Dec_Lop2:
pop eax
add al,'0'
mov byte ptr [ebp],al
inc ebp
dec ecx
jnz @Num2Dec_Lop2
mov byte ptr [ebp],0
popad
ret
Num2Dec Endp
GetID Proc
pushad
invoke GetVolumeInformation, addr Drive, addr VName, 255, addr VID, 0, 0, addr FSName, 255
mov eax,VID
lea ebp,ID
mov ecx,8
Num2Asc_Lop1:
rol eax,4
mov edx,eax
and dl,0fh
cmp dl,9
jna Digital
add dl,'A'-'0'-0ah
Digital:
add dl,'0'
cmp ecx,4
jnz StoreID
mov byte ptr [ebp],'-'
inc ebp
StoreID:
mov [ebp],dl
inc ebp
loop Num2Asc_Lop1
popad
ret
GetID Endp
end start
;以下为rsrc.rc:
#include <\masm32\include\resource.h>
#define DLG_MAIN 1000
#define IDC_ID 1001
#define IDC_RN 1002
#define ID_GEN 1003
#define ID_EXIT 1004
#define IDC_USER 1005
DLG_MAIN DIALOG 64,53,180,80
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "小李注册表大师 v1.41 注册机 by 5,555"
FONT 9, "宋体"
{
DEFPUSHBUTTON "注册", ID_GEN, 140, 10, 25, 14
PUSHBUTTON "退出", ID_EXIT, 140, 42, 25, 14
EDITTEXT IDC_ID, 52, 10, 78, 12, WS_BORDER | WS_TABSTOP
EDITTEXT IDC_USER, 52, 29, 78, 13, WS_BORDER | WS_TABSTOP
EDITTEXT IDC_RN, 52, 48, 78, 14, WS_BORDER | WS_TABSTOP
LTEXT "ID号码:", -1, 8, 12, 40, 10
LTEXT "用户名:", -1, 8, 30, 41, 9
LTEXT "序列号:", -1, 8, 48, 42, 8
}
;HD.h,大家都有的
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
include \masm32\include\comctl32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\shell32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\advapi32.lib
