`
mixer_a
  • 浏览: 340739 次
社区版块
存档分类
最新评论

MASM32编程使用自动完成功能

 
阅读更多
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics