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».
Пароли
Как вы, вероятно, знаете, пользователь может установить пароль на свой карманный компьютер. Для этого ему нужно зайти в раздел Password
при помощи последовательности команд Start►Settings►Password
и указать четырехсимвольный пароль. С помощью четырех функций API можно получить сведения о пароле и даже попытаться угадать его!
Для тестирования этой возможности на форме надо разместить четыре кнопки и текстовое поле. Соответствующий код приведен в листинге 13.2.
// Функция для установления нового системного пароля
[DllImport('coredll.dll')]
private static extern bool SetPassword(string lpszOldpassword,
string lspzNewPassword);
// Функция для активации или блокировки текущего пароля
[DllImport('coredll.dll')]
private static extern bool SetPasswordActive(bool bActive,
string lpszPassword);
// Функция для определения текущего состояния пароля
[DllImport('coredll.dll')]
private static extern bool GetPasswordActive();
// Функция для проверки пароля [DllImport('coredll.dll')]
private static extern bool CheckPassword(string lpszPassword);
private void butCheckPass_Click(object sender, EventArgs e) {
txtInfo.Text ='Активность пароля: ' + GetPasswordActive().ToString();
}
private void butNewPass_Click(object sender, EventArgs e) {