「VBA ディスプレイ 幅 高さ」といったキーワード検索でのアクセスがありました。
マクロでディスプレイの解像度を取得する方法を探している方だろうと思います。
マクロでディスプレイの高さや幅を取得する場合、手軽なのはWMIの「Win32_DesktopMonitor」クラスや「Win32_VideoController」クラスを利用する方法です。
Public Sub Sample1() 'Win32_DesktopMonitorクラス利用 Dim items As Object Dim item As Object Set items = CreateObject("WbemScripting.SWbemLocator") _ .ConnectServer.ExecQuery("Select * From Win32_DesktopMonitor") For Each item In items Debug.Print "Name:" & item.Name, _ "DeviceID:" & item.DeviceID, _ "ScreenWidth:" & item.ScreenWidth, _ "ScreenHeight:" & item.ScreenHeight Next End Sub Public Sub Sample2() 'Win32_VideoControllerクラス利用 Dim items As Object Dim item As Object Set items = CreateObject("WbemScripting.SWbemLocator") _ .ConnectServer.ExecQuery("Select * From Win32_VideoController") For Each item In items Debug.Print "Caption:" & item.Caption, _ "DeviceID:" & item.DeviceID, _ "CurrentHorizontalResolution:" & item.CurrentHorizontalResolution, _ "CurrentVerticalResolution:" & item.CurrentVerticalResolution Next End Sub
ただ、こちらの記事によると、正しくサイズを取得できない場合もあるようなので、PowerShell経由で.NETの「Screen.AllScreens」プロパティから値を取得するコードも考えてみました。
Public Sub Sample3() 'System.Windows.Forms.Screen.AllScreensプロパティ利用 Dim cmd As String Dim ret As String Dim v As Variant, vv As Variant Dim i As Long 'PowerShellの実行確認 On Error Resume Next Shell "PowerShell -Version", vbHide If Err.Number <> 0 Then Exit Sub On Error GoTo 0 cmd = "PowerShell -Command Add-Type -AssemblyName System.Windows.Forms;$str='';foreach($item in [Windows.Forms.Screen]::AllScreens){$str+=$item.DeviceName+','+$item.BitsPerPixel+','+$item.Primary+','+$item.Bounds.Width+','+$item.Bounds.Height+':'};$str=$str.Remove($str.Length-1,1);Write-Host $str;" ret = CreateObject("WScript.Shell").Exec(cmd).StdOut.ReadLine v = Split(ret, ":") 'PowerShellの実行結果を指定した区切り文字で分割 For i = LBound(v) To UBound(v) vv = Split(v(i), ",") Debug.Print "DeviceName:" & vv(0), _ "BitsPerPixel:" & vv(1), _ "Primary:" & vv(2), _ "Width:" & vv(3), _ "Height:" & vv(4) Next End Sub
PowerShellが実行できる環境が前提となりますが、WMIで上手くいかない場合は、こちらのコードもお試しください。
参考Webページ
- [WSH Panel Mod] foobar2000から複数のモニタの解像度とかプライマリかどうかを取得する
- http://p774.blog.fc2.com/blog-entry-27.html
- Get Screen resolution using WMI/powershell in Windows 7
- http://stackoverflow.com/questions/7967699/get-screen-resolution-using-wmi-powershell-in-windows-7
- VBScript to read resolution of primary monitor not always working
- https://social.technet.microsoft.com/Forums/en-US/ITCG/thread/235c064b-10a6-4d2d-b24b-68ae60c1a506
この記事へのコメントはありません。