自分の手間を減らすためのスクリプトシリーズ、今回は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」を使って、ダイアログから文字列を取得しています。
若干安定性に欠けるのが難点ですが、手作業で行うよりは早くバージョン情報を取得できるので、とりあえずはこれで良しとします。
この記事へのコメントはありません。