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関連

    Office 2007のサポートが2017年10月10日に終了します。

    2007年1月にパッケージ版が発売されてから早10年、長らく活躍してき…

  2. Excel

    Gmail APIを使ってメール送信するVBAマクロ

    「「Gmail API」β版公開、連動アプリ開発を支援」にもあるように…

  3. VBScript

    clipコマンドを利用してクリップボードに文字列をコピーするVBScript

    clipコマンドを利用して文字列をクリップボードにコピーするVBScr…

  4. アイコン一覧

    Office 365アイコン(imageMso)一覧(E)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  5. Office関連

    指定したスライドにユーザー設定レイアウトを適用するPowerPointマクロ

    PowerPointにはオリジナルのレイアウト(ユーザー設定レイアウト…

  6. Office アドイン

    Office用アプリ(apps for Office)の概要と開発方法

    当ブログでもカテゴリー:JavaScript API for Offi…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP