自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcelといった、Officeアプリケーションのバージョン情報を取得するスクリプトです。
通常であれば、各OfficeアプリケーションのApplication.Versionプロパティで取得できますが、私が欲しいのはバージョン情報ダイアログに表示される「Microsoft Word 2016 MSO (16.0.7668.7078) 32 ビット」のような長ったらしいバージョン情報です。
どこかのプロパティやレジストリに情報があるのかもしれませんが、調べるのが面倒だったので、UI Automationを使って直接ダイアログから文字列を抜き出すことにしました。
'UI Automation PowerShell Extensionsを使ってOfficeアプリケーションのバージョン情報ダイアログからバージョン情報を取得するVBScript
'参考Webページ:
'https://uiautomation.codeplex.com/
'https://www.ka-net.org/blog/?p=4946
Option Explicit
Dim app
Dim cls
Dim com
Dim i
Const DLL_Path = "C:\System\UIAutomation\UIAutomation.dll" 'UIAutomation.dllのパス
'アプリケーション選択
i = InputBox("バージョン情報を取得するアプリケーションを選択してください。" & vbNewLine & vbNewLine & _
"1…Excel" & vbNewLine & _
"2…Word" & vbNewLine & _
"3…PowerPoint", "アプリケーション選択", 1)
If IsEmpty(i) = True Then Wscript.Quit
If IsNumeric(i) = False Then Wscript.Quit
Select Case i
Case 1
app = "Excel"
cls = "XLMAIN"
Case 2
app = "Word"
cls = "OpusApp"
Case 3
app = "PowerPoint"
cls = "PPTFrameClass"
Case Else
app = "Excel"
cls = "XLMAIN"
End Select
com = "powershell -Command """
com = com & "Add-Type -Assembly System.Windows.Forms;"
com = com & "ipmo '" & DLL_Path & "';"
com = com & "[UIAutomation.Preferences]::Highlight = $false;"
com = com & "while($true){"
com = com & " Start-Sleep -s 1;"
com = com & " $app = Get-UiaWindow -Class '" & cls & "';"
com = com & " $dlg = $app | Get-UiaControlFirstChild;"
com = com & " $title = $dlg | Read-UiaControlName;"
com = com & " if($title.Contains('バージョン情報')){"
com = com & " break;"
com = com & " }"
com = com & "}"
com = com & "$text = $dlg | Get-UiaText -Name '*" & app & "*';"
com = com & "$v = $text | Read-UiaControlName;"
com = com & "[Windows.Forms.Clipboard]::SetText($v);"
com = com & "$dlg | Get-UiaButton -Name 'OK' | Invoke-UiaButtonClick;"""
CreateObject("WScript.Shell").Run com, 0
With CreateObject(app & ".Application")
.Visible = True
.CommandBars.ExecuteMso "About"
WScript.Sleep 1000
.Quit
End With
上記コードを実行するとInputBoxが表示され、入力した番号に応じて、Excel、Word、PowerPointのバージョン情報をクリップボードにコピーします。
仕組みとしては、この記事で紹介している「UI Automation PowerShell Extensions」を使って、ダイアログから文字列を取得しています。
若干安定性に欠けるのが難点ですが、手作業で行うよりは早くバージョン情報を取得できるので、とりあえずはこれで良しとします。




















この記事へのコメントはありません。