• 标 题:FAR 3.X注册机 (4千字)
  • 作 者:夜月
  • 时 间:2002-3-22 19:16:35
  • 链 接:http://bbs.pediy.com

.386
      .model flat,stdcall
      option casemap:none
include        windows.inc
include        user32.inc
include        kernel32.inc
include        comctl32.inc
include        comdlg32.inc
include        masm32.inc

includelib      masm32.lib
includelib      user32.lib
includelib      kernel32.lib
includelib      comctl32.lib
includelib      comdlg32.lib

DLG_MAIN        equ    100
IDGEN          equ    10
Edit1          equ    11
Edit2          equ    12
Edit3          equ    13
BFLEFT          EQU    BFHIGH
BFRIGHT        EQU    BFLOW
IDABOUT        EQU    17
STATIC1        equ    14
STATIC2        equ    15
STATIC3        equ    16
IDI_ICO        equ    101



_ProcDlgMain    PROTO    :DWORD,:DWORD,:DWORD,:DWORD

        .data?
hInstance      dd      ?



        .data
STRABOUT1      DB      "任何问题,提议,请联系",0
STRABOUT2      DB      "firingme@sina.com",0
STRDEF1        DB      "仅以此献给我们可爱的CCG",0
STRDEF2        DB      "  祝愿它蒸蒸日上!",0
szOK            DB      "OK",0
szABOUT        DB      "ABOUT",0
szID            DB      10 DUP(0)
NAMEERR        DB      "名字,Email长度不能为0",0
szName          db      100 dup(0)
szEmail        db      100 dup(0)
szSn            db      "FAR22-%s-00000-%s",0
szTemp1        db      10 dup (0)
szTemp2        db      10 dup (0)
szAAA          db      "AAAAA",0
szLast          db      100 dup (0)
magicnum        dw      0
NameLen        dd      0
EmailLen        dd      0
Num            dd      0
      .code
      ;消息处理函数
        _ProcDlgMain proc uses ebx edi esi edx ecx,hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
        mov    eax,wMsg
        .if    eax==WM_CLOSE
                invoke  EndDialog,hWnd,NULL
        .ELSEif    eax==WM_INITDIALOG
                invoke  LoadIcon,hInstance,IDI_ICO
        invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,EAX
        MOV  EAX,FALSE
        RET

        .elseif eax==WM_COMMAND
                mov  eax,wParam
                and  eax,0ffffh
                .if    eax==IDGEN
        invoke  GetDlgItem,hWnd,Edit2
        invoke  SetFocus,EAX
        invoke  GetDlgItemText,hWnd,Edit1,offset szName,100
        mov NameLen,eax
        .if eax==0
            jmp  @ERR
        .endif
        invoke  GetDlgItemText,hWnd,Edit2,offset szEmail,100
        mov EmailLen,eax
        .if eax==0
            jmp  @ERR
        .endif
        MOV ECX,NameLen
        add EmailLen,ecx
        mov esi,offset szName
        MOV EdI,OFFSET szEmail
        add edi,eax
        rep movsb
        mov ecx,EmailLen
        mov esi,offset szEmail
        mov edi,offset szTemp1
        xor eax,eax
        xor ebx,ebx
    @@1:
        lodsb
        .if (eax>40h)&&(eax<5bh)
            stosb
            inc ebx
            .if ebx==5
              jmp  @@3
            .endif
        .endif
        loop @@1
        mov  esi,offset szAAA
        mov  ecx,5
        sub  ecx,ebx
                rep movsb
    @@3:
                mov byte ptr [edi],0
        mov magicnum,13820
        mov ecx,5
        xor eax,eax
        mov esi,offset szTemp1
    @@2:
                lodsb
        sub ax,41h
        imul ax,10
        add  magicnum,ax
        loop @@2
        mov  ax,magicnum
        cwd
        invoke dwtoa,eax,offset szTemp2
        invoke wsprintf,offset szLast,offset szSn,offset szTemp1,offset szTemp2
        invoke SetDlgItemText,hWnd,Edit3,offset szLast
        mov    eax,FALSE
                        ret
    @ERR:
        invoke  SetDlgItemText,hWnd,Edit2,NULL
        invoke  SendDlgItemMessage,hWnd,Edit1,EM_SETREADONLY,TRUE,NULL
        invoke  SendDlgItemMessage,hWnd,Edit2,EM_SETREADONLY,TRUE,NULL
                        invoke  SetDlgItemText,hWnd,STATIC1,offset NAMEERR
        invoke  SetDlgItemText,hWnd,STATIC2,NULL
        invoke  SetDlgItemText,hWnd,IDABOUT,OFFSET szOK
        MOV    EAX,FALSE
        RET

        
        .elseif eax==IDABOUT
                invoke  GetDlgItemText,hWnd,IDABOUT,OFFSET szID,5
        MOVZX  EAX,BYTE PTR [szID]
        .IF    EAX==79              ;此时显示的是OK
            invoke  GetDlgItem,hWnd,Edit1
                    invoke  SetFocus,eax
            invoke  SendDlgItemMessage,hWnd,Edit1,EM_SETREADONLY,FALSE,NULL
            invoke  SendDlgItemMessage,hWnd,Edit2,EM_SETREADONLY,FALSE,NULL
            invoke  SetDlgItemText,hWnd,STATIC1,offset STRDEF1
            invoke  SetDlgItemText,hWnd,STATIC2,offset STRDEF2    
            invoke  SetDlgItemText,hWnd,IDABOUT,offset szABOUT
            MOV    EAX,FALSE
            RET
        .ELSE
        invoke  GetDlgItem,hWnd,Edit2
        invoke  SetFocus,eax
        invoke  SendDlgItemMessage,hWnd,Edit1,EM_SETREADONLY,TRUE,NULL
        invoke  SendDlgItemMessage,hWnd,Edit2,EM_SETREADONLY,TRUE,NULL
        invoke  SetDlgItemText,hWnd,STATIC1,offset STRABOUT1
        invoke  SetDlgItemText,hWnd,STATIC2,offset STRABOUT2
        invoke  SetDlgItemText,hWnd,IDABOUT,offset szOK
        MOV  EAX,FALSE
        RET
        .ENDIF
        .endif
                .else
                mov    eax,FALSE
                ret
        .endif

      mov eax,FALSE
      RET
_ProcDlgMain endp




        ;主程序
start: 
        invoke  InitCommonControls
        invoke  GetModuleHandle,NULL
        mov    hInstance,eax
        invoke  DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
        invoke  ExitProcess,NULL
end    start

end