Определение платформы в .NET CF на мобильном устройстве C#
Понадобилось мне определять автоматически какая версия Win CE установлена на устройстве, я конечно был удивлен в конце результатом, но об этом позже. Сначала опишу метод получения информации о платформе… Получать информацию будем при помощи API функции SystemParametersInfo, ничего особенного все как обычно, сразу перехожу к примеру.
Привожу листинг программы целиком:
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace MobileVerOS
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("coredll.dll")]
private static extern bool SystemParametersInfo(
int uiAction,
int uiParam,
StringBuilder pvParam,
int fWinIni);
private static int 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":
// PInvoke возвращает "SmartPhone" с заглавной P
// однако правильно "Smartphone" с маленькой p.
plat = Platform.Smartphone;
break;
}
return plat;
}
private void menuItem1_Click(object sender, EventArgs e)
{
this.Dispose();
Application.Exit();
}
private void menuItem2_Click(object sender, EventArgs e)
{
try
{
label1.Text = "Платформа: " + GetPlatform();
}
catch (Exception ex)
{
label1.Text = ex.Message.ToString();
}
}
}
public enum Platform
{
PocketPC, WindowsCE, Smartphone, Win32NT, Win32S, Win32Windows, Unknown
}
}
А теперь самое интересное, компилирую и запускаю на своем HTC HD2!!!
И вижу это:
Вот так! Не признает в HTC HD2 программулина смартфона!!! :)
Скачать пример:
Скачать файл: mobileveros.rar [39.81 Kb] (cкачиваний: 2)