酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Mobile(.NET Compact Framework)でデバイス プラットフォームの種別を取得する(~.NET CF 2.0)

PocketPC ( Proffesional/Clasicc Edition ) と Smartphone ( Standard Edition ) では一部のコントロールの対応可否に違いがあったり、デバイスのプラットフォームによって処理を分けたい場合などあります。

今回は、デバイスプラットフォームの種別を取得します。.NET Compact Framework 3.5 以降をお使いの方は、より簡単にデバイスプラットフォームの種別を取得する方法がありますので、「デバイス プラットフォームを取得する(3.5~)」をご覧下さい。

以下にサンプルコードを示します。

デバイス プラットフォームの種別を取得する

VB.NET

    ' システム全体に関するパラメータのいずれかを取得または設定します。
    <DllImport("Kernel32.dll")> _
    Private Shared Function SystemParametersInfo( _
        ByVal uiAction As System.UInt32, _
        ByVal uiParam As System.UInt32, _
        ByVal pvParam As System.Text.StringBuilder, _
        ByVal fWinIni As System.UInt32) As Integer
    End Function

    ' SystemParametersInfo 関数の引数に設定する
    Private Shared SPI_GETPLATFORMTYPE As System.UInt32 = 257
    
    ' デバイス プラットフォームの種別を取得する
    Shared Function GetWinCEPlatformName() As String

        ' プラットフォームIDがWinCEでなければ空文字列を返す
        If (System.Environment.OSVersion.Platform <> _
            PlatformID.WinCE) Then
    
            Return String.Empty
        End If
    
        ' SystemParametersInfo 関数から プラットフォーム種別を取得
        Dim sb As New System.Text.StringBuilder(200)
        SystemParametersInfo(SPI_GETPLATFORMTYPE, 200, sb, 0)
    
        Return sb.ToString()
    End Function
    
    ' ボタンを押下したらテキストボックスにプラットフォームの種別が表示されます。
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs)

        ' デバイスのプラットフォームを取得する
        Dim winCEPlatformName As String = GetWinCEPlatformName()

        ' Proffesional/Clasicc Edition の場合、"PocketPC"
        ' Standard Edition の場合、"SmartPhone"が返って来る
        TextBox1.Text = winCEPlatformName
        
    End Sub    

C#

    // システム全体に関するパラメータのいずれかを取得または設定します。
    [DllImport("Kernel32.dll")]
    private static extern int SystemParametersInfo(
        System.UInt32 uiAction, 
       System.UInt32 uiParam, 
       System.Text.StringBuilder pvParam, 
       System.UInt32 fWinIni);
    
    // SystemParametersInfo 関数の引数に設定する
    private static System.UInt32 SPI_GETPLATFORMTYPE = 257;

    // デバイス プラットフォームの種別を取得する
    private string GetWinCEPlatformName()
    {
        // プラットフォームIDがWinCEでなければ空文字列を返す
        if ((System.Environment.OSVersion.Platform != 
                 System.PlatformID.WinCE)) {
            
            return string.Empty;
        }
        
        // SystemParametersInfo 関数から プラットフォーム種別を取得
        System.Text.StringBuilder sb = new System.Text.StringBuilder(200);
        SystemParametersInfo(SPI_GETPLATFORMTYPE, 200, sb, 0);
        
        return sb.ToString();
    }
    
    // ボタンを押下したらテキストボックスにプラットフォームの種別が表示されます。
    private void Button1_Click(System.Object sender, System.EventArgs e)
    {
        // デバイスのプラットフォームを取得する
        string winCEPlatformName = GetWinCEPlatformName();
        
        // Proffesional/Clasicc Edition の場合、"PocketPC"
        // Standard Edition の場合、"SmartPhone"が返って来る
        TextBox1.Text = winCEPlatformName;
    }

実行結果

上記のコードを実行すると、実行環境のプラットフォームの種別を表示出来る事が確認出来ました(Windows Mobile 6 Professionalのエミュレータで実行した結果)。

f:id:ch3cooh393:20140922032130p:plain

GetWinCEPlatformNameメソッドで取得可能な文字列とそれぞれに対応したWindows Mobileのエディションは以下の通りとなります。

  • 取得した文字列
    • Windows Mobileのエディション
  • PocketPC
    • Profesional Edition
  • PocketPC
    • Clasicc Edition
  • Smartphone
    • Standard Edition