Office関連

Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

自分の手間を減らすためのスクリプトシリーズ、今回は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」を使って、ダイアログから文字列を取得しています。

若干安定性に欠けるのが難点ですが、手作業で行うよりは早くバージョン情報を取得できるので、とりあえずはこれで良しとします。

関連記事

【オトカドール】ライバルカード第3弾カード一覧前のページ

Adobe IDによるサインイン無しでAcrobat DCをインストールする方法次のページ

関連記事

  1. Office関連

    [リボン・カスタマイズ]splitButton要素で大量にある項目を使いやすくまとめる。

    「既存の機能の代わりにマクロを実行する」でコメント(下記)をいただきま…

  2. Office アドイン

    [Office用アプリ]Random Data Generator

    Random Data Generatorはテスト用の個人情報データを…

  3. Office関連

    [Excel 2013]Web関数を使ってマッシュアップ

    以前書いた記事「Excel 2013で追加された「WEBSERVICE…

  4. Office アドイン

    [Office用アプリ]Seller Dashboardの販売者アカウントを作成する。

    Office用アプリをOfficeストアで公開するためにはMicros…

  5. Office関連

    Office 365 unified APIをJavaScriptだけで呼び出す

    Microsoftの松崎さんのブログに下記の記事がありました。…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP