;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Function:DemothemethodtocallAutoCompletefunction
; Author:PurpleEndurer
;DevEnv:Windows2000+Masm32V8
;
;log
;-------------------------------------------------------
;2006.10.11Created!
;Note:
;1.NeedcallCoInitialize()&CoUninitialize()
;2.Ifusingshlwapi.inc(includeSHAutoComplete)
;&msi.inc(includeDllGetVersion)includedinMASM32,
;thentheversionofshlwapi.dllwillbe3.1.4000,
;sothisprogramcannotdemothefunction.
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.modelflat,stdcall
optioncasemap:none
include/masm32/include/windows.inc
include/masm32/include/user32.inc
include/masm32/include/kernel32.inc
include/masm32/include/gdi32.inc
include/masm32/include/ole32.inc
includelib/masm32/lib/gdi32.lib
includelib/masm32/lib/user32.lib
includelib/masm32/lib/kernel32.lib
includelib/masm32/lib/ole32.lib
WinMainPROTO:DWORD,:DWORD,:DWORD,:DWORD
IDC_CkbOpenequ103
IDC_EdtCmdequ105
c_WinWidthequ400
c_WinHeightequ210
c_EditDemoTopequ5
c_EditDemoLeftequ2
c_EditDemoWidthequ250
c_EditDemoHeightequ20
c_CkbOpenTopequc_EditDemoTop
c_CkbOpenLeftequ(c_EditDemoLeft+c_EditDemoWidth+5)
c_CkbOpenWidthequ130
c_CkbOpenHeightequc_EditDemoHeight
SHACF_AUTOSUGGEST_FORCE_ON=10000000h
;忽略注册表的设置并且打开autosuggest特性。它必须和SHACF_FILESYSXXX或者SHACF_URLXXX联合使用
SHACF_AUTOSUGGEST_FORCE_OFF=20000000h
;忽略注册表的设置并且关闭autosuggest特性。它必须和SHACF_FILESYSXXX或者SHACF_URLXXX联合使用
SHACF_AUTOAPPEND_FORCE_ON=40000000h
;忽略注册表的设置并且打开autoappend特性,它必须和SHACF_FILESYSXXX或者SHACF_URLXXX联合使用
SHACF_AUTOAPPEND_FORCE_OFF=80000000h
;忽略注册表的设置并且关闭autoappend特性,它必须和SHACF_FILESYSXXX或者SHACF_URLXXX联合使用
SHACF_DEFAULT=0h;缺省设置。它和SHACF_FILESYSTE|SHACF_URLALL等价。不能和任何标志值联合使用
SHACF_FILESYSTEM=1h;包含文件系统和虚拟文件夹(比如桌面或是控制面板)
SHACF_URLHISTORY=2h;包含历史记录的URL列表
SHACF_URLMRU=4h;包含最近使用过的URL列表
SHACF_URLALL=(SHACF_URLHISTORYorSHACF_URLMRU)
DLLVER_PLATFORM_WINDOWS=1h;函数适合于任何Windows平台
DLLVER_PLATFORM_NT=2h;函数适合于WindowsNT平台
m_m2mMACROd1,d2
pushd2
popd1
ENDM
.data
g_szClsNamedb"AutoCompleteCls",0
g_szFailOpendb"无法开启"
g_szAppNamedb"自动完成功能演示",0
g_szEditClsdb"EDIT",0
g_szBtnClsdb"button",0
g_szCkbOpenTextdb"开启自动完成功能",0
g_szFailGetVerNodb"无法检测Shlwapi.dll的版本号",0
g_szVerFmtdb"Shlwapi.dll版本:%d.%d.%d",0
g_szNeedIE5db"自动完成功能需要使用IE5以上版本",0
g_FailLoadDLLdb"不能装载"
g_szShlwapiDLLdb"shlwapi.dll",0
g_FailGetProcAddrdb"不能获取函数"
g_szDllGetVersiondb"DllGetVersion",0
g_szSHAutoCompletedb"SHAutoComplete",0
.data?
g_hInstanceHINSTANCE?
g_hWndMainHANDLE?
g_hEditDemoHANDLE?
g_hCkbOpenHANDLE?
g_Buf1db256dup(?)
g_dviDLLVERSIONINFO<>
g_lpfnDllGetVersionDWORD?
g_lpfnSHAutoCompleteDWORD?
g_hDllHANDLE?
.code
start:
invokeGetModuleHandle,NULL
movg_hInstance,eax
invokeLoadLibrary,ADDRg_szShlwapiDLL
movg_hDll,eax
.ifeax==NULL
xoreax,eax
jz@F
.endif
invokeGetProcAddress,g_hDll,ADDRg_szDllGetVersion
.ifeax==NULL
xoreax,eax
jz@FreeDll
.endif
movg_lpfnDllGetVersion,eax
invokeGetProcAddress,g_hDll,ADDRg_szSHAutoComplete
.ifeax==NULL
xoreax,eax
jz@FreeDll
.endif
movg_lpfnSHAutoComplete,eax
invokeWinMain,g_hInstance,NULL,NULL,SW_SHOWDEFAULT
@FreeDll:
invokeFreeLibrary,g_hDll
@@:
invokeExitProcess,eax
WinMainprochInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
LOCALwc:WNDCLASSEX
LOCALmsg:MSG
LOCALhwnd:HWND
m_m2mwc.cbSize,SIZEOFWNDCLASSEX
m_m2mwc.style,CS_HREDRAWorCS_VREDRAW
m_m2mwc.lpfnWndProc,OFFSETWndProc
m_m2mwc.cbClsExtra,NULL
m_m2mwc.cbWndExtra,NULL
m_m2mwc.hInstance,g_hInstance
m_m2mwc.hbrBackground,COLOR_APPWORKSPACE
m_m2mwc.lpszMenuName,NULL;IDR_MAINMENU
m_m2mwc.lpszClassName,OFFSETg_szClsName
invokeLoadIcon,NULL,IDI_APPLICATION
movwc.hIcon,eax
movwc.hIconSm,eax
invokeLoadCursor,NULL,IDC_ARROW
movwc.hCursor,eax
invokeRegisterClassEx,addrwc
invokeCreateWindowEx,WS_EX_TOPMOST,ADDRg_szClsName,ADDRg_szAppName,/
WS_OVERLAPPEDWINDOW+WS_VISIBLE,CW_USEDEFAULT,/
CW_USEDEFAULT,c_WinWidth,c_WinHeight,NULL,NULL,/
hInst,NULL
movhwnd,eax
.whileTRUE
invokeGetMessage,ADDRmsg,NULL,0,0
.BREAK.IF(!eax)
invokeTranslateMessage,ADDRmsg
invokeDispatchMessage,ADDRmsg
.endw
moveax,msg.wParam
ret
WinMainendp
WndProcprochWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.ifuMsg==WM_CREATE
m_m2mg_hWndMain,hWnd
;Createdemoeditbox
;--------------------------
invokeCreateWindowEx,WS_EX_CLIENTEDGE,addrg_szEditCls,NULL,/
WS_CHILD+WS_VISIBLE+ES_AUTOHSCROLL,/
c_EditDemoLeft,c_EditDemoTop,c_EditDemoWidth,c_EditDemoHeight,hWnd,IDC_EdtCmd,g_hInstance,NULL
movg_hEditDemo,eax
;Createautocheckbox
;--------------------------
invokeCreateWindowEx,NULL,addrg_szBtnCls,addrg_szCkbOpenText,/
WS_CHILD+WS_VISIBLE+BS_AUTOCHECKBOX,c_CkbOpenLeft,c_CkbOpenTop,c_CkbOpenWidth,c_CkbOpenHeight,/
hWnd,IDC_CkbOpen,g_hInstance,NULL
movg_hCkbOpen,eax
;GettheversionofShlwapi.dll
;--------------------------
m_m2mg_dvi.cbSize,SIZEOFg_dvi
;invokeDllGetVersion,addrg_dvi
pushOFFSETg_dvi
callg_lpfnDllGetVersion
.ifeax!=0
invokeMessageBox,hWnd,ADDRg_szFailGetVerNo,ADDRg_szAppName,MB_ICONERROR+MB_OK
xoreax,eax
jz@F
.endif
invokewsprintf,ADDRg_Buf1,ADDRg_szVerFmt,g_dvi.dwMajorVersion,g_dvi.dwMinorVersion,g_dvi.dwBuildNumber
invokeSetWindowText,g_hEditDemo,ADDRg_Buf1
.ifg_dvi.dwMajorVersion<5
invokeMessageBox,hWnd,ADDRg_szNeedIE5,ADDRg_szAppName,MB_ICONERROR+MB_OK
@@:
invokePostQuitMessage,NULL
ret
.endif
invokeCoInitialize,NULL
.elseifuMsg==WM_COMMAND
.iflParam!=0
moveax,wParam
.IFax==IDC_CkbOpen
shreax,16
.ifax==BN_CLICKED
invokeSendMessage,g_hCkbOpen,BM_GETCHECK,NULL,NULL
;invokeSHAutoComplete,g_hEditDemo,SHACF_DEFAULT
.ifeax==BST_CHECKED
pushSHACF_DEFAULT
.else
pushSHACF_AUTOSUGGEST_FORCE_OFF+SHACF_FILESYSTEM+SHACF_URLALL
.endif
pushg_hEditDemo
callg_lpfnSHAutoComplete
.ifeax!=0
invokeMessageBox,hWnd,ADDRg_szFailOpen,addrg_szAppName,MB_ICONERROR+MB_OK
xoreax,eax
jz@B
.endif
invokeSetFocus,g_hEditDemo
.endif
.ENDIF
.endif
.elseifuMsg==WM_DESTROY
invokeCoUninitialize
invokePostQuitMessage,NULL
.else
invokeDefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xoreax,eax
ret
WndProcendp
endstart
分享到:
相关推荐
总之,MASM32 SDK是x86汇编语言编程的重要资源,它提供了完整的开发环境,支持从源代码到可执行文件的整个流程。对于希望深入理解计算机底层工作原理或者进行系统级编程的开发者来说,掌握MASM32 SDK是一项宝贵的...
它的源代码编辑器拥有语法高亮、自动完成和错误检查等功能,极大地提高了编写汇编程序的效率。此外,RadASM的项目管理功能允许用户组织和管理多个源文件,方便构建复杂的程序。 Masm32则是一个针对x86架构的汇编...
RadASM的界面友好,支持语法高亮、代码折叠和自动完成等功能,极大地提高了汇编编程的效率。 **四、RadASM的特点** 1. **直观的用户界面**:RadASM的图形用户界面使代码编辑、编译和调试过程更为直观,降低了学习和...
当RadASM与MASM32结合使用时,开发者可以获得一个强大的开发环境,特别适合于Windows平台下的汇编编程。在RadASM中配置MASM32作为编译器后,可以实现从编写到调试的一站式开发体验。例如,用户可以使用RadASM的编辑...
2. 找到"install.bat"文件,双击运行,该脚本会自动完成MASM32的安装。 3. 安装完成后,为了方便使用,可以将MASM32的bin目录添加到系统的PATH环境变量中,这样在任何地方都可以直接运行MASM32的命令。 4. 验证安装...
编辑器通常具有语法高亮、自动完成和错误提示等功能,帮助程序员提高编码效率。 **4. 编译与链接** MASM 6.11能将源代码编译成机器码,生成OBJ目标文件。然后通过链接器将多个目标文件合并,解决符号引用,生成可...
### BTASM与MASM32的语法差异解析 #### 一、概述 BTASM与MASM32均属于32位汇编语言...综上所述,掌握了BTASM与MASM32之间的语法差异之后,使用BTASM将会更加得心应手,有助于开发者更高效地完成汇编语言编程任务。
3. **开发环境**:可能包含集成开发环境(IDE),例如QBD(Quick Basic Developement),这是一个简单易用的编辑器,支持语法高亮和自动完成,便于编写和调试汇编代码。 4. **示例程序和教程**:为了帮助初学者理解...
此外,MASM编辑器还具备语法高亮和自动完成等功能,帮助开发者更好地理解和编写汇编代码。 **二、链接器LINK** 链接器在编程过程中起着至关重要的作用。在汇编语言编程中,编译器通常只会生成一个或多个目标文件,...
它提供了语法高亮、自动完成、多文档编辑和命令行工具集成等功能。 3. **NMAKE**:NMAKE是Microsoft的Make工具,用于自动化构建过程。在MASM32开发环境中,NMAKE可以用于编译和链接汇编程序,通过批处理文件如`var....
总的来说,MASM 6.11作为一款成熟的汇编语言编程和调试工具,凭借其丰富的功能和易用性,在编程社区中拥有坚实的用户基础。无论是初学者还是经验丰富的开发者,都能从这款工具中受益,深入理解底层硬件和程序执行...
这个执行文件会自动完成安装步骤,帮助用户快速建立一个完整的MASM编译环境。然而,需要注意的是,由于文件未经任何改动,可能存在安全风险,因此在安装和使用过程中,建议先进行病毒扫描,确保软件的完整性和安全性...
它具有代码高亮、自动完成、多文档编辑和查找替换等功能,是编写和调试汇编代码的理想选择。Notepad++还可以配合MASM,通过插件实现编译和调试的集成,提升开发效率。 **汇编语言的优势和挑战** 虽然汇编语言的...
1. **源代码编辑器**:提供了一个内置的代码编辑器,支持语法高亮、自动完成等特性,帮助程序员高效地编写汇编代码。 2. **调试工具**:集成了调试器,允许程序员设置断点,单步执行,查看寄存器状态,检查内存内容...
- **代码编辑**:提供语法高亮、自动完成等功能,便于编写汇编代码。 - **编译与调试**:集成编译器,一键编译生成目标文件;内置调试器,可以单步执行、设置断点、查看内存和寄存器状态等。 - **资源管理**:...
4. **代码编辑器**:虽然MASM611本身不包含代码编辑器,但你可以选择像Notepad++这样的文本编辑器,它们支持语法高亮和自动完成,提高编程效率。 **四、基本操作** 1. **编写源代码**:使用你选择的编辑器创建扩展...
- **源代码编辑器**:用户友好的文本编辑器,支持语法高亮、自动完成等特性,提高编程效率。 - **编译器**:负责将汇编语言源代码转换为机器码,MASM6.11能处理复杂的宏定义,并且生成高效的机器码。 - **链接器*...