方法 : デバイス プラットフォームを取得する

更新 : 2007 年 11 月

.NET Compact Framework version 3.5 およびそれ以降のバージョンでは、WinCEPlatform 列挙体を使用して、現在アプリケーションを実行しているデバイス プラットフォーム (Pocket PC または Smartphone) を確認できます。

.NET Compact Framework 2.0 またはそれ以前のバージョンでは、ネイティブ コードに対するプラットフォーム呼び出しを使用して、デバイス プラットフォームを取得できます。デバイス プラットフォームの確認に使用するクラスとプラットフォームの列挙体を定義する手順を次に示します。

.NET Compact Framework 2.0 およびそれ以前のバージョンでデバイス プラットフォームを取得するには

  1. 次のクラスおよび列挙体をプロジェクトに追加します。

    Public Class PlatformDetector
    
        Declare Function SystemParametersInfo Lib "Coredll.dll" _
            (ByVal uiAction As System.UInt32, _
            ByVal uiParam As System.UInt32, _
            ByVal pvParam As StringBuilder, _
            ByVal fWinIni As System.UInt32) As Boolean
    
    
        Private Shared SPI_GETPLATFORMTYPE As System.UInt32 = 257 
    
    
        Public Shared Function GetPlatform() As Platform 
            Dim plat As Platform = Platform.Unknown
            Select Case System.Environment.OSVersion.Platform
                Case PlatformID.Win32NT
                    plat = Platform.Win32NT
                Case PlatformID.Win32S
                    plat = Platform.Win32S
                Case PlatformID.Win32Windows
                    plat = Platform.Win32Windows
                Case PlatformID.WinCE
                    plat = CheckWinCEPlatform()
            End Select
    
            Return plat
    
        End Function 
    
    
        Shared Function CheckWinCEPlatform() As Platform 
            Dim plat As Platform = Platform.WindowsCE
            Dim strbuild As New StringBuilder(200)
            SystemParametersInfo(SPI_GETPLATFORMTYPE, 200, strbuild, 0)
            Dim str As String = strbuild.ToString()
            Select Case str
                Case "PocketPC"
                    plat = Platform.PocketPC
                Case "SmartPhone"
                ' Note that the strbuild parameter from the
                ' PInvoke returns "SmartPhone" with an
                ' upper case P. The correct casing is
                ' "Smartphone" with a lower case p.
                plat = Platform.Smartphone
            End Select
            Return plat
    
        End Function 
    End Class 
    
    
    Public Enum Platform
        PocketPC
        WindowsCE
        Smartphone
        Win32NT
        Win32S
        Win32Windows
        Unknown
    End Enum
    
    public class PlatformDetector
    {
        [DllImport("coredll.dll")]
        private static extern bool SystemParametersInfo(uint uiAction, uint uiParam, StringBuilder pvParam, uint fWinIni);
    
        private static uint SPI_GETPLATFORMTYPE = 257;
    
        public static Platform GetPlatform()
        {
            Platform plat = Platform.Unknown;
            switch (System.Environment.OSVersion.Platform)
            {
                case PlatformID.Win32NT:
                    plat = Platform.Win32NT;
                    break;
                case PlatformID.Win32S:
                    plat = Platform.Win32S;
                    break;
                case PlatformID.Win32Windows:
                    plat = Platform.Win32Windows;
                    break;
                case PlatformID.WinCE:
                    plat = CheckWinCEPlatform();
                    break;
            }
    
            return plat;
        }
    
        static Platform CheckWinCEPlatform()
        {
            Platform plat = Platform.WindowsCE;
            StringBuilder strbuild = new StringBuilder(200);
            SystemParametersInfo(SPI_GETPLATFORMTYPE, 200, strbuild, 0);
            string str = strbuild.ToString();
            switch (str)
            {
                case "PocketPC":
                    plat = Platform.PocketPC;
                    break;
                case "SmartPhone":
                    // Note that the strbuild parameter from the
                    // PInvoke returns "SmartPhone" with an
                    // upper case P. The correct casing is
                    // "Smartphone" with a lower case p.
                    plat = Platform.Smartphone;
                    break;
            }
            return plat;
        }
    }
    
    public enum Platform
    {
        PocketPC, WindowsCE, Smartphone, Win32NT, Win32S, Win32Windows, Unknown
    }
    
  2. 次の宣言と、フォームの Load イベントのコードを追加します。

    Declare Function KernelIoControl Lib "CoreDll.dll" _
        (ByVal dwIoControlCode As Int32, _
         ByVal lpInBuf As IntPtr, _
         ByVal nInBufSize As Int32, _
         ByVal lpOutBuf() As Byte, _
         ByVal nOutBufSize As Int32, _
         ByRef lpBytesReturned As Int32) As Boolean
    
    Private Sub DeviceType_Load(ByVal sender As Object, ByVal e As System.EventArgs)  _
        Handles MyBase.Load
    
           Try
                MessageBox.Show("Platform is " + PlatformDetector.GetPlatform().ToString())
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString())
            End Try
    
    End Sub
    
    [DllImport("coredll.dll", SetLastError = true)]
    private static extern bool KernelIoControl(Int32 dwIoControlCode,
        IntPtr lpInBuf, Int32 nInBufSize, byte[] lpOutBuf,
        Int32 nOutBufSize, ref Int32 lpBytesReturned);
    
    private void DeviceType_Load(object sender, System.EventArgs e)
    {
        try
        {
    
            MessageBox.Show("Platform is " + PlatformDetector.GetPlatform());
        }
    
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
    

コードのコンパイル方法

この例では、次の名前空間への参照が必要です。

参照

処理手順

方法 : デバイスの ID および名前を取得する

概念

.NET Compact Framework に関する「方法」トピック

その他の技術情報

.NET Compact Framework の相互運用性