

※ そのものズバリな API ではないので、情報を共有します。

Windows 8.1 と Windows Phone 8.1 に対応したユニバーサル Windows
アプリを開発する際に、現在利用されているプラットフォームを実行時に判別してロジックを分けたいと思います。
MSDNを見ても、それっぽいAPIが見当たりません。実現方法はありますか？


CC BY-SA 3.0
2014-12-17T10:03:13.193
1909
2014-12-19T11:04:49.243
2014-12-19T10:05:56.653
3210
2099
question
windows windows-store-apps
ユニバーサル Windows アプリの実行時にプラットフォームがWindowsなのかWindows Phoneなのかを判別するには？


Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation
クラスを使います。次のコードで、実行中のプラットフォームが WindowsPhone であるか、そうでない(Windows)なのかがわかります。

C# で書いていますが、C++, Visual Basic, JavaScript からも同じ API を利用できます。

[code]

        bool DetectIfRunningOnWindowsPhone()
        {
            var info = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
            return (info.OperatingSystem.Equals("WindowsPhone")) ? true : false;
        }
    
[/code]

<http://msdn.microsoft.com/ja-
jp/library/windows/apps/windows.security.exchangeactivesyncprovisioning.easclientdeviceinformation.aspx>
も併せてご覧ください。


CC BY-SA 3.0
2014-12-17T10:03:13.193
1910
2014-12-17T10:03:13.193
2099
1909
answer


簡易的な方法としては、EasClientDeviceInformationの他にも、次のような手段があります。

  * Appクラスが入っているアセンブリの名前をリフレクションで取ってくる (作った人には区別が付くはず!)

  * Windows.ApplicationModel.Store.CurrentApp.LinkUriプロパティ（＝アプリが掲載されているストアのWebページのURI）で判別する

＠IT:「[WinRT／Metro
TIPS：WindowsとPhoneでロジックを切り分けるには？［ユニバーサルWindowsアプリ開発］](http://www.atmarkit.co.jp/ait/articles/1405/22/news126.html)」


CC BY-SA 3.0
2014-12-18T07:48:42.270
2009
2014-12-18T07:48:42.270
3210
1909
answer


<http://msdn.microsoft.com/ja-
jp/library/windows/apps/dn609832.aspx#CrossPlatform>

WindowsとWindows Phoneそれぞれのプロジェクトにおいて、
条件付きコンパイルシンボルとして定義されている値を利用してみてはいかがでしょうか。

[code]

    public bool IsPhone = false;
    
    #if WINDOWS_PHONE_APP
            IsPhone = true;
    #endif
    
[/code]

APIも何も使わずなのでちょっとアレな感じもしますかね…


CC BY-SA 3.0
2014-12-19T05:31:40.837
2104
2014-12-19T11:04:49.243
2014-12-19T11:04:49.243
295
5194
1909
answer