📄 win32汇编.txt
字号:
.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 + -