マルチディスプレイで開発していてSystem.Windows.Forms.Screen.AllScreensを使ったときの話。
ディスプレイごとのDPIを元にScreen情報が取得できると当たり前のように思っていたけどどうもそうではないらしい。
すべてのモニタのScreen情報はメインモニタのDPIを使って計算されている模様。
目先の解決
app.manifestに下記追加で解決。ちゃんとそれぞれのモニタのDPIで計算されて値が設定されていた。
app.manifest
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
</windowsSettings>
</application>