?? 通訊錄.asm
字號(hào):
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Current Version -- Ver 1.0 測(cè)試版 (2005.4)
; CopyRight By 小樣
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令進(jìn)行編譯和鏈接:
; ml /c /coff 通訊錄.asm
; rc 通訊錄.rc
; link /subsystem:windows 通訊錄.obj 通訊錄.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
include odbc32.inc
includelib odbc32.lib
include shell32.inc
includelib shell32.lib
ICO_MAIN EQU 1
ICO_2 EQU 3
ICO_3 EQU 4
DLG_MAIN EQU 2
DLG_ADD EQU 3
DLG_ABOUT EQU 5
DLG_MESSAGE EQU 6
DLG_DELETE EQU 7
DLG_MODIFYKEY EQU 8
DLG_LOGIN EQU 9
DLG_MODIFY EQU 10
IDC_HELPZ EQU 100
IDC_ZHK EQU 200
IDC_ADD EQU 201
IDC_DEL EQU 202
IDC_ABOUT EQU 203
IDC_FIND EQU 204
IDC_FINDNAME EQU 205
IDC_TIME EQU 206
IDC_MODIFYKEY EQU 207
IDC_NAME EQU 210
IDC_QQ EQU 211
IDC_EMAIL EQU 212
IDC_HANDM EQU 213
IDC_TP EQU 214
IDC_CODE EQU 215
IDC_ADDRESS EQU 216
IDC_MESSAGE EQU 217
IDC_MAINM EQU 220
IDC_XNAME EQU 310
IDC_XQQ EQU 311
IDC_XEMAIL EQU 312
IDC_XHAND EQU 313
IDC_XTP EQU 314
IDC_XCODE EQU 315
IDC_XADDRESS EQU 316
IDC_XMESSAGE EQU 317
IDC_XMAIN EQU 320
IDC_MODIFY EQU 321
IDC_DELL EQU 410
IDC_DELALL EQU 411
IDC_LISTBOX EQU 412
IDC_OLDKEY EQU 510
IDC_NEWKEY EQU 511
IDC_YESNEWKEY EQU 512
IDC_YMODIFY EQU 513
IDC_NMODIFY EQU 514
IDC_LOGINKEY EQU 610
IDC_LOGIN EQU 611
IDC_TC EQU 612
ROWS EQU 20000 ;指定記錄集的行數(shù)
.data?
hInstance dd ?
hico dd ?
hidok dd ?
henv dd ?
hconn dd ?
connectstring db 1024 dup(?)
conn db 256 dup(?)
strlen dd ?
progpath db 256 dup(?)
hstmt dd ?
hname db 128 dup(?)
hqq db 128 dup(?)
hemail db 128 dup(?)
hhand db 128 dup(?)
htp db 128 dup(?)
hcode db 64 dup(?)
haddress db 128 dup(?)
hmain db 128 dup(?)
hmessage db 512 dup(?)
namelen dd ?
qqlen dd ?
emaillen dd ?
handlen dd ?
tplen dd ?
codelen dd ?
addresslen dd ?
mainlen dd ?
messagelen dd ?
hzhk db ROWS dup(?)
zhklen dd ROWS dup(?)
namebuf db 128 dup(?)
namebuflen dd ?
namedel db 128 dup(?)
namedellen dd ?
htest db ?
htest1 db ?
hword1 db 128 dup(?)
word1len dd ?
oldkey db 128 dup(?)
oldkeylen dd ?
newkey db 128 dup(?)
ynewkey db 128 dup(?)
ynewkeylen dd ?
hflat db ?
holdkey db 128 dup(?)
holdkeylen dd ?
loginkey db 128 dup(?)
hname1 db 128 dup(?)
.data
strconnect db "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=",0
dbname db "data\test.mdb",0
SQLAppStmt db "insert into main (name,qq,email,hand,tp,code,address,mainm,message) values (?,?,?,?,?,?,?,?,?)",0
SQLAppStmt1 db "insert into word (password) values (?)",0
SQLnameStmt db "select name from main",0
SQLfindStmt db "select * from main where name=?",0
SQLfindStmt1 db "select * from word",0
SQLdelStmt db "delete from main where name=?",0
SQLdelStmt1 db "delete from word where password=?",0
SQLdelallStmt db "delete from main",0
connectcaption db "Complete Connecting String",0
appname db "ODBC Test",0
connfail db "Connection attempt failed",0
allocconnfail db "Connection handle allocation failed",0
setattrfail db "Cannot set desired ODBC version",0
allocenvfail db "Environment handle allocation failed",0
allocstmtfail db "Connection stmt allocation failed",0
connectstmt db "ODBC stmt",0
sformat0 db '%04d年%02d月%02d日',0
sformat1 db ' * 星期一 * %02d:%02d:%02d',0
sformat2 db ' * 星期二 * %02d:%02d:%02d',0
sformat3 db ' * 星期三 * %02d:%02d:%02d',0
sformat4 db ' * 星期四 * %02d:%02d:%02d',0
sformat5 db ' * 星期五 * %02d:%02d:%02d',0
sformat6 db ' * 星期六 * %02d:%02d:%02d',0
sformat7 db ' * 星期日 * %02d:%02d:%02d',0
sabout db '通訊錄',0
stext db '徐州師范大學(xué) 周洛成',0
zlc db "語(yǔ)句句柄創(chuàng)建失敗!",0
nomessage db "無(wú)",0
noname db "姓名不能為空,請(qǐng)輸入用戶的名字!",0
deltext db "確認(rèn)要?jiǎng)h除這一條記錄嗎?",0
delcaption db "刪除選項(xiàng)",0
delalltext db "此執(zhí)行將要?jiǎng)h除“全部記錄”!且無(wú)法恢復(fù)!!!",13,10
db " 確認(rèn)要進(jìn)行刪除嗎?",0
find db "查詢失敗",0
findfail db "沒(méi)有查找到您所要的記錄,請(qǐng)重新輸入要查找的姓名",0
erroroldkey db "舊密碼輸入錯(cuò)誤,請(qǐng)重新輸入!",0
modifykey db "修改密碼",0
errornewkey db "新密碼輸入不一致,請(qǐng)重新輸入!",0
login db "登陸失敗",0
errorlogin db "密碼輸入錯(cuò)誤,請(qǐng)重新輸入!",0
nameerrormod db "名字項(xiàng)不能被修改,請(qǐng)修改其它項(xiàng)!",0
nameerrorm db "修改錯(cuò)誤",0
sadd db "添加選項(xiàng)",0
keyok db '密碼修改成功!',0
.code
;**************設(shè)置創(chuàng)建數(shù)據(jù)庫(kù)的路徑********************************************
_GetProgramPath proc
invoke GetModuleFileName,NULL,addr progpath,sizeof progpath
std
mov edi,offset progpath
add edi,sizeof progpath-1
mov al,"\"
mov ecx,sizeof progpath
repne scasb
cld
mov byte ptr [edi+2],0
ret
_GetProgramPath endp
;**************建立與數(shù)據(jù)庫(kù)test.mdb的連接**************************************
_odbcconnect proc hWnd:DWORD
invoke SQLAllocHandle,SQL_HANDLE_ENV,SQL_NULL_HANDLE,addr henv
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLSetEnvAttr,henv,SQL_ATTR_ODBC_VERSION,SQL_OV_ODBC3,0
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLAllocHandle,SQL_HANDLE_DBC,henv,addr hconn
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLSetConnectAttr,hconn,SQL_ATTR_ODBC_CURSORS,SQL_CUR_USE_ODBC,0
invoke lstrcpy,addr connectstring,addr strconnect
invoke lstrcat,addr connectstring,addr progpath
invoke lstrcat,addr connectstring,addr dbname
invoke SQLDriverConnect,hconn,hWnd,addr connectstring,sizeof connectstring,\
addr conn,sizeof conn,addr strlen,SQL_DRIVER_COMPLETE
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLAllocHandle,SQL_HANDLE_STMT,hconn,addr hstmt
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hWnd,addr zlc,addr zlc,MB_OK OR MB_ICONERROR
.endif
.else
invoke SQLFreeHandle,SQL_HANDLE_DBC,hconn
invoke SQLFreeHandle,SQL_HANDLE_ENV,henv
invoke MessageBox,hWnd,addr connfail,addr appname,MB_OK OR MB_ICONERROR
.endif
.else
invoke SQLFreeHandle,SQL_HANDLE_ENV,henv
invoke MessageBox,hWnd,addr allocconnfail,addr appname,MB_OK OR MB_ICONERROR
.endif
.else
invoke SQLFreeHandle,SQL_HANDLE_ENV,henv
invoke MessageBox,hWnd,addr setattrfail,addr appname,MB_OK OR MB_ICONERROR
.endif
.else
invoke MessageBox,hWnd,addr allocenvfail,addr appname,MB_OK OR MB_ICONERROR
.endif
ret
_odbcconnect endp
;*****************設(shè)置關(guān)于對(duì)話框***********************************************
_DIALOGABOUT proc uses ebx esi edi hWnd,uMsg,wParam,lParam
.if uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif uMsg==WM_INITDIALOG
invoke SendMessage, hWnd, WM_SETICON, ICON_BIG, hico
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDOK
invoke EndDialog,hWnd,NULL
.elseif ax==IDC_HELPZ
invoke ShellAbout,hWnd,offset sabout,offset stext,hico
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_DIALOGABOUT endp
;*******************設(shè)置登陸界面***********************************************
_DLGLOGIN proc uses ebx esi edi hWnd,uMsg,wParam,lParam
.if uMsg==WM_CLOSE
mov byte ptr hflat,1
invoke EndDialog,hWnd,NULL
.elseif uMsg==WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_3
invoke SendMessage, hWnd, WM_SETICON, ICON_BIG,eax
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDC_TC
mov byte ptr hflat,1
invoke EndDialog,hWnd,NULL
.elseif ax==IDC_LOGIN
invoke _odbcconnect,hWnd
invoke SQLExecDirect,hstmt,addr SQLfindStmt1,sizeof SQLfindStmt1
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLBindCol,hstmt,2,SQL_C_CHAR,addr holdkey,50,addr holdkeylen
invoke SQLFetch,hstmt
invoke SQLDisconnect, hconn
invoke SQLFreeHandle, SQL_HANDLE_DBC, hconn
invoke SQLFreeHandle, SQL_HANDLE_ENV, henv
invoke GetDlgItemText,hWnd,IDC_LOGINKEY,addr loginkey,sizeof loginkey
invoke lstrcmp,addr loginkey,addr holdkey
.if eax!=0
invoke MessageBox,hWnd,addr errorlogin,addr login,MB_OK or MB_ICONHAND
jmp @F
.else
mov byte ptr hflat,0
invoke EndDialog,hWnd,NULL
.endif
.endif
@@: .endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_DLGLOGIN endp
;*******************設(shè)置"修改密碼"對(duì)話框***************************************
_DLGMODIFYKEY proc uses ebx esi edi hWnd,uMsg,wParam,lParam
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -