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

📄 win32汇编.txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
        .elseif  eax==WM_NOTIFY
              mov    eax,wParam
              .if    ax==1
                    mov  al,[ebp+1]
                    mov  bl,[ebp+3]
                    mov  bl,[ebp+20]
                    lea  eax,lParam
                    mov  ebx,lParam
                    assume  ebx:ptr NMHDR
                    mov    eax,[ebx].hwndFrom
                    .if    eax==hStatus
                          ;invoke  _message,wParam
                          invoke  GetClientRect,hStatus,addr @rect
                          invoke  GetCursorPos,addr @pt
                          mov  eax,@rect.left
                          mov  ebx,eax
                          add  eax,40
                          add  ebx,150
                          .if  @pt.x>eax && @pt.x<ebx
                                invoke  _message,wParam
                          .endif
                    .endif
                    assume  ebx:nothing
                    
              .endif
        .elseif  eax==WM_HOOK
              mov    eax,wParam
              .if    al==0dh
                    mov  ax,0a0dh
              .endif
              mov  dword ptr szAscii,eax  
              invoke  SendMessage,hWndEdit,EM_REPLACESEL,TRUE,addr szAscii
              ;INVOKE  MessageBox,hWnd,addr szAscii,0,MB_OK
        .elseif  eax==WM_CREATE 
              invoke  CreateEvent,NULL,FALSE,FALSE,NULL
              mov    hEvent,eax
              invoke  SetEvent,hEvent
              invoke  LoadLibrary,offset szDll
              .if    eax
                    mov    hDll,eax
                    invoke  GetProcAddress,hDll,offset szInstall
                    mov    lpInstall,eax
                    invoke  GetProcAddress,hDll,offset szUninstall
                    mov    lpUninstall,eax
                    invoke  lpInstall,hWnd,WM_HOOK
              .endif
              
              
              invoke  CreateWindowEx,WS_EX_CLIENTEDGE,offset szEdit,NULL,WS_VISIBLE OR WS_CHILD OR ES_MULTILINE OR ES_WANTRETURN OR WS_VSCROLL OR ES_AUTOHSCROLL,0,0,0,0,hWnd,1,hInstance,NULL
              mov    hWndEdit,eax          
              CALL  _reSize
              
              invoke  GlobalAlloc,GMEM_FIXED OR GMEM_ZEROINIT,1000;固定内存块
              mov    @l1,eax
              invoke  lstrcpy,@l1,offset szFont
              ;invoke  MessageBox,hWnd,@l1,0,MB_OK
              invoke  GlobalFree,@l1
              invoke  GlobalReAlloc,@l1,2000,GMEM_MOVEABLE OR GMEM_ZEROINIT
              mov    @l1,eax
              ;invoke  lstrcpy,@l1,offset szFont
              ;invoke  MessageBox,hWnd,@l1,0,MB_OK
              
              invoke  GlobalAlloc,GMEM_MOVEABLE OR GMEM_ZEROINIT,1000;移动内存块
              mov    @h1,eax
              ;invoke  GlobalAlloc,GMEM_FIXED OR GMEM_ZEROINIT,1000;这里有了这段,下面的将会是失败的,因为数据将要移动,地址会改变
              invoke  GlobalReAlloc,@h1,20000,GMEM_MOVEABLE OR GMEM_ZEROINIT
              mov    @h2,eax
              invoke  GlobalLock,@h2
              mov    @l2,eax
              ;invoke  GlobalLock,@h1
              ;mov    @l1,eax
              ;invoke  wsprintf,@l1,offset szColor,@l1
              ;invoke  MessageBox,hWnd,@l1,0,MB_OK
              ;invoke  wsprintf,@l2,offset szColor,@l2
              ;invoke  MessageBox,hWnd,@l2,0,MB_OK
              invoke  GlobalFree,@h2
              invoke  GlobalAlloc,GMEM_MOVEABLE OR GMEM_ZEROINIT OR GMEM_DISCARDED,1000;可丢弃内存块,如果内存不足将会被丢弃
              invoke  GlobalFree,eax
              
              
              invoke  HeapCreate,HEAP_NO_SERIALIZE OR HEAP_GENERATE_EXCEPTIONS,200,1000;创建堆
              .if    eax && (eax<0c0000000H);因为上面指定了产生失败的原因
                    mov    @h1,eax
              .endif
              invoke  HeapAlloc,@h1,HEAP_ZERO_MEMORY,200
              mov    @l1,eax
              invoke  wsprintf,@l1,offset szColor,@l1
              ;invoke  MessageBox,hWnd,@l1,0,MB_OK
              invoke  HeapAlloc,@h1,HEAP_ZERO_MEMORY,200
              mov    @l2,eax
              invoke  HeapReAlloc,@h1,HEAP_ZERO_MEMORY,@l1,500
              mov    @l1,eax
              ;invoke  wsprintf,@l1,offset szColor,@l1
              ;invoke  MessageBox,hWnd,@l1,0,MB_OK ;移动扩大后的内存数据中的数据是不会变的。
              ;invoke  wsprintf,@l2,offset szColor,@l2
              ;invoke  MessageBox,hWnd,@l2,0,MB_OK
              invoke  HeapFree,@h1,HEAP_NO_SERIALIZE,@l1
              invoke  HeapFree,@h1,HEAP_NO_SERIALIZE,@l2
              invoke  HeapDestroy,@h1
              
              invoke  VirtualAlloc,NULL,40960,MEM_RESERVE,PAGE_NOACCESS;保存一块内存块
              mov    @l1,eax
              invoke  VirtualAlloc,@l1,4096,MEM_COMMIT,PAGE_READWRITE;提交内存
              mov    @l2,eax
              ;invoke  wsprintf,@l2,offset szColor,@l2
              ;invoke  MessageBox,hWnd,@l2,0,MB_OK
              ;invoke  VirtualProtect,@l2,4096,PAGE_READONLY,addr dwColor;这里把虚拟内存页改为了只读,下面的读句就会出错
              ;invoke  wsprintf,@l2,offset szColor,@l2
              ;invoke  MessageBox,hWnd,@l2,0,MB_OK
              invoke  VirtualFree,@l2,4096,MEM_DECOMMIT
              invoke  VirtualFree,@l1,40960,MEM_RELEASE
              
              
              invoke  CreateFile,addr szText,GENERIC_WRITE OR GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
              .if    eax!=INVALID_HANDLE_VALUE
                    mov  hFile,eax
              .endif
              ;invoke  SetFilePointer,hFile,55,NULL,FILE_END
              ;invoke  SetEndOfFile,hFile
              ;invoke  SetFilePointer,hFile,0,NULL,FILE_CURRENT
              ;invoke  wsprintf,addr szBuf,offset szColor,eax
              ;invoke  MessageBox,hWnd,addr szBuf,0,MB_OK
              INVOKE  CreateFileMapping,hFile,NULL,PAGE_READWRITE,0,4096,NULL;本身文件自己所拥有的只有2K。所以最好这里指定一下大小,不然写不了大数据
              .if    eax
                    mov    hMap,eax
              .endif
              invoke  MapViewOfFile,hMap,FILE_MAP_READ OR FILE_MAP_WRITE,0,0,0
              .if    eax
                    mov    lpView,eax
              .endif
              mov    al,'b'
              mov    ecx,500
              mov    edi,lpView
              rep    stosb
              ;mov    [edi],al
              invoke  FlushViewOfFile,lpView,NULL
              invoke  UnmapViewOfFile,lpView
              invoke  CloseHandle,hMap
              invoke  CloseHandle,hFile
              
              invoke  OpenFileMapping,FILE_MAP_READ OR FILE_MAP_WRITE,0,offset szChar;内存映射实现数据共享,每打开一次就会向这块内存写入新的数据
              .if    !eax
                    invoke  CreateFileMapping,NULL,NULL,PAGE_READWRITE,0,4096,offset szChar
              .endif
              mov    hMap,eax
              invoke  MapViewOfFile,hMap,FILE_MAP_READ OR FILE_MAP_WRITE,0,0,0
              mov    lpView,eax
              invoke  lstrcat,lpView,offset szChar
              ;invoke  MessageBox,hWnd,lpView,0,MB_OK  ;这块的释放工作放在WM_CLOSE里面。如果马上释放后面的文件就打不开映射,又只能创建
              
              invoke  GetTempPath,sizeof szBuf,offset szBuf;取临时文件夹路径
              ;invoke  MessageBox,hWnd,offset szBuf,0,MB_OK
              
              invoke  GetCurrentDirectory,sizeof szBuf,offset szBuf;对当前文件路径
              ;invoke  MessageBox,hWnd,offset szBuf,0,MB_OK
              
              invoke  GetSystemDirectory,offset szBuf,sizeof szBuf;取系统路径
              ;invoke  MessageBox,hWnd,offset szBuf,0,MB_OK
              
              invoke  GetWindowsDirectory,offset szBuf,sizeof szBuf;取windows路径
              ;invoke  MessageBox,hWnd,offset szBuf,0,MB_OK
              
              invoke  CreateStatusWindow,WS_VISIBLE OR WS_CHILD,addr szFilter,hWnd,1
              mov    hStatus,eax
              INVOKE  SendMessage,hStatus,SB_SETPARTS,4,addr szPart
              INVOKE  SendMessage,hStatus,SB_SETTEXT,1,addr szFilter
              mov    stFindReplace.lStructSize,sizeof stFindReplace
              push    hWnd
              pop    stFindReplace.hwndOwner
              mov    stFindReplace.Flags,FR_DOWN
              mov    stFindReplace.lpstrFindWhat,offset szBuf
              mov    stFindReplace.wFindWhatLen,sizeof szBuf
              mov    stFindReplace.lpstrReplaceWith,offset szBuf2
              mov    stFindReplace.wReplaceWithLen,sizeof szBuf2
              invoke  RegisterWindowMessage,addr szFINDTEXT
              mov    uvMsg,eax
              
              invoke  GetSystemMenu,hWnd,FALSE
              mov    hSysMenu,eax
              invoke  AppendMenu,hSysMenu,MF_BYCOMMAND,IDM_C,addr szKey
              invoke  AppendMenu,hSysMenu,MF_BYCOMMAND,IDM_B,ADDR szTitle
              ;invoke  DeleteMenu,hSysMenu,0,MF_BYPOSITION
              ;invoke  RemoveMenu,hSysMenu,0,MF_BYPOSITION
              invoke  ModifyMenu,hSysMenu,0,MF_BYPOSITION,IDM_ALTB,addr szTitle
              invoke  EnableMenuItem,hMenu,IDM_UNABLE,MF_BYCOMMAND OR MF_DISABLED
              invoke  EnableMenuItem,hMenu,IDM_UNABLE,MF_BYCOMMAND OR MF_DISABLED
              invoke  EnableMenuItem,hMenu,IDM_ENABLE,MF_BYCOMMAND OR MF_ENABLED
              invoke  EnableMenuItem,hMenu,IDM_GRAY,MF_BYCOMMAND OR MF_GRAYED
              invoke  CheckMenuItem,hMenu,IDM_CHECKED,MF_BYCOMMAND OR MF_CHECKED
              invoke  CheckMenuRadioItem,hMenu,IDM_ICON1,IDM_ICON2,IDM_ICON1,MF_BYCOMMAND
              invoke  CheckMenuRadioItem,hMenu,IDM_CURSOR1,IDM_CURSOR2,IDM_CURSOR1,MF_BYCOMMAND
              ;invoke  EnableMenuItem,hMenu,IDM_OPEN, MF_DISABLED 
        .elseif  eax==WM_RBUTTONDOWN
              invoke  GetSubMenu,hMenu,1
              mov    hSubMenu,eax
              invoke  GetCursorPos,addr @pt
              invoke  TrackPopupMenu,hSubMenu,TPM_LEFTALIGN,@pt.x,@pt.y,NULL,hWnd,NULL
        .elseif  eax==WM_SYSCOMMAND
              mov    eax,wParam
              .if    ax==IDM_C || AX==IDM_B || AX==IDM_ALTB
                    invoke  _message,wParam
              .else
                    invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
              .endif
              ret
        .else
              invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
              ret
        .endif
        xor    eax,eax;返回码
        ret
_wndProc    endp
_winMain    proc
        local  @wc:WNDCLASSEX
        local  @uMsg:MSG
        invoke  RtlZeroMemory,addr @wc,sizeof @wc
        invoke  GetModuleHandle,NULL
        mov    hInstance,eax
        mov    @wc.hInstance,eax
        mov    @wc.cbSize,sizeof @wc
        mov    @wc.cbClsExtra,0
        mov    @wc.cbWndExtra,0
        mov    @wc.lpszClassName,offset szClassName
        mov    @wc.lpszMenuName,0
        mov    @wc.hbrBackground,COLOR_WINDOW+1
        mov    @wc.style,CS_VREDRAW OR CS_HREDRAW OR CS_DBLCLKS
        mov    @wc.lpfnWndProc,offset _wndProc
        invoke  LoadAccelerators,hInstance,IDR_ACCELERATOR1
        mov    hAccelerator,eax
        invoke  LoadMenu,hInstance,IDR_MENU1
        mov    hMenu,eax
        invoke  LoadIcon,hInstance,IDI_ICON1
        mov    hIcon1,eax
        mov    @wc.hIcon,eax
        invoke  LoadIcon,hInstance,IDI_ICON2
        mov    hIcon2,eax
        invoke  LoadCursor,hInstance,IDC_CURSOR1
        .if    eax
        mov    hCur1,eax
        mov    @wc.hCursor,eax
        .endif
        invoke  LoadCursorFromFile,addr szCur2
        mov    hCur2,eax
        invoke  RegisterClassEx,addr @wc
        invoke  CreateWindowEx,WS_EX_OVERLAPPEDWINDOW,addr szClassName,addr szTitle,WS_OVERLAPPEDWINDOW,0,0,600,500,NULL,hMenu,hInstance,NULL
        mov    hWinMain,eax
        invoke  ShowWindow,hWinMain,SW_SHOWNORMAL
        invoke  UpdateWindow,hWinMain
        .while  TRUE
              invoke  GetMessage,addr @uMsg,NULL,0,0
              .break  .if  !eax
              invoke  TranslateAccelerator,hWinMain,hAccelerator,addr @uMsg
              .if    !eax
                    invoke  TranslateMessage,addr @uMsg
                    invoke  DispatchMessage,addr @uMsg
              .endif
        .endw
        ret
_winMain    endp
start:
        invoke  InitCommonControls
        call    _winMain
        invoke  ExitProcess,-1
        end    start

⌨️ 快捷键说明

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