1

Windows 7 の新しいタスクバー機能を .NET アプリケーションで利用したいと考えており、.NET で Windows 7 の機能をチェックする最良の方法について人々が考えていることを知りたいです。私の目標は、Windows XP と Windows 7 で異なるコードを作成することです。

私は全体的に熱心ではありません:

  • Windows 7 コードを try catch でラップするだけです。
  • OS = "Windows 7" なら...

もちろん、これがほとんどの人が行っていることでない限り. 私は本当に良いアプローチを求めてあらゆる場所を探しましたが、成功しませんでした. Microsoft アンマネージ コード ラッパー ライブラリは、Windows 7 で実行されていることを前提としているようです...

4

3 に答える 3

4

」で問題ないと思いますif OS = "Windows 7。もちろん、

  • そうあるべきですif OS >= "Windows 7"(Windows 7.1またはその後継になるもので壊れないように)そして
  • これは、 Environment.OSVersion (プラットフォームおよび >= バージョン) を確認して行う必要があります。

でコードを乱雑にしたくない場合はif (isWindows7) {...}、プラットフォーム固有のコードを別のクラスに配置することをお勧めします。たとえば、インターフェイスを作成できます

interface IOSSpecific {
    void AddToJumpList(...);
    ...
}

そして、このクラスの 2 つの実装。1 つは >= Win 7 用で、もう 1 つはその他 (異なることをするか、まったく何もしない) です。IOSSpecificアプリケーションの起動時に、2 つの実装のいずれかを使用して、型のグローバル変数をインスタンス化します。

于 2009-12-01T14:53:47.687 に答える
2

私はあなたがすることを期待します:

if ( Environment.OSVersion.Platform == windows7Id)
{
    // win7 stuff
}

ただし、Windows7 id の値はわかりません。

私は通常、さまざまなプラットフォームをサポートするために自分のファクトリから作成するオブジェクトを決定するために、この質問をします。これらをコードベース全体にまき散らしたり、例外をキャッチしたりするよりも優れています。

于 2009-12-01T14:43:53.800 に答える
1

コード パック ( http://code.msdn.microsoft.com/WindowsAPICodePack )などのラッパー ライブラリを使用すると、バージョン チェックが行われます。先に進んでライブラリ メソッドを呼び出すと、実行中に OS にないことをしようとすると、PlatformNotSupportedException がスローされます。

Windows DLL を P/Invoking している場合は、EntryPointNotFoundException をキャッチすることもできます。これは、独自の相互運用を行う場合に最適な方法です。これは、数年後に機能が (更新やサービス パックによって) ダウンレベル OS に追加される可能性があるためです。

これらの両方を使用すると、タスクバーがないこと、ライブラリがないこと、または機能がないことを思い出させる何らかのフラグをキャッシュして、例外のスローとキャッチのパフォーマンス ヒットを節約できます。

独自のバージョン チェックを行い、使用している OS を確認したい場合は、>= の魔法を覚えておいてください。バージョンが正確にXP SP2 であることをテストし、「XP SP2 以降が必要」というメッセージ ボックスを表示するコードがどれだけあるか知っていますか? トン。_ 実際、これが Win7 のメジャー バージョンが 6 である理由です。そのため、「6 に等しい」かどうかをチェックするすべてのコードは引き続き機能します。その男にならないでください。

if (Environment.OSVersion.Version.Major >= 6)
{
   if (Environment.OSVersion.Version.Minor >= 1)
     // Do Win7 thing
   else
     // Do Vista thing
}
else if (Environment.OSVersion.Version.Major >= 5)
 // Do XP thing

すべてのメジャー/マイナー番号は、 http://msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspxで確認できます。

ケイト

于 2010-01-28T14:15:02.003 に答える