Определение платформы

Определение платформы

Если нужно определить, на какой платформе запущено ваше приложение, то здесь вам не обойтись без вызова функции Windows API SystemParametersInfo.

Для начала нужно создать новый класс PlatformDetector, в котором следует объявить функцию SystemParametersInfo и методы определения платформы. А в обработчике события Load основной формы надо вызвать метод GetPlatform, чтобы узнать платформу сразу же после загрузки приложения, как это показано в листинге 13.1.

Листинг 13.1

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

namespace PlatformDetector_CS {

 class PlatformDetector {

  [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.WinCE:

    plat = CheckWinCEPlatform();

    break;

   }

   return plat;

  }

  static Platform CheckWinCEPlatform() {

   Platform plat = Platform.WindowsCE;

   StringBuilder strbuild = new StringBuilder(200);

   SystemParametersInfо(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, Unknown

 }

}

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace PlatformDetector_CS {

 public partial class Form1 : Form {

  public Form1() {

   InitializeComponent();

  }

  private void Form1_Load(object sender, EventArgs e) {

   try {

    MessageBox.Show("Платформа: " + PlatformDetector.GetPlatform());

   } catch (Exception ex) {

    MessageBox.Show(ex.Message.ToString());

   }

  }

 }

}

Особое внимание следует обратить на комментарий. Параметр strbuild после вызова функции возвращает значение SmartPhone с большой буквой «P», хотя более правильным вариантом считается слово с маленькой буквой «p».