MALICIOUS
386
Risk Score
Malware Insights
MITRE ATT&CK
T1059.005 Visual Basic
T1566.001 Spearphishing Attachment
T1204.002 Malicious File
T1087.001 Local Accounts
T1059.001 PowerShell
The sample contains VBA macros, indicated by the OLE_VBA_MACROS and OLE_VBA_WSCRIPT heuristics, which utilize WScript.Shell and CreateObject. The presence of an Auto_Open macro suggests an attempt to automatically execute code upon opening the document. The script also references Windows Script Host and uses Environ("CodebaseDir"), indicating it likely attempts to download and execute a second-stage payload. The self-replication heuristic suggests the macro may also attempt to tamper with AV or replicate itself.
Heuristics 13
-
VBA macros detected medium 6 related findings OLE_VBA_MACROSDocument contains VBA macro code
-
WScript.Shell usage critical OLE_VBA_WSCRIPTWScript.Shell usageMatched line in script
Set wsh = VBA.CreateObject("WScript.Shell") -
VBA macro-virus self-replication / AV tampering critical OLE_VBA_MACRO_VIRUS_REPLICATIONVBA macro programmatically rewrites VBA project code through the VBE object model (CodeModule/VBComponents InsertLines/DeleteLines/AddFromString or OrganizerCopy) to copy itself into the global template and other open documents, and/or disables Office macro-virus protection (Options.VirusProtection = False). This is the defining behavior of the W97M document macro-virus family — self-replicating code with no benign document use, independent of any AV signature.Matched line in script
.InsertLines lineNum, " " -
CreateObject call high OLE_VBA_CREATEOBJCreateObject callMatched line in script
Set FSO = CreateObject("Scripting.FileSystemObject") -
Auto_Open macro low OLE_VBA_AUTOAuto_Open macroMatched line in script
' where this XLA is deployed, the dll is immediately unloaded after this auto_open method is -
Auto_Close macro low OLE_VBA_AUTOCLOSEAuto_Close macroMatched line in script
' executed (as if Excel does not know that the dll is needed later in auto_close). With this -
Environ() call (env variable access) low OLE_VBA_ENVIRONEnviron() call (env variable access)Matched line in script
codeBase = Environ("CodebaseDir") -
Reference to Windows Script Host high SC_STR_WSCRIPTReference to Windows Script Host
-
Reference to LoadLibrary API high SC_STR_LOADLIBRARYReference to LoadLibrary API
-
Clipboard command execution lure high SE_CLIPBOARD_COMMAND_LUREDocument tells the user to copy or paste clipboard content into Run, PowerShell, cmd, or another shell-like execution context
-
Suspicious extracted artifact high EXTRACTED_FILE_STATIC_TRIAGEOne or more files extracted from inside this sample matched static suspicious-content checks such as script obfuscation, encoded payload blobs, packed data, or execution/download terms.
-
Legacy WordBasic auto-exec macro marker medium OLE_LEGACY_WORDBASIC_AUTOEXECOLE Word document contains a legacy WordBasic auto-execution marker such as AutoOpen, but no modern VBA project was recovered and no stronger macro-virus family marker was present. This is analyst-facing evidence for old Word macro execution surface, not a downloader or parser-CVE attribution by itself.
-
Embedded URL info EMBEDDED_URLOne or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.URL http://sf.symcd.com0& In document text (OLE body)
- http://ocsp.verisign.com0In document text (OLE body)
- http://schemas.openxmlformats.org/drawingml/2006/mainIn document text (OLE body)
- http://logo.verisign.com/vslogo.gif0In document text (OLE body)
- https://www.verisign.com/rpaIn document text (OLE body)
- https://d.symcb.com/cps0%In document text (OLE body)
- https://d.symcb.com/rpa0In document text (OLE body)
- http://sf.symcb.com/sf.crl0WIn document text (OLE body)
- http://sf.symcb.com/sf.crt0In document text (OLE body)
- https://www.verisign.com/cps0*In document text (OLE body)
- https://www.verisign.com/rpa0In document text (OLE body)
- http://logo.verisign.com/vslogo.gif04In document text (OLE body)
- http://crl.verisign.com/pca3-g5.crl04In document text (OLE body)
Extracted artifacts 1
Files carved from inside the sample during analysis.
| Filename | Kind | Source | Size |
|---|---|---|---|
macros.bas |
vba-macro | oletools.olevba.extract_macros (decoded VBA source) | 523081 bytes |
SHA-256: 48c9f54a595dac9e72fe4571b4bfdc96d197a3488ad3e4f6b7737aed5be624cb |
|||
|
Detection
ClamAV:
No threats found
Obfuscation or payload:
likely
Carved artifact contains 8 eval/decoder/string-building token(s).
|
|||
Preview scriptFirst 1,000 lines of the extracted script
Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "0{00020906-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Attribute VB_Name = "ModuleImporter"
Option Explicit
Option Private Module
''
Const vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100
Const vbext_ct_MSForm = 3
Const vbext_ct_StdModule = 1
Const DiffProgramLocation = "\Src\Utilities\VBAUtils\diff.exe"
Const GitProgramLocation = "\Src\Utilities\VBAUtils\git.exe"
Dim bleSkipModuleTracking As Boolean
Dim FSO As Object
Dim tmpExportFolders() As String
Sub testImportModulesFromFolder()
Dim codeBase As String
codeBase = Environ("CodebaseDir")
#If EXCEL Then
ReDim tmpExportFolders(4)
tmpExportFolders(0) = codeBase & "\Src\OfficeAddins\ExcelAddins\XLAS\VBAModules\Excel\"
tmpExportFolders(1) = codeBase & "\Src\OfficeAddins\Common\VBA\"
tmpExportFolders(2) = codeBase & "\Src\OfficeAddins\Common\VBA\APIRegistry\"
tmpExportFolders(3) = codeBase & "\Src\OfficeAddins\Common\VBA\OFCUI\"
tmpExportFolders(4) = codeBase & "\Src\OfficeAddins\Common\VBA\LM\"
#ElseIf Powerpoint And LOADER Then
ReDim tmpExportFolders(3)
tmpExportFolders(0) = codeBase & "\Src\OfficeAddins\PowerPoint\PowerPoint\Loader"
tmpExportFolders(1) = codeBase & "\Src\OfficeAddins\Common\VBA\"
tmpExportFolders(2) = codeBase & "\Src\OfficeAddins\Common\VBA\APIRegistry\"
tmpExportFolders(3) = codeBase & "\Src\OfficeAddins\Common\VBA\OFCUI\"
#ElseIf Powerpoint And LEGACY Then
ReDim tmpExportFolders(5)
tmpExportFolders(0) = codeBase & "\Src\OfficeAddins\PowerPoint\PowerPoint\"
tmpExportFolders(1) = codeBase & "\Src\OfficeAddins\PowerPoint\PowerPoint\Legacy"
tmpExportFolders(2) = codeBase & "\Src\OfficeAddins\Common\VBA\"
tmpExportFolders(3) = codeBase & "\Src\OfficeAddins\Common\VBA\APIRegistry\"
tmpExportFolders(4) = codeBase & "\Src\OfficeAddins\Common\VBA\OFCUI\"
tmpExportFolders(5) = codeBase & "\Src\OfficeAddins\Common\VBA\LM\"
#ElseIf Powerpoint Then
ReDim tmpExportFolders(4)
tmpExportFolders(0) = codeBase & "\Src\OfficeAddins\PowerPoint\PowerPoint\"
tmpExportFolders(1) = codeBase & "\Src\OfficeAddins\Common\VBA\"
tmpExportFolders(2) = codeBase & "\Src\OfficeAddins\Common\VBA\APIRegistry\"
tmpExportFolders(3) = codeBase & "\Src\OfficeAddins\Common\VBA\OFCUI\"
tmpExportFolders(4) = codeBase & "\Src\OfficeAddins\Common\VBA\LM\"
#ElseIf WORD And LEGACY Then
ReDim tmpExportFolders(5)
tmpExportFolders(0) = codeBase & "\Src\OfficeAddins\Word\Word\"
tmpExportFolders(1) = codeBase & "\Src\OfficeAddins\Word\WordLegacy\"
tmpExportFolders(2) = codeBase & "\Src\OfficeAddins\Common\VBA\"
tmpExportFolders(3) = codeBase & "\Src\OfficeAddins\Common\VBA\APIRegistry\"
tmpExportFolders(4) = codeBase & "\Src\OfficeAddins\Common\VBA\OFCUI\"
tmpExportFolders(5) = codeBase & "\Src\OfficeAddins\Common\VBA\LM\"
#ElseIf WORD Then
ReDim tmpExportFolders(4)
tmpExportFolders(0) = codeBase & "\Src\OfficeAddins\Word\Word\"
tmpExportFolders(1) = codeBase & "\Src\OfficeAddins\Common\VBA\"
tmpExportFolders(2) = codeBase & "\Src\OfficeAddins\Common\VBA\APIRegistry\"
tmpExportFolders(3) = codeBase & "\Src\OfficeAddins\Common\VBA\OFCUI\"
tmpExportFolders(4) = codeBase & "\Src\OfficeAddins\Common\VBA\LM\"
#End If
Dim idx As Integer
For idx = LBound(tmpExportFolders) To UBound(tmpExportFolders)
importModulesFromFolder tmpExportFolders(idx)
Next idx
checkModuleChanges "", True, True
appendExportFoldersFunction tmpExportFolders
End Sub
Sub appendExportFoldersFunction(tmpExportFolders() As String)
Dim v
Dim VBProj As Variant
Dim VBComp As Variant
Dim CodeMod As Variant
Dim lineNum As Long
Const DQUOTE = """"
Dim idx As Integer
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
If VBComp.name = "ModuleImporterHash" Then
Set CodeMod = VBComp.CodeModule
Exit For
End If
Next VBComp
With CodeMod
lineNum = .CountOfLines + 1
.InsertLines lineNum, " "
lineNum = lineNum + 1
.InsertLines lineNum, "Public Function getExportFolders() As String()"
lineNum = lineNum + 1
.InsertLines lineNum, " Static exportFolders(0 To " & UBound(tmpExportFolders) & ") As String"
lineNum = lineNum + 1
.InsertLines lineNum, " Static assigned As Boolean"
lineNum = lineNum + 1
.InsertLines lineNum, " If Not assigned Then"
lineNum = lineNum + 1
.InsertLines lineNum, " assigned = True"
lineNum = lineNum + 1
For idx = LBound(tmpExportFolders) To UBound(tmpExportFolders)
.InsertLines lineNum, " exportFolders(" & CStr(idx) & ") = " & DQUOTE & tmpExportFolders(idx) & DQUOTE
lineNum = lineNum + 1
Next idx
.InsertLines lineNum, " End If"
lineNum = lineNum + 1
.InsertLines lineNum, " getExportFolders = exportFolders"
lineNum = lineNum + 1
.InsertLines lineNum, "End Function"
End With
End Sub
Public Function getFSO() As Object
If FSO Is Nothing Then
Set FSO = CreateObject("Scripting.FileSystemObject")
End If
Set getFSO = FSO
End Function
Public Sub importModuleFromFile(modulePath As String)
If (dir(modulePath, vbNormal) <> "") Then
Application.VBE.ActiveVBProject.VBComponents.Import modulePath
End If
End Sub
Public Sub importModulesFromFolder(SourceFolder As String)
Dim moduleFile As String
Dim mask As String
If (dir(SourceFolder, vbDirectory) <> "") Then
mask = SourceFolder & "\" & "*.cls"
moduleFile = dir(mask)
Do While moduleFile <> ""
If moduleFile = "ThisWorkbook.cls" Then
ReadModuleCodeFromFile Application.VBE.ActiveVBProject.VBComponents.Item("ThisWorkbook"), SourceFolder & "\" & moduleFile
ElseIf Mid(moduleFile, 1, 5) = "Sheet" Then
''NOTHING FOR NOW!
Else
Application.VBE.ActiveVBProject.VBComponents.Import SourceFolder & "\" & moduleFile
End If
moduleFile = dir
Loop
mask = SourceFolder & "\" & "*.bas"
moduleFile = dir(mask)
Do While moduleFile <> ""
If moduleFile = "ModuleImporter.bas" Then
''NOTHING FOR NOW!
Else
Application.VBE.ActiveVBProject.VBComponents.Import SourceFolder & "\" & moduleFile
End If
moduleFile = dir
Loop
mask = SourceFolder & "\" & "*.frm"
moduleFile = dir(mask)
Do While moduleFile <> ""
Application.VBE.ActiveVBProject.VBComponents.Import SourceFolder & "\" & moduleFile
moduleFile = dir
Loop
End If
End Sub
Sub ForceExportModules()
Dim codeBase As String
On Error GoTo handleError
bleSkipModuleTracking = True
ExportModules
handleError:
bleSkipModuleTracking = False
End Sub
Sub WriteModuleCodeToFile(VBComp As Variant, strPath As String)
Dim oFile As Object
Dim strLines As String
If VBComp.CodeModule.CountOfLines > 0 Then
Set oFile = FSO.CreateTextFile(strPath)
strLines = VBComp.CodeModule.Lines(1, VBComp.CodeModule.CountOfLines)
oFile.WriteLine strLines
oFile.Close
Set FSO = Nothing
End If
End Sub
Sub ReadModuleCodeFromFile(VBComp As Variant, strPath As String)
Dim oFile As Object
Dim strLines As String
Dim deleteLineCount As Integer
Dim i As Integer
deleteLineCount = 0
VBComp.CodeModule.AddFromFile strPath
strLines = VBComp.CodeModule.Lines(1, 1)
If (InStr(strLines, "VERSION 1.0 CLASS") > 0) Then
For i = 2 To VBComp.CodeModule.CountOfLines + 1
strLines = VBComp.CodeModule.Lines(i, 1)
If (InStr(LCase(strLines), LCase("Option Explicit")) > 0) Then
deleteLineCount = i - 1
Exit For
End If
Next i
End If
If deleteLineCount > 0 Then
VBComp.CodeModule.DeleteLines 1, deleteLineCount
End If
End Sub
Function overwriteIfChanged(newFile As String, AppSpecificTargetFile As String) As Boolean
Dim result As Integer
Dim tempOut As String
Dim f
Dim doCopy As Boolean
doCopy = False
Dim actionReport As String
Dim targetFile As String
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 0
Dim errorCode As Integer
Dim codeBase As String
codeBase = Environ("CodebaseDir")
Dim exportFolders() As String
overwriteIfChanged = False
exportFolders = Application.Run("getExportFolders")
'''''Check in which folder the file is residing currently'''
Dim idx As Integer
For idx = LBound(exportFolders) To UBound(exportFolders)
If getFSO().FileExists(codeBase & "\" & exportFolders()(idx) & AppSpecificTargetFile) Then
targetFile = codeBase & "\" & exportFolders()(idx) & "\" & AppSpecificTargetFile
Exit For
End If
Next idx
If targetFile = "" Then
targetFile = codeBase & "\" & exportFolders()(0) & "\" & AppSpecificTargetFile
End If
errorCode = wsh.Run(Chr(34) & Environ("CodebaseDir") & DiffProgramLocation & Chr(34) & " -i " & newFile & " " & targetFile, windowStyle, waitOnReturn)
If errorCode = 0 Then
doCopy = False
Else
doCopy = True
End If
If doCopy And getFSO().FileExists(newFile) Then
If getFSO().FileExists(targetFile) Then
getFSO().DeleteFile (targetFile)
End If
getFSO().CopyFile newFile, targetFile
actionReport = "CHANGED "
Else
actionReport = "KEPT "
End If
If InStr(targetFile, ".bak") > 0 Then
targetFile = newFile
End If
Debug.Print actionReport & " [" & targetFile & "]"
Set wsh = Nothing
overwriteIfChanged = doCopy
End Function
Sub ExportModules()
Dim VBComp As Variant
Dim tempFile As String
Dim lineCharCount As Integer
Dim tmpSavePath As String
tmpSavePath = Environ$("TEMP")
lineCharCount = 0
If dir(tmpSavePath, vbDirectory) <> "" Then
tempFile = tmpSavePath & "\" & "TempFile"
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
If checkModuleChanges(VBComp.name, True) Or (VBComp.Type = vbext_ct_MSForm And VBComp.HasOpenDesigner) Then
If lineCharCount > 0 Then
lineCharCount = 0
Debug.Print
End If
Select Case VBComp.Type
Case vbext_ct_StdModule
VBComp.Export tempFile
overwriteIfChanged tempFile, VBComp.name & ".bas"
Case vbext_ct_Document
#If EXCEL Then
WriteModuleCodeToFile VBComp, tempFile
overwriteIfChanged tempFile, VBComp.name & ".cls"
#End If
Case vbext_ct_ClassModule
' ThisDocument and class modules
VBComp.Export tempFile
overwriteIfChanged tempFile, VBComp.name & ".cls"
Case vbext_ct_MSForm
'''' For Forms we have to export to the correct file, otherwise the wrong info about temp
'''' file will be stuck in the file causing problems!
VBComp.Export tmpSavePath & "\" & VBComp.name & ".frm"
overwriteIfChanged tmpSavePath & "\" & VBComp.name & ".frm", VBComp.name & ".frm"
overwriteIfChanged tmpSavePath & "\" & VBComp.name & ".frx", VBComp.name & ".frx"
Kill tmpSavePath & "\" & VBComp.name & ".frm"
Kill tmpSavePath & "\" & VBComp.name & ".frx"
Case Else
VBComp.Export tempFile
overwriteIfChanged tempFile, tmpSavePath & "\" & VBComp.name
End Select
Else
Debug.Print ".";
lineCharCount = lineCharCount + 1
If (lineCharCount >= 100) Then
Debug.Print
lineCharCount = 0
End If
End If
Next
If dir(tempFile) <> "" Then
Kill tempFile
End If
End If
If (lineCharCount > 0) Then Debug.Print
Debug.Print "Export done."
End Sub
Sub deleteAllModules()
Dim VBComp As Variant
Dim cnt As Integer
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
If VBComp.name <> "ModuleImporter" And VBComp.name <> "ThisWorkbook" And VBComp.Type <> vbext_ct_Document Then
Application.VBE.ActiveVBProject.VBComponents.Remove VBComp
ElseIf VBComp.Type = vbext_ct_Document Then
cnt = VBComp.CodeModule.CountOfLines
If cnt > 0 Then
VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
End If
End If
Next
End Sub
Function computeCRC16(txt As String) As String
Dim x As Long
Dim mask, i, j, nC, Crc As Integer
Dim c As String
Crc = &HFFFF
For nC = 1 To Len(txt) Step 2
j = val("&H" + LCase$(Mid(txt, nC, 2)))
Crc = Crc Xor j
For j = 1 To 8
mask = 0
If Crc / 2 <> Int(Crc / 2) Then mask = &HA001
Crc = Int(Crc / 2) And &H7FFF: Crc = Crc Xor mask
Next j
Next nC
computeCRC16 = Hex$(Crc) ''
End Function
Public Function checkModuleChanges(Optional moduleName As String = "", Optional Reset As Boolean = False, Optional Serialize As Boolean = False, Optional PassedEnvCodeBaseDir As String = "") As Boolean
Dim VBComp As Variant
Dim strContent As String
Dim strHash As String
Dim strHashNew As String
Dim allComponents As Variant
Static moduleChanges As Object
Dim lineCharCount As Integer
lineCharCount = 0
checkModuleChanges = False
''''Never save for ModuleImporterHash: False means no changes'''
If moduleName = "ModuleImporterHash" Then
Exit Function
End If
''''Always save when the SkipModuleTracking is set: True means Yes, there were changes! '''
If bleSkipModuleTracking Then
checkModuleChanges = True
Exit Function
End If
If moduleChanges Is Nothing Then
Set moduleChanges = CreateObject("Scripting.Dictionary")
On Error Resume Next
Application.Run "PopulateHashDictionary", moduleChanges
On Error GoTo 0
End If
If moduleName = "" Then
Set allComponents = Application.VBE.ActiveVBProject.VBComponents
Else
Set allComponents = New Collection
allComponents.Add Application.VBE.ActiveVBProject.VBComponents.Item(moduleName)
End If
For Each VBComp In allComponents
Dim numLines As Integer
numLines = VBComp.CodeModule.CountOfLines
If numLines = 0 Then
numLines = 1
End If
strContent = VBComp.name & vbNewLine & "--" & vbNewLine & VBComp.CodeModule.Lines(1, numLines)
strHashNew = computeCRC16(strContent) '''Application.Run("hashStr", strContent)
If (moduleChanges.Exists(VBComp.name)) Then
strHash = moduleChanges.Item(VBComp.name)
Else
strHash = vbNullString
End If
If moduleName = "" Then
If strHashNew <> strHash Then
Debug.Print "+";
Else
Debug.Print ".";
End If
lineCharCount = lineCharCount + 1
If (lineCharCount >= 100) Then
Debug.Print
lineCharCount = 0
End If
End If
If strHashNew <> strHash Then
checkModuleChanges = True
If (moduleChanges.Exists(VBComp.name)) Then
If Reset Then
moduleChanges.Item(VBComp.name) = strHashNew
End If
Else
moduleChanges.Add VBComp.name, strHashNew
End If
End If
Next VBComp
If Serialize Then
Dim v
Dim VBProj As Variant
Dim CodeMod As Variant
Dim lineNum As Long
Const DQUOTE = """"
For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
If VBComp.name = "ModuleImporterHash" Then
Application.VBE.ActiveVBProject.VBComponents.Remove VBComp
Exit For
End If
Next VBComp
Set VBProj = Application.VBE.ActiveVBProject
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
VBComp.name = "ModuleImporterHash"
Set CodeMod = VBComp.CodeModule
'''''''''''''''''''''''' GET THE GIT HASH '''''''''''''''''''''''''
On Error Resume Next
Dim GitHash As String
Dim HASHfile As String
Dim f, contents, var1
Set f = getFSO().OpenTextFile(PassedEnvCodeBaseDir & "\.git\HEAD", 1)
contents = f.ReadAll
f.Close
f = Null
HASHfile = Replace$(Mid$(contents, 6), "/", "\")
HASHfile = Left$(HASHfile, Len(HASHfile) - 1)
HASHfile = PassedEnvCodeBaseDir & "\.git\" & HASHfile & ""
Set f = getFSO().OpenTextFile(HASHfile)
GitHash = Left$(f.ReadAll, 10)
f.Close
On Error GoTo 0
'''''''''''''''''''''''' GOT THE GIT HASH ''''''''''''''''''''''''''
With CodeMod
lineNum = .CountOfLines + 1
.InsertLines lineNum, "Public Const LatestGitHash = " & DQUOTE & GitHash & DQUOTE
lineNum = lineNum + 1
.InsertLines lineNum, "Public Const BuildDateTime = " & DQUOTE & Now & DQUOTE
lineNum = lineNum + 1
.InsertLines lineNum, ""
lineNum = lineNum + 1
.InsertLines lineNum, "Public Sub PopulateHashDictionary(byref d as Object)"
For Each v In moduleChanges.Keys
lineNum = lineNum + 1
.InsertLines lineNum, " d.add " & DQUOTE & v & DQUOTE & "," & DQUOTE & moduleChanges.Item(v) & DQUOTE
Next v
lineNum = lineNum + 1
.InsertLines lineNum, "End Sub"
End With
End If
If moduleName = "" Then
If lineCharCount > 0 Then Debug.Print
Debug.Print "Done (Re)hashing."
End If
End Function
Attribute VB_Name = "Loader_Globals"
Option Explicit
'version:
' 2011-09-09.1
'declarations required for api
Public Type ToolParamsVt
Parameters() As Variant
End Type
'api
#If VBA7 Then
'WinAPI, alphabetical
Public Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As LongPtr, ByVal dwId As Long, ByRef riid As GUID, ByRef ppvObject As Object) As Long
Public Declare PtrSafe Function BringWindowToTop Lib "user32" (ByVal Hwnd As LongPtr) As Long
Public Declare PtrSafe Function CLSIDFromString Lib "OLE32.DLL" (pstCLS As LongPtr, clsID As GUID) As Long
Public Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal Hwnd As LongPtr) As Long
Public Declare PtrSafe Function EnableMenuItem Lib "user32" (ByVal hMenu As LongPtr, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
Public Declare PtrSafe Function EnumChildWindows Lib "user32" (ByVal hWndParent As LongPtr, ByVal lpEnumFunc As LongPtr, ByVal lParam As LongPtr) As Long
Public Declare PtrSafe Function EnumWindows Lib "user32" (ByVal lpEnumFunc As LongPtr, ByVal lParam As LongPtr) As Long
Public Declare PtrSafe Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As LongPtr
Public Declare PtrSafe Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As LongPtr, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare PtrSafe Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare PtrSafe Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Public Declare PtrSafe Function FindClose Lib "kernel32" (ByVal hFindFile As LongPtr) As Long
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function FreeLibrary Lib "kernel32" (ByVal hLibModule As LongPtr) As Long
Public Declare PtrSafe Function GetActiveObject Lib "Oleaut32.dll" (lpRclsid As LongPtr, pvReserved As LongPtr, lpUnk As LongPtr) As Long
Public Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal Hwnd As LongPtr, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As Long
Public Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr
Public Declare PtrSafe Function GetLastError Lib "kernel32" () As Long
Public Declare PtrSafe Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Public Declare PtrSafe Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameA" (ByVal lpShortPath As String, ByVal lpLongPath As String, ByVal hBuffer As Long) As Long
Public Declare PtrSafe Function GetSystemMenu Lib "user32" (ByVal Hwnd As LongPtr, ByVal bRevert As Long) As LongPtr
Public Declare PtrSafe Function GetMenuItemCount Lib "user32" (ByVal hMenu As LongPtr) As Long
Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal Hwnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal Hwnd As LongPtr) As Long
Public Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal Hwnd As LongPtr, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare PtrSafe Function IIDFromString Lib "ole32" (ByVal lpsz As LongPtr, ByRef lpiid As GUID) As LongPtr
Public Declare PtrSafe Function IsWindowVisible Lib "user32" (ByVal Hwnd As LongPtr) As Long
Public Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongPtr
Public Declare PtrSafe Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As LongPtr, ByVal dwFlags As Long) As LongPtr
Public Declare PtrSafe Function PathCombine Lib "shlwapi" Alias "PathCombineA" (ByVal szDest As String, ByVal lpszDir As String, ByVal lpszFile As String) As Long
Public Declare PtrSafe Function PathFileExists Lib "shlwapi" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Public Declare PtrSafe Function PathIsDirectory Lib "shlwapi" Alias "PathIsDirectoryA" (ByVal pszPath As String) As Long
Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Public Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Public Declare PtrSafe Function SetFocus Lib "user32" (ByVal Hwnd As LongPtr) As LongPtr
Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal Hwnd As LongPtr, ByVal nCmdShow As Long) As Long
Public Declare PtrSafe Function SystemTimeToVariantTime Lib "oleaut32" (psystime As SYSTEMTIME, pvtime As Double) As Long
'Bloomberg API
Public Declare PtrSafe Function AddRunningObject Lib "Bloomberg.Rtd.Ipc.Interop.dll" Alias "_AddRunningObject@8" (ByVal szMoniker As String, ByVal pVal As Application) As Integer
Public Declare PtrSafe Function APICoCreateInstance Lib "bbloader.dll" (ByVal lpszFilePathName As String, ByRef rclsid As GUID, riid As GUID, ByRef ppv As Object) As Long
Public Declare PtrSafe Sub HelpHelp Lib "bbtblwiz.dll" ()
Public Declare PtrSafe Function RemoveRunningObjects Lib "Bloomberg.Rtd.Ipc.Interop.dll" Alias "_RemoveRunningObjects@0" () As Integer
Public Declare PtrSafe Sub TogglePane Lib "Bloomberg.Taskpane.Host.dll" (ByVal toolID As Integer)
'Bloomberg API - ToolsProxy
#If Win64 Then
Public Declare PtrSafe Function Initialize Lib "ToolsProxy.dll" (ByVal App As Application, ByVal hwndOwner As Long) As Boolean
Public Declare PtrSafe Function ActivateTool Lib "ToolsProxy.dll" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Function DeactivateTool Lib "ToolsProxy.dll" ()
Public Declare PtrSafe Function RetrieveToolParams Lib "ToolsProxy.dll" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Function AsyncInvokeTool Lib "ToolsProxy.dll" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Function ExcelAsyncInvokeDone Lib "ToolsProxy.dll" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Sub Cleanup Lib "ToolsProxy.dll" ()
#Else
Public Declare PtrSafe Function Initialize Lib "ToolsProxy.dll" Alias "_Initialize@8" (ByVal App As Application, ByVal hwndOwner As Long) As Boolean
Public Declare PtrSafe Function ActivateTool Lib "ToolsProxy.dll" Alias "_ActivateTool@4" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Function DeactivateTool Lib "ToolsProxy.dll" Alias "_DeactivateTool@0" ()
Public Declare PtrSafe Function RetrieveToolParams Lib "ToolsProxy.dll" Alias "_RetrieveToolParams@4" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Function AsyncInvokeTool Lib "ToolsProxy.dll" Alias "_AsyncInvokeTool@4" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Function ExcelAsyncInvokeDone Lib "ToolsProxy.dll" Alias "_ExcelAsyncInvokeDone@4" (Params As ToolParamsVt) As Boolean
Public Declare PtrSafe Sub Cleanup Lib "ToolsProxy.dll" Alias "_Cleanup@0" ()
#End If
#Else
'WinAPI, alphabetical
Public Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As Long, _
ByVal dwId As Long, _
ByRef riid As GUID, _
ByRef ppvObject As Object) _
As Long
Public Declare Function BringWindowToTop Lib "user32" (ByVal Hwnd As Long) As Long
Public Declare Function CLSIDFromString Lib "OLE32.DLL" (pstCLS As Long, ByRef clsID As GUID) As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As Long, _
ByVal wIDEnableItem As Long, _
ByVal wEnable As Long) As Long
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Public Declare Function GetActiveObject Lib "Oleaut32.dll" (lpRclsid As Long, pvReserved As Long, lpUnk As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal Hwnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function GetLastError Lib "kernel32.dll" () As Long
Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Integer) As Integer
Public Declare Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameA" (ByVal lpShortPath As String, ByVal lpLongPath As String, ByVal hBuffer As Long) As Long
Public Declare Function GetSystemMenu Lib "user32" (ByVal Hwnd As Long, ByVal bRevert As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function GetWindowPlacement Lib "user32" (ByVal Hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal Hwnd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal Hwnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long
Public Declare Function IIDFromString Lib "ole32" (ByVal lpsz As Long, ByRef lpiid As GUID) As Long
Public Declare Function IsWindowVisible Lib "user32" (ByVal Hwnd As Long) As Long
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal module As String) As Long
Public Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long
Public Declare Function PathCombine Lib "shlwapi" Alias "PathCombineA" (ByVal szDest As String, ByVal lpszDir As String, ByVal lpszFile As String) As Long
Public Declare Function PathFileExists Lib "shlwapi" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Public Declare Function PathIsDirectory Lib "shlwapi" Alias "PathIsDirectoryA" (ByVal pszPath As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
Public Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Public Declare Function SetFocus Lib "user32" (ByVal Hwnd As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal lHwnd As Long, ByVal lCmdShow As Long) As Boolean
Public Declare Function SystemTimeToVariantTime Lib "oleaut32" (psystime As SYSTEMTIME, pvtime As Double) As Long
'Bloomberg API
Public Declare Function AddRunningObject Lib "Bloomberg.Rtd.Ipc.Interop.dll" Alias "_AddRunningObject@8" (ByVal szMoniker As String, ByVal pVal As Application) As Integer
Public Declare Function APICoCreateInstance Lib "bbloader.dll" (ByVal lpszFilePathName As String, ByRef rclsid As GUID, riid As GUID, ByRef ppv As Object) As Long
Public Declare Sub HelpHelp Lib "bbtblwiz.dll" ()
Public Declare Function RemoveRunningObjects Lib "Bloomberg.Rtd.Ipc.Interop.dll" Alias "_RemoveRunningObjects@0" () As Integer
Public Declare Sub TogglePane Lib "Bloomberg.Taskpane.Host.dll" (ByVal toolID As Integer)
'Bloomberg API - ToolsProxy
Public Declare Function Initialize Lib "ToolsProxy.dll" Alias "_Initialize@8" (ByVal App As Application, ByVal hwndOwner As Long) As Boolean
Public Declare Function ActivateTool Lib "ToolsProxy.dll" Alias "_ActivateTool@4" (Params As ToolParamsVt) As Boolean
Public Declare Function DeactivateTool Lib "ToolsProxy.dll" Alias "_DeactivateTool@0" ()
Public Declare Function RetrieveToolParams Lib "ToolsProxy.dll" Alias "_RetrieveToolParams@4" (Params As ToolParamsVt) As Boolean
Public Declare Function AsyncInvokeTool Lib "ToolsProxy.dll" Alias "_AsyncInvokeTool@4" (Params As ToolParamsVt) As Boolean
Public Declare Function ExcelAsyncInvokeDone Lib "ToolsProxy.dll" Alias "_ExcelAsyncInvokeDone@4" (Params As ToolParamsVt) As Boolean
Public Declare Sub Cleanup Lib "ToolsProxy.dll" Alias "_Cleanup@0" ()
#End If
'global constants
Public Const MAINMENUBAR As String = "Menu Bar"
Public Const SettingFileName As String = "BBPTConfig.xml"
Public Const Setting_VersionSuffix_Pre12 As String = "2003"
Public Const Setting_VersionSuffix_12Plus As String = "2007"
Public Const CopyToPowerPoint_NamePrefix As String = "bb_"
Public Const LinkedExcelFile_ExtensionFilter As String = ".xl*"
Public Const DefaultNewPasteShapeLeft As Long = 50
Public Const DefaultNewPasteShapeTop As Long = 100
Public Const MAX_PATH As Long = 260
Public Const OverviewPage As String = "Overview_PPT.htm"
Public Const WhatsNewPage As String = "What_s_New_PPT.htm"
'types
Public Type ACL
AclRevision As Byte
Sbz1 As Byte
AclSize As Integer
AceCount As Integer
Sbz2 As Integer
End Type
Public Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type POINTAPI
x As Long
y As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Type UFILEDATA
filename As Variant
PathIsRelative As Boolean
ModifiedDate As Date
CreatedDate As Date
Size As Double
Owner As String
NewFileFlag As Boolean
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Public Type WINDOWPLACEMENT
Length As Long
flags As Long
showCmd As Long
ptMinPosition As POINTAPI
ptMaxPosition As POINTAPI
rcNormalPosition As RECT
End Type
'enums
Public Enum lpaLinkPasteAspectRatio
lpaSizeToDestinationBoth = 0
lpaSizeToDestinationWidth = 1
lpaSizeToDestinationHeight = 2
lpaKeepOriginalSize = 3
lpaIntelligentSizing = 4
End Enum
Public Enum lumLinkUpdateMode
lumNoneUnknown = 0
lumUpdateLinks
lumManageLinks
lumBrokenLinks
lumShowSource
End Enum
Public Enum lusLinksUpdateScope
lusNoneUnknown = 0
lusSelectedShape = 1
lusActiveSlide = 2
lusPresentation = 3
End Enum
Public Enum lpsLinkUpdatePreparationStep
lpsNoneUnknown = 0
lpsStart = 1
lpsGetShapeAndAttributes = 2
lpsValidateWbk = 3
lpsGetWbk = 4
lpsValidateWbkRange = 5
lpsCheckForNewerFiles = 6
lpsCheckForMatchingFiles = 7
lpsDo = 8
lpsFinish = 9
End Enum
Public Enum lrsLinkReadyState
lrsConflicted = -1
lrsNotAnalyzed = 0
lrsReady
lrsNewerFiles
lrsOtherFiles
lrsBrokenNewClosed
lrsBrokenSavedPathNotFound
lrsBrokenCannotOpenWbk
lrsBrokenRangeNotFound
lrsBrokenChartCannotResolveSource
lrsCannotOpenWbkCorrupt
lrsCannotOpenWbkFilenameCollision
End Enum
Public Enum swcShowWindowCmd
swcHide = 0
swcNormal = 1
swcMinimized = 2 'but activated
swcMaximized = 3
swcNormalNoActivate = 4
swcShow = 5
swcMinimize = 6 'activates next
swcMinimizeNoActivate = 7
swcShowNoActive = 8
swcRestore = 9
swcShowDefault = 10
swcForceMinimized = 11
End Enum
Public Enum tssTocDividerShowSetting
tssToC
tssSectionNumbers
tssPageNumbers
tssFooterForDividers
tssHyperlinks
End Enum
Public Enum urfRootFolders
urfWindowsDesktop = &H0 ' CSIDL_DESKTOP: Virtual folder
urfProgramsUser = &H2 ' CSIDL_PROGRAMS: File-system folder
urfProgramsCommon = &H17 ' CSIDL_COMMON_PROGRAMS: File-system folder
urfPersonal = &H5 ' CSIDL_PERSONAL: File-system folder
urfFavorites = &H6 ' CSIDL_FAVORITES: File-system folder
urfStartupUser = &H7 ' CSIDL_STARTUP: File-system folder
urfStartupCommon = &H18 ' CSIDL_COMMON_STARTUP: File-system folder
urfRecent = &H8 ' CSIDL_RECENT: File-system folder
urfSendTo = &H9 ' CSIDL_SENDTO: File-system folder
urfStartMenuUser = &HB ' CSIDL_STARTMENU: File-system folder
urfStartMenuCommon = &H16 ' CSIDL_COMMON_STARTMENU: File-system folder
urfDesktopFolderUser = &H10 ' CSIDL_DESKTOPDIRECTORY: File-system folder
urfDesktopFolderCommon = &H19 ' CSIDL_COMMON_DESKTOPDIRECTORY: File-system folder
urfMyComputer = &H11 ' CSIDL_DRIVES: Virtual folder
urfNetwork = &H12 ' CSIDL_NETWORK: Virtual folder
urfTemplates = &H15 ' CSIDL_TEMPLATES: File-system folder
urfAppData = &H1A ' CSIDL_APPDATA: File-system folder
End Enum
'global variables
Public g_processID As String
Public gRibbonAddinName As String
Public gConnection As ADODB.Connection
Public DividerTitle As String
Public DividerSubTitle As String
Public DividerCancelled As Boolean
Public SubDividerChecked As Boolean
Public SlideNumberingOff As Boolean
' Constants for use with GetLocaleInfo
Private Const LOCALE_USER_DEFAULT As Long = 1024
Private Const LOCALE_SISO639LANGNAME As Long = 89
Private Const ISONAME_RESPONSE_LENGTH As Long = 16
#If VBA7 Then
Private m_rtdModule As LongPtr
#Else
Private m_rtdModule As Long
#End If
'
Public Function ToLocalizedResourceName(resourceName As String, extension As String) As String
pushTrace "ToLocalizedResourceName", "Globals.bas", resourceName, extension
Dim lenResponse As Integer
Dim isoName As String * ISONAME_RESPONSE_LENGTH
Dim uiCulture As String
If Not GetUserStringValue(OFFICE_TOOLS_SETTINGS_REGKEY, "Language", uiCulture) Then
lenResponse = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, isoName, Len(isoName))
uiCulture = Left$(LCase(isoName), lenResponse - 1)
End If
If Left$(uiCulture, 2) = "en" Then
uiCulture = ""
Else
uiCulture = "_" & uiCulture
End If
ToLocalizedResourceName = resourceName & uiCulture & extension
popTrace "ToLocalizedResourceName"
End Function
Attribute VB_Name = "Loader_modBloombergUILoader"
Sub AutoExec()
Dim sOfficeToolsPath As String
Dim sBloombergUIWordPath As String
Dim i As Long
Dim ws As WORD.AddIn
If Not IsAddinKillSwitchEnabled Then 'TREQ 3117337 - global add-in kill switch
If (IsPowerToolsAvailable = True Or IsBlpofcRibbonAvailable = True) And Not isDisabledForOfficeToolsWord Then
GetOfficeToolsPath sOfficeToolsPath
'DRQS EN 43507865 - LinkV2/Legacy dual support
If IsLinkManagerV2Available() Then
sBloombergUIWordPath = sOfficeToolsPath & "\" & ADDIN_BLOOMBERG_UI_WORD
Else
sBloombergUIWordPath = sOfficeToolsPath & "\" & ADDIN_BLOOMBERG_UI_WORD_LEGACY
End If
If dir$(sBloombergUIWordPath) <> "" Then
Set ws = Application.AddIns.Add(sBloombergUIWordPath, False)
ws.Installed = True
Else
MsgBox "Bloomberg Office tools folder not accessible"
End If
End If
End If
For i = Application.AddIns.count To 1 Step -1
If Application.AddIns(i).name = ADDIN_BLOOMBERG_UI_WORD_STARTUP Then
Application.AddIns(i).Installed = msoFalse
End If
Next i
ThisDocument.Close
End Sub
Function IsWord64Bit() As Boolean
If val(Application.Version) >= 12 Then
If Mid$(Application.ProductCode, 20, 2) = "-1" Then
IsWord64Bit = True
End If
End If
End Function
Attribute VB_Name = "Loader_modConstants"
Option Explicit
Public Const ADDIN_BLOOMBERG_UI_WORD = "BloombergUI.dot"
Public Const ADDIN_BLOOMBERG_UI_WORD_STARTUP = "BloombergUILoader.dot"
Public Const ADDIN_BLOOMBERG_UI_WORD_RIBBON = "BloombergRibbonUI.dotm"
'DRQS EN 43507865 - LinkV2/Legacy dual support
Public Const ADDIN_BLOOMBERG_UI_WORD_LEGACY = "BloombergUILegacy.dot"
Attribute VB_Name = "Loader_modUtility_Word"
Option Explicit
Private mxmlDom As DOMDocument
Private mxmlRoot As IXMLDOMElement
Private mUIDom As New DOMDocument
Private mCustomUIXml As String
Private Const Setting_XMLContainerTagName As String = "Content"
Public ShuttingDown As Boolean
'DRQS EN 43507865 - LinkV2/Legacy dual support
#If VBA7 Then
Public Function GetApplicationHandle() As LongPtr
Dim Hwnd As LongPtr
#Else
Public Function GetApplicationHandle() As Long
Dim Hwnd As Long
#End If
Dim VersionNo As String
Hwnd = FindWindow("OpusApp", vbNullString)
'VersionNo = Left(Application.Version, InStr(1, Application.Version, ".") - 1)
GetApplicationHandle = Hwnd
End Function
Public Function uPathExists(pstrPath As String) As Boolean
uPathExists = (PathFileExists(pstrPath) = 1)
End Function
Private Function GetXMLSettingFile() As Boolean
…
|
|||
Open this report in the interactive analyzer, or submit your own file for analysis.