⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bd.asm

📁 单词记忆
💻 ASM
字号:
.586
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \MASM32\INCLUDE\Comctl32.inc
include \MASM32\INCLUDE\comdlg32.inc
include \MASM32\include\oleaut32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib
includelib \MASM32\LIB\comdlg32.lib
includelib \MASM32\LIB\Comctl32.lib
includelib \MASM32\LIB\oleaut32.lib
stralloc MACRO ln
        invoke SysAllocStringByteLen,0,ln
      ENDM
WM_SHELLNOTIFY equ WM_USER+5
IDI_TRAY equ 0
IDM_RESTORE equ 1000
IDM_ABOUT equ 1020
IDM_EXIT	equ 1010
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD

.data
ClassName 	db "TrayIconWinClass",0
AppName  		db "日积月累记单词 v1.01",0
RestoreString	db "设置",0
about_1           db "关于",0  
ExitString	 	db "退出",0
dir  db "日积月累记单词 V1.0",0; 
pars db "盛玉增版权所有",8 dup(0)
szNameFile db "danci.txt",0

OurText  db "日积月累记单词 V1.0  作者:盛玉增  用汇编语言编制 2001.11.2",0
text1 db 200 dup (0)
text2 db 200 dup (0)
icon1 db "BOOK1.ICO",0

.data?
esi_1 dd ?
edx_1 dd ?
br dd ?
source$   dd ?
ln  dd ?
hFile dd ?
hnd1 dd ? 
hInstance	dd ?
note NOTIFYICONDATA <>
hPopupMenu	dd ?

.code
start:
	invoke GetModuleHandle, NULL
	mov    hInstance,eax
	invoke WinMain, hInstance,NULL,NULL, SW_SHOWDEFAULT
	invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
	LOCAL wc:WNDCLASSEX
	LOCAL msg:MSG
	LOCAL hwnd:HWND
	mov   wc.cbSize,SIZEOF WNDCLASSEX
	mov   wc.style, CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
	mov   wc.lpfnWndProc, OFFSET WndProc
	mov   wc.cbClsExtra,NULL
	mov   wc.cbWndExtra,NULL
	push  hInst
	pop   wc.hInstance
	;mov   wc.hbrBackground,COLOR_APPWORKSPACE
      mov   wc.hbrBackground,COLOR_WINDOW+1
	mov   wc.lpszMenuName,NULL
	mov   wc.lpszClassName,OFFSET ClassName
	invoke LoadIcon,NULL,IDI_APPLICATION
	mov   wc.hIcon,eax
	mov   wc.hIconSm,eax
	invoke LoadCursor,NULL,IDC_ARROW
	mov   wc.hCursor,eax
	invoke RegisterClassEx, addr wc
	invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
          WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_VISIBLE,CW_USEDEFAULT,\
           CW_USEDEFAULT,450,60,NULL,NULL,\
           hInst,NULL

         

	mov   hwnd,eax
      INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
	INVOKE UpdateWindow, hwnd

	.while TRUE
		invoke GetMessage, ADDR msg,NULL,0,0
		.BREAK .IF (!eax)
		invoke TranslateMessage, ADDR msg
		invoke DispatchMessage, ADDR msg
	.endw
	mov eax,msg.wParam
	ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	LOCAL pt:POINT
      LOCAL hdc:HDC
	LOCAL ps:PAINTSTRUCT
	LOCAL rect:RECT
	
	
	.if uMsg==WM_CREATE
		invoke CreatePopupMenu
		mov hPopupMenu,eax
		invoke AppendMenu,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
		invoke AppendMenu,hPopupMenu,MF_STRING,IDM_ABOUT,addr about_1
            invoke AppendMenu,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString
            invoke GetForegroundWindow
            mov hnd1,eax
            invoke  GetWindowText,hnd1,ADDR text1,100
            invoke CreateFile,ADDR szNameFile,
                      GENERIC_READ,
                      FILE_SHARE_READ,
                      NULL,OPEN_EXISTING,
                      FILE_ATTRIBUTE_NORMAL,
                      NULL
              mov hFile, eax
              invoke GetFileSize,hFile,NULL
              mov ln, eax
              stralloc ln
              mov source$, eax
              ;mov esi_1,eax
              invoke ReadFile,hFile,source$,ln,ADDR br,NULL
              invoke CloseHandle,hFile
              
            invoke	SetTimer,hWnd,1,3000,NULL
     

	.elseif uMsg==WM_DESTROY
              invoke	KillTimer,hWnd,1
		invoke PostQuitMessage,NULL
      .elseif   uMsg == WM_TIMER
                               push esi
                               push edi
                               cld
                               invoke GetForegroundWindow
                               mov edx,hnd1
                               cmp eax,edx
                               jz st1_1
                                invoke  SetWindowText,hnd1,ADDR text1 
                                invoke GetForegroundWindow
                                mov hnd1,eax
                                invoke  GetWindowText,hnd1,ADDR text1,100
                               ;invoke MessageBox,hnd1,ADDR text1,ADDR dir,MB_OK
                               
                        st1_1:  mov edi,offset text2
                                  rdtsc
                                  add eax,100
			                mov ecx,ln
                           st1_1_1:cmp eax,ecx
                                jb st1_1_2
                                sub eax,ecx
                                jmp st1_1_1
                           st1_1_2:
                                  
                                mov esi,source$
                                add esi,eax
                                mov esi_1,esi
                                mov edx,source$
                                mov ecx,ln
                                add edx,ecx
                                mov edx_1,edx
                                cmp esi,edx
                                jnb st1_1
                               
                          st1_2:
                                lodsb 
                                cmp al,0dh
                                jz st1_2_1
                                cmp esi,edx
                                jnb st1_1
                                jmp st1_2
                          st1_2_1:
                                 lodsb
                                 cmp al,0ah
                                 jz st1_2_2
                                 jmp st1_1
                          st1_2_2:
                                cmp esi,edx
                                jnb st1_1
                          st1_2_3:lodsb  
                                  cmp al,0dh
                                  jz st1_3   
                                stosb
                                cmp esi,edx
                                jnb st1_1
                                jmp st1_2_3
                               
                              
                          st1_3: 
                                mov al,0
                                stosb
                                ;;;;;;;;;;
                                
                                invoke  SetWindowText,hnd1,ADDR text2 
                                jmp nx_1_1
                         end_1: 
                                jmp st1_1
                               
        nx_1_1:pop edi
               pop esi
       .ELSEIF uMsg==WM_PAINT
	 	invoke BeginPaint,hWnd, ADDR ps
	 	mov    hdc,eax
	 	invoke GetClientRect,hWnd, ADDR rect
	 	invoke DrawText, hdc,ADDR OurText,-1, ADDR rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
	 	invoke EndPaint,hWnd, ADDR ps
                  
               

	.elseif uMsg==WM_SIZE
		.if wParam==SIZE_MINIMIZED
			mov note.cbSize,sizeof NOTIFYICONDATA
			push hWnd
			pop note.hwnd
			mov note.uID,IDI_TRAY
			mov note.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP
			mov note.uCallbackMessage,WM_SHELLNOTIFY
			invoke LoadIcon,NULL,IDI_ASTERISK		
			mov note.hIcon,eax
			invoke lstrcpy,addr note.szTip,addr AppName
			invoke ShowWindow,hWnd,SW_HIDE
			invoke Shell_NotifyIcon,NIM_ADD,addr note
             .endif
               		
	.elseif uMsg==WM_COMMAND
		.if lParam==0
			invoke Shell_NotifyIcon,NIM_DELETE,addr note
			mov eax,wParam
			.if ax==IDM_RESTORE
				invoke ShowWindow,hWnd,SW_RESTORE
                  .elseif ax==IDM_ABOUT
                        invoke MessageBox,hnd1,ADDR OurText,ADDR dir,MB_OK
                        invoke ShowWindow,hWnd,SW_RESTORE
			.else
				invoke DestroyWindow,hWnd
			.endif
		.endif
	.elseif uMsg==WM_SHELLNOTIFY
		.if wParam==IDI_TRAY
			.if lParam==WM_RBUTTONDOWN
				invoke GetCursorPos,addr pt
				invoke TrackPopupMenu,hPopupMenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL
			.elseif lParam==WM_LBUTTONDBLCLK
				invoke SendMessage,hWnd,WM_COMMAND,IDM_RESTORE,0
			.endif
		.endif
	.else
		invoke DefWindowProc,hWnd,uMsg,wParam,lParam		
		ret
	.endif
	xor eax,eax
	ret
WndProc endp

end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -