.NET 4.0 -> .NET 4.5 アプリケーションの移行プロセス中に、非常に奇妙な動作を発見しました。この短いコード スニペットまで、この問題を追跡することができました。
class Program
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetSystemMetrics(int nIndex);
static void Main(string[] args)
{
const int CXFRAME = 0x20;
const int CYFRAME = 0x21;
var dx = GetSystemMetrics(CXFRAME);
var dy = GetSystemMetrics(CYFRAME);
Console.WriteLine("{0}x{1}", dx, dy);
Console.ReadKey();
}
}
Target Framework = 4.0
(および2.0、3.0、3.5)でコンパイルすると、出力されます8x8
でコンパイルするとTarget Framework = 4.5
、出力されます4x4
このサンプルを MSVS2012 デバッガーで実行すると、常に出力も出力されます4x4
(任意のターゲット フレームワークを使用)。
他のオプション (ターゲット フレームワーク プロファイル、ターゲット プラットフォーム、Aero の有効化/無効化) は結果に影響しません。出力を変更するのは、ターゲット フレームワークとデバッガーでの実行だけです。この問題は 3 台のコンピューターで再現できましたが、残念ながら、インストールされているソフトウェアに関してはほとんど同じです。
- Windows 7 Ultmate SP1 (ロシア語、すべての更新プログラムがインストール済み)、MSVS2012 (英語/ロシア語) Update 1
- Windows 8 (仮想マシン上)
SystemParameters
現在、リフレクションを使用して呼び出すいくつかの .NET クラス (たとえば) にパッチを適用することを考えていますGetSystemMetrics()
が、正しいメトリック値を取得する方法がわかりません。
質問:
- 何か不足していますか?
GetSystemMetrics()
ターゲット フレームワークによってどのように影響を受ける可能性がありますか? GetSystemMetrics()
.NET 4.5 アプリから呼び出して正しい結果を得る方法はありますか?
この問題を解決するための提案をお待ちしております。また、問題を再現できない場合は、システムの簡単な説明をコメントに残してください。