数年前のスタックオーバーフローの例では、EnumDisplaySettings を使用して、次の定義を持つデータ構造 DEVMODE をロードしています。
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmLogPixels As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
dmPelsWidth と dmPelsHeight は、このデータ構造に取得されます。これは私にとってもうまくいきます。また、デスクトップ領域に対するディスプレイの位置座標も知りたいです。DEVMODE 構造体に関する Windows デベロッパー センターの情報を見ると、POINTL 構造体である dmPosition パラメーターもあることがわかります。これは上記の DEVMODE 型定義から除外されており、追加すると、dmPelsWidth と dmPelsHeight は正しい情報を取得しなくなります。
上記で dmPosition が省略されたのはなぜですか? また、取得した情報を含めると機能しなくなったのはなぜですか?
例へのリンク: Excel VBA で外部モニターのサイズを見つける