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

📄 scriptxt.asm

📁 这是一个数字图像处理的matlab仿真程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        .ENDIF
        .IF pIASP
            coinvoke pIASP, IUnknown, Release
            mov pIASP, 0
        .ENDIF
        .IF pIAS
            coinvoke pIAS, IUnknown, Release
            mov pIAS, 0
        .ENDIF
        .IF pASSite
            coinvoke pASSite, IUnknown, Release
            mov pASSite, 0
        .ENDIF
        invoke PostQuitMessage,NULL
;-----------------------------------------------------------
    .ELSEIF uMsg==WM_COMMAND
        mov eax,wParam
        .IF lParam
            .IF ax==ButtonID
                shr eax,16
                .IF ax==BN_CLICKED
                    invoke RunScript
                    ;coinvoke pScrText, IScriptText, SetText, NULL
                .ENDIF
            .ENDIF
        .ENDIF
;-----------------------------------------------------------
    .ELSEIF uMsg==WM_SIZE
        movsx edx, (packedDW PTR lParam).loword     
        movsx ebx, (packedDW PTR lParam).hiword     
        .IF (edx < MinWidth) || (ebx < MinHeight)
            invoke GetWindowRect, hWndApp, ADDR rc
            movsx edx, (packedDW PTR lParam).loword 
            movsx ebx, (packedDW PTR lParam).hiword 
            .IF edx <= MinWidth
                mov edx, rc.left
                add edx, MinWidth
            .ELSE
                mov edx, rc.right
                sub edx, rc.left
            .ENDIF
            .IF ebx <= MinHeight
                mov ebx, rc.top
                add ebx, MinHeight
                mov ebx, MinHeight + ButtonHeight + ButtonHeight / 2; KLUDGE !!!!!
            .ELSE
                mov ebx, rc.top
                sub ebx, rc.bottom
            .ENDIF
            invoke MoveWindow, hWndApp, rc.left, rc.top, edx, ebx, TRUE
        .ELSE
            sub ebx, ButtonHeight
            invoke MoveWindow, hwndEdit, 0, 0, edx, ebx, FALSE
            movsx edx, (packedDW PTR lParam).loword ; get the low word,Specifies the new width 
            mov eax, edx
            sub edx, ButtonHeight
            movsx ebx, (packedDW PTR lParam).hiword  ; get the high word, Specifies the new height 
            sub ebx, ButtonHeight
            invoke MoveWindow, hwndButton, 0, ebx, eax, ButtonHeight, TRUE
        .ENDIF
;-----------------------------------------------------------
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor    eax,eax
    ret
WndProc endp

;-------------------------------------------------------------------------------
SetText PROC  this_:DWORD, pNewText:DWORD
    LOCAL cCount:DWORD, psBuf:DWORD
    
    invoke SendMessage, hwndEdit, EM_SETSEL, 0, -1  ; select all text
    invoke SendMessage, hwndEdit, WM_CLEAR, 0, 0    ; clear selection
    invoke SysStringLen, pNewText
    inc eax
    mov cCount, eax
    invoke HeapAlloc, hHeap, NULL, eax
    mov psBuf, eax
    invoke WideCharToMultiByte, CP_ACP, 0, pNewText, -1, 
                                psBuf, cCount, NULL, NULL
    invoke SendMessage, hwndEdit, WM_SETTEXT, NULL, psBuf
    invoke SysFreeString, pNewText
    invoke HeapFree, hHeap, NULL, psBuf
    xor eax, eax        ; return S_OK
    ret
SetText ENDP

;-------------------------------------------------------------------------------
IActiveScriptSiteWindow_GetWindow PROC this_:DWORD, phwnd:DWORD
    mov ecx, phwnd
    mov eax, hWndApp
    mov [ecx], eax
    xor eax, eax        ; return S_OK    
    ret
IActiveScriptSiteWindow_GetWindow ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSiteWindow_EnableModeless PROC this_:DWORD, fEnable:DWORD
    xor eax, eax        ; return S_OK    
    ret
IActiveScriptSiteWindow_EnableModeless ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_GetLCID PROC this_:DWORD, pLCID:DWORD
    mov eax, E_NOTIMPL
    ret
IActiveScriptSite_GetLCID ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_GetItemInfo PROC this_:DWORD, pstrName:DWORD, dwReturnMask:DWORD, 
                 ppunkItem:DWORD, ppTypeInfo:DWORD
    .IF (dwReturnMask & SCRIPTINFO_IUNKNOWN) 
        .IF !ppunkItem     ; check we didn't get a non-null pointer
            mov eax, E_INVALIDARG
            jmp IActiveScriptSite_GetItemInfo_Done
        .ENDIF
    .ENDIF
    .IF (dwReturnMask & SCRIPTINFO_ITYPEINFO) 
        .IF !ppTypeInfo     ; check we didn't get a non-null pointer
            mov eax, E_INVALIDARG
            jmp IActiveScriptSite_GetItemInfo_Done
        .ENDIF
    .ENDIF
    ; check if we were asked for a valid object
    ; note we use the "W" or Unicode version of compare
    invoke lstrcmpiW, pstrName, ADDR wsApplication    
    .IF eax     ; test if pstrName == "Application"
        mov eax, TYPE_E_ELEMENTNOTFOUND
        jmp IActiveScriptSite_GetItemInfo_Done
    .ELSE
        .IF (dwReturnMask & SCRIPTINFO_IUNKNOWN)
            mov ecx, ppunkItem
            mov eax, pScrText            
            mov [ecx], eax
            coinvoke pScrText, IUnknown, AddRef
            jmp IActiveScriptSite_GetItemInfo_Done
        .ENDIF
        .IF (dwReturnMask & SCRIPTINFO_ITYPEINFO) 
            coinvoke pScrText, IDispatch, GetTypeInfo, 0, NULL, ppTypeInfo
            jmp IActiveScriptSite_GetItemInfo_Done
        .ENDIF
    .ENDIF
IActiveScriptSite_GetItemInfo_Done:
    ret
IActiveScriptSite_GetItemInfo ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_GetDocVersionString PROC this_:DWORD,pbstrVersionString:DWORD
    mov eax, E_NOTIMPL
    ret
IActiveScriptSite_GetDocVersionString ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_OnScriptTerminate PROC this_:DWORD, pvarResult:DWORD, pexcepinfo:DWORD
    xor eax, eax        ; return S_OK
    ret
IActiveScriptSite_OnScriptTerminate ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_OnStateChange PROC this_:DWORD, ssScriptState :DWORD
    xor eax, eax        ; return S_OK
    ret
IActiveScriptSite_OnStateChange ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_OnScriptError PROC this_:DWORD, pase:DWORD
    xor eax, eax        ; return S_OK
    ret
IActiveScriptSite_OnScriptError ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_OnEnterScript PROC this_:DWORD
    xor eax, eax        ; return S_OK
    ret
IActiveScriptSite_OnEnterScript ENDP    

;-------------------------------------------------------------------------------
IActiveScriptSite_OnLeaveScript PROC this_:DWORD
    xor eax, eax        ; return S_OK
    ret
IActiveScriptSite_OnLeaveScript ENDP    

;-------------------------------------------------------------------------------
StartScriptEngine PROC
    invoke CoInitialize, NULL
    ; AllocObject is from colib, it's otherwise been used as
    ;  the DllGetClassObject Object maker method
    ;  but it works just fine if called by itself
    invoke AllocObject, ADDR pASSite, OFFSET ActiveScriptSiteClass, NULL, NULL
    .IF_FAILED
        jmp BadStart
    .ENDIF
    invoke AllocObject, ADDR pScrText, OFFSET ScriptTextClass, NULL, NULL
    .IF_FAILED
        jmp BadStart
    .ENDIF
    invoke CoCreateInstance, pCLSID_VBScript, NULL, CLSCTX_INPROC_SERVER, pIID_IActiveScript, ADDR pIAS
    .IF_SUCCEEDED
        coinvoke pIAS, IUnknown, QueryInterface, pIID_IActiveScriptParse, ADDR pIASP
        .IF_FAILED            ; bad engine start
            coinvoke pIAS, IUnknown, Release,
        .ENDIF
    .ENDIF
    xor eax, eax
    ret
BadStart:
    mov eax, S_FALSE
    ret
StartScriptEngine ENDP

;-------------------------------------------------------------------------------
RunScript PROC    
    LOCAL ei:EXCEPINFO, pszScriptText:DWORD, pwszScriptText:DWORD, cChars:DWORD
    LOCAL bstrScriptText:DWORD

 ;    // Give engine your IActiveScriptSite interface...
    coinvoke pASSite, IUnknown, AddRef
    coinvoke pIAS, IActiveScript, SetScriptSite, pASSite
 ;    // Give the engine a chance to initialize itself...
    coinvoke pIASP, IActiveScriptParse, InitNew
 ;    // Add a root-level item to the engine's name space...
    coinvoke pIAS, IActiveScript, AddNamedItem, ADDR wsApplication, SCRIPTITEM_ISVISIBLE
 ;    // Get the script
    invoke LoadScript, ADDR pwszScriptText
 ;    // change the scriptlet to a bstr...   
    invoke SysAllocString, pwszScriptText
    mov bstrScriptText, eax
    coinvoke pIASP, IActiveScriptParse, ParseScriptText, bstrScriptText, ADDR wsApplication, NULL, NULL, 0, 0, 0, NULL, ADDR ei
    invoke SysFreeString, bstrScriptText
    invoke HeapFree, hHeap, NULL, pwszScriptText
 ;    // Set the engine state. This line actually triggers the execution of the script.
    coinvoke pIAS, IActiveScript, SetScriptState, SCRIPTSTATE_CONNECTED
    ret
RunScript ENDP

;-------------------------------------------------------------------------------
LoadScript PROC ppwszScriptText:DWORD
    LOCAL hFile:DWORD, hMapFile:DWORD, pszScriptText:DWORD, cSize:DWORD, pEnd:DWORD
    LOCAL pwszST:DWORD
    invoke CreateFile,ADDR ScriptFile,
                      GENERIC_READ, 
                      FILE_SHARE_READ, NULL,
                      OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
    mov hFile,eax
    invoke CreateFileMapping,hFile,NULL,PAGE_READONLY,0,0,NULL
    mov hMapFile, eax
    invoke MapViewOfFile, hMapFile, FILE_MAP_READ, 0, 0, 0
    mov pszScriptText,eax
    invoke GetFileSize, hFile, NULL
    mov cSize, eax
    add eax, pszScriptText
    inc eax
    mov pEnd, eax
    mov [pEnd], 0
    invoke SendMessage, hwndEdit, WM_SETTEXT, NULL, pszScriptText
    mov eax, cSize
    inc eax
    rol eax, 1  ; eax <- 2* file size + 1
    invoke HeapAlloc, hHeap, NULL, eax
    mov pwszST, eax
    invoke MultiByteToWideChar, CP_ACP, 0, pszScriptText, -1, pwszST, cSize
    mov ecx, ppwszScriptText
    mov eax, pwszST
    mov [ecx], eax
    invoke UnmapViewOfFile,pszScriptText
    invoke CloseHandle, hMapFile
    invoke CloseHandle, hFile
    ret
LoadScript ENDP
;-------------------------------------------------------------------------------

end start

⌨️ 快捷键说明

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