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

📄 fileopen.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDM_NEW  equ 1
IDM_SAVE equ 2
IDM_EXIT equ 3
.data
ClassName       db "WinClass",0
TitleName        db "文件打开",0
ofn                  OPENFILENAME <0>
FilterString       db "所有文件(*.*)",0,"*.*",0,"Word文档(*.DOC)",0,"*.DOC",0,"应用程序",0,"*.EXE;*.COM;*.DLL;*.PIF",0,0
Buffer              db "请输入文件名",250 dup (0)
PathName        db "路径名为:",0
FileName           db "文件名为:",0
ExtensionName  db "扩展名为:",0
Crlf                  db  13,10,0
CatName          db 300 dup (0)
MenuName        db "MyMenu",0
.data?
hInstance	   HINSTANCE ?
temp            db 100 dup (?)
.code
start:
   invoke GetModuleHandle, NULL
   mov    hInstance,eax
   invoke WinMain, NULL,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
        mov   eax, hInstance
        mov   wc.hInstance,eax
        invoke GetStockObject,WHITE_BRUSH 
        mov   wc.hbrBackground,eax
        mov   wc.lpszMenuName,offset MenuName
        mov   wc.lpszClassName,OFFSET ClassName
        invoke LoadIcon,NULL,IDI_ASTERISK
        mov   wc.hIcon,eax
        mov   wc.hIconSm,0
        invoke LoadCursor,NULL,IDC_HAND
        mov   wc.hCursor,eax
        invoke RegisterClassEx, addr wc
        invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
                              addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
                              NULL,NULL,hInst,NULL
        mov   hwnd,eax
        invoke ShowWindow,hwnd,CmdShow
        invoke UpdateWindow,hwnd
        .while TRUE
           invoke GetMessage, addr msg,NULL,0,0
           .BREAK .IF (!eax)
            invoke DispatchMessage, addr msg
        .endw
        mov eax,msg.wParam
        ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
        .if uMsg==WM_DESTROY
             invoke PostQuitMessage,NULL
        .elseif uMsg==WM_COMMAND
             mov eax,wParam
             .if ax==IDM_NEW
               mov ofn.lStructSize,sizeof OPENFILENAME
               mov eax,hWnd
               mov ofn.hwndOwner,eax
               mov eax,hInstance
               mov ofn.hInstance,eax
               mov ofn.lpstrFilter,offset FilterString
               mov ofn.lpstrFile,offset Buffer 
               mov ofn.lpstrTitle,offset TitleName
               mov ofn.nMaxFile,260
               mov ofn.Flags,OFN_EXPLORER+OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST
               invoke GetOpenFileName,addr ofn
               .if eax
                  invoke lstrcat,addr CatName,addr PathName
                  mov ax,ofn.nFileOffset
                  movzx eax,ax
                  invoke lstrcpyn,addr temp,ofn.lpstrFile,eax
                  invoke lstrcat,addr CatName,addr temp
                  invoke lstrcat,addr CatName,addr Crlf
                  invoke lstrcat,addr CatName,addr FileName
                  mov cx,ofn.nFileOffset
                  mov ax,ofn.nFileExtension
                  sub ax,cx
                  movzx eax,ax
                  push esi
                  mov esi,ofn.lpstrFile
                  mov dx,ofn.nFileOffset
                  movzx edx,dx
                  add esi,edx
                  invoke lstrcpyn,addr temp,esi,eax
                  invoke lstrcat,addr CatName,addr temp
                  invoke lstrcat,addr CatName,addr Crlf
                  invoke lstrcat,addr CatName,addr ExtensionName
                  invoke lstrlen,ofn.lpstrFile
                  mov cx,ofn.nFileExtension
                  movzx ecx,cx
                  sub eax,ecx
                  inc eax
                  mov esi,ofn.lpstrFile
                  mov dx,ofn.nFileExtension
                  movzx edx,dx
                  add esi,edx
                  invoke lstrcpyn,addr temp,esi,eax  
                  invoke lstrcat,addr CatName,addr temp      
                  invoke MessageBox,hWnd,addr CatName,addr TitleName,MB_OK                
                  pop esi
               .endif
             .elseif ax==IDM_SAVE
               ;暂缺。
             .else
               invoke DestroyWindow,hWnd
             .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 + -