質問
.NETアプリケーションの新しいWindows 7タスクバー機能を利用したいのですが、.NETでWindows 7の機能を確認する最良の方法は何であるかを知りたいです。私の目標は、Windows XPとWindows 7に個別のコードを使用することです。
あまり熱心ではない:
- try 7 catchでWindows 7コードをラップするだけ
- OS =" Windows 7"の場合その後...
もちろん、これはほとんどの人が行っていることです。私は本当に良いアプローチを求めてどこでも狩りましたが、成功しませんでした。 Microsoftのアンマネージコードラッパーライブラリは、Windows 7で実行されていると仮定しているようです...
解決
OS =" Windows 7
"の場合、何も問題はないと思います。もちろん、
-
OS> =" Windows 7"
の場合(Windows 7.1または後続のもので壊れないように) - Environment.OSVersion (プラットフォームおよび> =バージョン)。
if(isWindows7){...}
でコードを乱雑にしたくない場合は、プラットフォーム固有のコードを別のクラスに配置することができます。たとえば、インターフェイスを作成できます
interface IOSSpecific {
void AddToJumpList(...);
...
}
およびこのクラスの2つの実装、1つは> = Win 7用、もう1つは他の実装(異なることを行うか、まったく行わない)。アプリケーションの起動時に、2つの実装のいずれかを使用して、 IOSSpecific
型のグローバル変数をインスタンス化します。
他のヒント
あなたがそうすることを期待します:
if ( Environment.OSVersion.Platform == windows7Id)
{
// win7 stuff
}
Windows7 idの値がわからない。
私は通常、この質問をして、異なるプラットフォームをサポートするために工場から作成するオブジェクトを決定します。コードベース全体にこれらを振りかけたり、例外をキャッチするよりも優れています。
コードパック( 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
ケイト