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

📄 win32汇编.txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
        .endif
        mov    eax,TRUE
        ret
_diaProc3  endp
_reSize    proc
        local  @stRect:RECT,@stRect1:RECT
        pushad
        invoke  MoveWindow,hStatus,0,0,0,0,TRUE;状态栏不需要设置宽度位置,它会自己调整
        invoke  GetWindowRect,hStatus,addr @stRect
        invoke  GetClientRect,hWinMain,addr @stRect1
        mov    ebx,@stRect1.right
        sub    ebx,@stRect1.left
        mov    ecx,@stRect1.bottom
        sub    ecx,@stRect1.top
        mov    edx,@stRect.bottom
        sub    edx,@stRect.top
        sub    ecx,edx
        invoke  MoveWindow,hWndEdit,0,0,ebx,ecx,TRUE
        popad
        ret
_reSize    endp
_thread    proc uses ebx esi edi _lParam
        .while  TRUE
              invoke  WaitForSingleObject,hEvent,INFINITE
              inc  dwPos
              invoke  wsprintf,addr szBuf,addr szNumThread,dwPos
              invoke  SendMessage,hStatus,SB_SETTEXT,3,addr szBuf
              invoke  SetEvent,hEvent
        .endw
        ret
_thread    endp
_diaProc4  proc uses ebx esi edi hWnd,uMsg,wParam,lParam
        local    @processId,@hwnd
        mov    eax,uMsg
        .if    eax==WM_INITDIALOG
        .elseif  eax==WM_COMMAND
              mov  eax,wParam
              .if    ax==IDC_BUTTON1
                    invoke  GetDlgItemText,hWnd,IDC_EDIT1,addr szBuf,sizeof szBuf
                    .if    eax==0
                          INVOKE  _message,wParam
                    .else
                          invoke  FindWindow,NULL,offset szBuf
                          .if    eax
                                mov  @hwnd,eax
                                invoke  GetWindowThreadProcessId,@hwnd,addr @processId
                                invoke  OpenProcess,PROCESS_TERMINATE,FALSE,@processId;注意这里不是指针。上面才是指针
                                .if    eax
                                      mov    ebx,eax
                                      invoke  TerminateProcess,eax,-1
                                      invoke  CloseHandle,ebx
                                .else
                                      invoke  MessageBox,hWnd,addr szErr2,0,MB_OK
                                .endif
                          .else
                                invoke  MessageBox,hWnd,addr szErr1,0,MB_OK
                          .endif
                    .endif
              .elseif  ax==IDC_EDIT1
                  invoke  GetDlgItemText,hWnd,IDC_EDIT1,addr szBuf,sizeof szBuf
                   
              .endif
        .elseif  eax==WM_CLOSE
              invoke  EndDialog,hWnd,NULL
        .else  
              mov  eax,FALSE
              ret
        .endif
        mov    eax,TRUE
        ret
_diaProc4  endp
_list      proc  hWnd
        invoke  SendDlgItemMessage,hWnd,IDC_LIST1,LB_RESETCONTENT,0,0
        invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,NULL
        mov    hSnapshot,eax
        mov    stProcessEntry.dwSize,sizeof stProcessEntry
        invoke  Process32First,hSnapshot,offset stProcessEntry
        .while  eax
              invoke  SendDlgItemMessage,hWnd,IDC_LIST1,LB_ADDSTRING,0,addr stProcessEntry.szExeFile
              invoke  SendDlgItemMessage,hWnd,IDC_LIST1,LB_SETITEMDATA,EAX,stProcessEntry.th32ProcessID
              invoke  Process32Next,hSnapshot,offset stProcessEntry
        .endw
        invoke  CloseHandle,hSnapshot
        ret
_list      endp
_diaProc5  proc uses ebx esi edi hWnd,uMsg,wParam,lParam
        mov    eax,uMsg
        .if    eax==WM_INITDIALOG
              invoke  _list,hWnd
        .elseif  eax==WM_COMMAND
              mov    eax,wParam
              .if    ax==IDC_BUTTON1
                    invoke  _list,hWnd
              .elseif  ax==IDC_BUTTON2
                    invoke  SendDlgItemMessage,hWnd,IDC_LIST1,LB_GETCURSEL,0,0
                    invoke  SendDlgItemMessage,hWnd,IDC_LIST1,LB_GETITEMDATA,EAX,0
                    invoke  OpenProcess,PROCESS_ALL_ACCESS,FALSE,eax
                    .if    eax
                          invoke  TerminateProcess,eax,-1
                    .else  
                          
                    .endif
              .endif
        .elseif  eax==WM_CLOSE
              invoke  EndDialog,hWnd,NULL
        .else  
              mov  eax,FALSE
              ret
        .endif
        mov    eax,TRUE
        ret
_diaProc5  endp
_wndProc    proc  uses  ebx  esi  edi hWnd,uMsg,wParam,lParam
        local    @pt:POINT,@rect:RECT,@wc:WNDCLASSEX,@dwThread
        local    @l1,@l2,@l3,@h1,@h2,@h3
        mov    eax,uMsg
        .if    eax==WM_CLOSE
              invoke  CloseHandle,hEvent
              INVOKE  lpUninstall
              invoke  FreeLibrary,hDll
              invoke  UnmapViewOfFile,lpView
              invoke  CloseHandle,hMap
              invoke  DestroyWindow,hWnd
              invoke  PostQuitMessage,-1
        .elseif  eax==WM_COMMAND
              ;invoke  _message,wParam
              mov    eax,wParam
              .if    ax==IDM_CHECKED
                    invoke  GetMenuState,hMenu,IDM_CHECKED,MF_BYCOMMAND
                    .if    eax==MF_CHECKED
                          mov  eax,MF_UNCHECKED
                    .else
                          mov  eax,MF_CHECKED
                    .endif
                    invoke  CheckMenuItem,hMenu,IDM_CHECKED,EAX
              .elseif  ax==IDM_SUB
                    invoke  DialogBoxParam,hInstance,IDD_DIALOG2,hWnd,addr _diaProc2,NULL
              .elseif  ax==IDM_SUPER
                    mov    @wc.cbSize,sizeof @wc;首先要初始化这个结构大小
                    invoke  GetClassInfoEx,NULL,addr szEdit,addr @wc;再取edit类的结构,如果是系统则此则数为null
                    push    @wc.lpfnWndProc
                    pop    lpOldProc;保存类原来的过程。我们这里超类化只是改更过程别的不做
                    mov    @wc.lpfnWndProc,offset _edit
                    push    hInstance
                    pop    @wc.hInstance;子类化完成后必须更改hInstance和lpszClassName
                    mov    @wc.lpszClassName,offset szClass
                    invoke  RegisterClassEx,addr @wc;只需要注册。CreateWindowEx部份对话框自己完成,
                    ;invoke  CreateWindowEx,NULL,addr @wc,addr szTitle,WS_VISIBLE OR WS_CHILD,0,0,100,50,hWnd,NULL,hInstance,NULL
                    invoke  DialogBoxParam,hInstance,IDD_DIALOG3,hWnd,addr _diaProc3,NULL
              .elseif  ax==IDM_TIMER;创建线程
                    invoke  SetEvent,hEvent
                    invoke  CreateThread,NULL,0,addr _thread,NULL,NULL,addr @dwThread
                    mov    hThread,eax
                    invoke  CreateThread,NULL,0,addr _thread,NULL,NULL,addr @dwThread
                    mov    hThread2,eax
              .elseif  ax==IDM_SETFILETIME;暂停线程
                    invoke  GetExitCodeThread,hThread,addr dwColor
                    .if    dwColor==STILL_ACTIVE
                          invoke  SuspendThread,hThread
                          invoke  SuspendThread,hThread2
                    .ELSE
                          invoke  wsprintf,addr szBuf3,addr szNoStill,dwColor
                          invoke  MessageBox,hWnd,addr szBuf3,0,MB_OK
                    .ENDIF
              .elseif  ax==IDM_GETFILETIME;继续线程
                    .if    dwColor==STILL_ACTIVE
                          invoke  ResumeThread,hThread
                          invoke  ResumeThread,hThread2
                    .ELSE
                          invoke  wsprintf,addr szBuf3,addr szNoStill,dwColor
                          invoke  MessageBox,hWnd,addr szBuf3,0,MB_OK
                    .ENDIF
              .elseif  ax==IDM_GETFILESIZE;终止线程
                    invoke  GetExitCodeThread,hThread,addr dwColor
                    .if    dwColor==STILL_ACTIVE
                          invoke  MessageBox,hWnd,addr szStillThread,0,MB_OK
                          invoke  TerminateThread,hThread,-1  
                          invoke  TerminateThread,hThread2,-1
                    .else
                          invoke  wsprintf,addr szBuf3,addr szNoStill,dwColor
                          invoke  MessageBox,hWnd,addr szBuf3,0,MB_OK
                    .endif
              .elseif  ax==IDM_WEB  
                    invoke  ShellExecute,NULL,NULL,addr szWeb,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_MAILTO  
                    invoke  ShellExecute,NULL,NULL,offset szMailto,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_RUN  
                    INVOKE  WinExec,offset szCurrent,SW_SHOW
              .elseif  ax==IDM_RUN2  
                    invoke  ShellExecute,NULL,NULL,offset szCurrent,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_DIRECTORY
                    invoke  GetSystemDirectory,offset szBuf2,sizeof szBuf2
                    invoke  ShellExecute,hWnd,offset szExplore,offset szBuf2,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_TEMP  
                    INVOKE  GetTempPath,sizeof szBuf2,offset szBuf2
                    invoke  ShellExecute,NULL,offset szExplore,offset szBuf2,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_CURRENT  
                    INVOKE  GetCurrentDirectory,sizeof szBuf2,offset szBuf2
                    invoke  ShellExecute,NULL,offset szExplore,offset szBuf2,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_WINDOWS
                    INVOKE  GetWindowsDirectory,offset szBuf2,sizeof szBuf2
                    invoke  ShellExecute,NULL,offset szExplore,offset szBuf2,NULL,NULL,SW_SHOW
              .elseif  ax==IDM_PROCESS  
                    invoke  GetStartupInfo,offset stStartup
                    invoke  CreateProcess,NULL,offset szCurrent,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,offset stStartup,offset stProcess
                    .if    !eax
                          invoke  _message,wParam
                    .endif
              .elseif  ax==IDM_CLOSEPROCESS
                    invoke  TerminateProcess,stProcess.hProcess,0
                    .if    !eax
                          invoke  _message,wParam
                    .endif
                    invoke  CloseHandle,stProcess.hProcess                 
                    invoke  CloseHandle,stProcess.hThread  
              .elseif  ax==IDM_OPENPROCESS
                    invoke  DialogBoxParam,hInstance,IDD_DIALOG4,hWnd,addr _diaProc4,NULL
              .elseif  ax==IDM_SNAPSHOT
                    invoke  DialogBoxParam,hInstance,IDD_DIALOG5,hWnd,addr _diaProc5,NULL
              .elseif  ax==IDM_OPEN
                    call  _open
                    
              .elseif  ax==IDM_SAVE
                    call  _save
              .elseif  ax==IDM_FONT
                    call  _font
              .elseif  ax==IDM_COLOR
                    call  _color
              .elseif  ax==IDM_REPLACE
                    invoke  ReplaceText,offset stFindReplace
              .elseif  ax==IDM_FIND
                    invoke  FindText,offset stFindReplace
              .elseif  ax==IDM_B || AX==IDM_C || AX==IDM_ALTB || AX==IDM_ALTC
                    invoke  _message,wParam
              .elseif  ax==IDM_ICON1 || AX==IDM_ICON2
                    mov    eax,hIcon1
                    xchg    hIcon2,eax
                    mov    hIcon1,eax
                    invoke  SendMessage,hWinMain,WM_SETICON,ICON_BIG,hIcon1
                    ;invoke  _message,wParam
                    invoke  CheckMenuRadioItem,hMenu,IDM_ICON1,IDM_ICON2,IDM_ICON2,MF_BYCOMMAND
              .elseif  ax==IDM_CURSOR1 || AX==IDM_CURSOR2
                    mov    eax,hCur1
                    xchg    hCur2,eax
                    mov    hCur1,eax 
                    invoke  SetClassLong,hWinMain,GCL_HCURSOR,hCur1
              .elseif  ax==IDM_CONTROL
                    invoke  DialogBoxParam,hInstance,IDD_DIALOG1,hWnd,addr _diaProc,NULL
              .elseif  ax==IDM_GETFILETIME
                    ;invoke  GetFileTime,hFile,addr stFileTime,NULL,NULL;前面的hFile需要自己去取一个文件句柄。这里就不写了
                    ;invoke  FileTimeToSystemTime,addr stFileTime,addr stTime
              .elseif  ax==IDM_SETFILETIME
                    ;invoke  SystemTimeToFileTime,addr stTime,addr stFileTime
                    ;invoke  SetFileTime,hFile,addr stFileTime,NULL,NULL
              .elseif  ax==IDM_GETFILESIZE
                    ;invoke  GetFileSize,hFile,NULL;
              .endif  
        .elseif  eax==uvMsg
              .if    stFindReplace.Flags & FR_FINDNEXT
                    invoke  _message,wParam
              .elseif  stFindReplace.Flags & FR_REPLACE
                    invoke  _message,wParam
              .elseif  stFindReplace.Flags & FR_REPLACEALL
                    invoke  _message,wParam
              .ENDIF
        .elseif  eax==WM_SIZE
              CALL  _reSize

⌨️ 快捷键说明

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