Gewusst wie: Abrufen der Geräteplattform
Aktualisiert: November 2007
In .NET Compact Framework Version 3.5 und neueren Versionen können Sie mithilfe der WinCEPlatform-Enumeration feststellen, auf welcher Geräteplattform bzw. auf welchem Pocket PC oder Smartphone die Anwendung derzeit ausgeführt wird.
In .NET Compact Framework 2.0 oder einer früheren Version können Sie die Geräteplattform mithilfe eines Plattformaufrufs von systemeigenem Code zurückgeben. Mit den folgenden Schritten wird eine Klasse und eine Enumeration von Plattformen definiert, mit deren Hilfe Sie die Geräteplattform ermitteln können.
So rufen Sie in .NET Compact Framework 2.0 oder früher die Geräteplattform ab
Fügen Sie dem Projekt die folgende Klasse und Enumeration hinzu.
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 }
Fügen Sie die folgende Deklaration und den folgenden Code für das Load-Ereignis des Formulars hinzu.
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()); } }
Kompilieren des Codes
Für dieses Beispiel sind Verweise auf die folgenden Namespaces erforderlich:
Siehe auch
Aufgaben
Gewusst wie: Abrufen von ID und Name des Geräts
Konzepte
Gewusst-wie-Themen für .NET Compact Framework