?? hex_dump.asm
字號:
; #########################################################################
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include hexdump.inc ; local includes for this file
; include dbmacros.asm
; include errormac.asm
HexDump PROTO :DWORD,:DWORD,:DWORD
.code
; #########################################################################
start:
invoke InitCommonControls
; ------------------
; set global values
; ------------------
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke LoadIcon,hInstance,500 ; icon ID
mov hIcon, eax
invoke LoadCursor,NULL,IDC_ARROW
mov hCursor, eax
invoke GetSystemMetrics,SM_CXSCREEN
mov sWid, eax
invoke GetSystemMetrics,SM_CYSCREEN
mov sHgt, eax
call Main
invoke ExitProcess,eax
; #########################################################################
Main proc
LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD
STRING szClassName,"hexdump_Class"
; --------------------------------------------
; register class name for CreateWindowEx call
; --------------------------------------------
invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,
hIcon,hCursor,COLOR_BTNFACE+1
; -------------------------------------------------
; macro to autoscale window co-ordinates to screen
; percentages and centre window at those sizes.
; -------------------------------------------------
AutoScale 75, 70
invoke CreateWindowEx,WS_EX_LEFT or WS_EX_ACCEPTFILES,
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
Wtx,Wty,Wwd,Wht,
NULL,NULL,
hInstance,NULL
mov hWnd,eax
; ---------------------------
; macros for unchanging code
; ---------------------------
DisplayMenu hWnd,600
DisplayWindow hWnd,SW_SHOWNORMAL
call MsgLoop
ret
Main endp
; #########################################################################
RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD,
Icon:DWORD, Cursor:DWORD, bColor:DWORD
LOCAL wc:WNDCLASSEX
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_BYTEALIGNCLIENT or \
CS_BYTEALIGNWINDOW
m2m wc.lpfnWndProc, lpWndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInstance
m2m wc.hbrBackground, bColor
mov wc.lpszMenuName, NULL
m2m wc.lpszClassName, lpClassName
m2m wc.hIcon, Icon
m2m wc.hCursor, Cursor
m2m wc.hIconSm, Icon
invoke RegisterClassEx, ADDR wc
ret
RegisterWinClass endp
; ########################################################################
MsgLoop proc
; ------------------------------------------
; The following 4 equates are available for
; processing messages directly in the loop.
; m_hWnd - m_Msg - m_wParam - m_lParam
; ------------------------------------------
LOCAL msg:MSG
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
mov eax, msg.wParam
ret
MsgLoop endp
; #########################################################################
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
LOCAL var :DWORD
LOCAL caW :DWORD
LOCAL caH :DWORD
LOCAL hFile :DWORD
LOCAL len :DWORD
LOCAL hMem$ :DWORD
LOCAL hBuf$ :DWORD
LOCAL bLen :DWORD
LOCAL br :DWORD
LOCAL Rct :RECT
LOCAL buffer1[128]:BYTE ; these are two spare buffers
LOCAL buffer2[128]:BYTE ; for text manipulation etc..
LOCAL szDropFileName[260]:BYTE
.if uMsg == WM_COMMAND
;======== toolbar commands ========
.if wParam == 50
; --------------------------------------
; szFileName is defined in Filedlgs.asm
; --------------------------------------
mov szFileName[0],0 ; set 1st byte to zero
invoke GetFileName,hWin,SADD("Open A File"),
SADD("All files",0,"*.*",0)
cmp szFileName[0],0 ; zero if cancel pressed in dlgbox
jne @F
ret
@@:
invoke CreateFile,ADDR szFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
mov hFile, eax
invoke GetFileSize,hFile,NULL
mov len, eax
stralloc len ; allocate string memory
mov hMem$, eax
invoke ReadFile,hFile,hMem$,len,ADDR br,NULL
invoke CloseHandle,hFile
mov eax, len
add eax, eax
add eax, eax
mov bLen, eax
stralloc bLen
mov hBuf$, eax
invoke HexDump,hMem$,len,hBuf$
invoke CreateFile,SADD("testdump.hex"),
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
mov hFile, eax
invoke StrLen,hBuf$
mov bLen, eax
invoke WriteFile,hFile,hBuf$,bLen,ADDR br,NULL
invoke CloseHandle,hFile
strfree hBuf$
strfree hMem$
; -----------------------------------------
; NOTE This WinExec call will only work on
; the logical drive that this EXE is on.
; -----------------------------------------
invoke WinExec,SADD("\masm32\qeditor.exe testdump.hex"),1
.elseif wParam == 51
invoke MessageBox,hWin,SADD("WM_COMMAND ID 51"),
ADDR szDisplayName,MB_OK
.elseif wParam == 52
invoke MessageBox,hWin,SADD("WM_COMMAND ID 52"),
ADDR szDisplayName,MB_OK
.elseif wParam == 53
invoke MessageBox,hWin,SADD("WM_COMMAND ID 53"),
ADDR szDisplayName,MB_OK
.elseif wParam == 54
invoke MessageBox,hWin,SADD("WM_COMMAND ID 54"),
ADDR szDisplayName,MB_OK
.elseif wParam == 55
invoke MessageBox,hWin,SADD("WM_COMMAND ID 55"),
ADDR szDisplayName,MB_OK
.elseif wParam == 56
invoke MessageBox,hWin,SADD("WM_COMMAND ID 56"),
ADDR szDisplayName,MB_OK
.elseif wParam == 57
invoke MessageBox,hWin,SADD("WM_COMMAND ID 57"),
ADDR szDisplayName,MB_OK
.elseif wParam == 58
invoke MessageBox,hWin,SADD("WM_COMMAND ID 58"),
ADDR szDisplayName,MB_OK
.endif
;======== menu commands ========
.if wParam == 1001
; --------------------------------------
; szFileName is defined in Filedlgs.asm
; --------------------------------------
mov szFileName[0],0 ; set 1st byte to zero
invoke GetFileName,hWin,SADD("Open A File"),
SADD("All files",0,"*.*",0)
cmp szFileName[0],0 ; zero if cancel pressed in dlgbox
je @F
; ---------------------------------
; perform your file open code here
; ---------------------------------
invoke MessageBox,hWin,ADDR szFileName,ADDR szDisplayName,MB_OK
@@:
.elseif wParam == 1002
; --------------------------------------
; szFileName is defined in Filedlgs.asm
; --------------------------------------
mov szFileName[0],0 ; set 1st byte to zero
invoke SaveFileName,hWin,SADD("Save File As ..."),
SADD("All files",0,"*.*",0,0)
cmp szFileName[0],0 ; zero if cancel pressed in dlgbox
je @F
; ---------------------------------
; perform your file save code here
; ---------------------------------
invoke MessageBox,hWin,ADDR szFileName,ADDR szDisplayName,MB_OK
@@:
.endif
.if wParam == 1010
invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL
.elseif wParam == 1900
ShellAboutBox hWin,hIcon,\
"About Prostart 3 Template#Windows Application",\
"Prostart 3 Template",13,10,"Copyright
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -