// Функция для определения текущего состояния пароля

[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) {

 MessageBox.Show("Установка нового пароля " +

 SetPassword("Активность пароля: False", txtInfо.Text).ToString());

}

private void butSetState_Click(object sender, EventArgs e) {

 MessageBox.Show("Отключение пароля: " +

 SetPasswordActive(false, txtInfo.Text).ToString());

}

private void butFindPass_Click(object sender, EventArgs e) {

 MessageBox.Show("Угадали пароль? " + CheckPassword(txtInfo.Text).ToString());

}

ВНИМАНИЕ

Будьте осторожны с данными функциями на реальном устройстве. Если вы случайно установите новый пароль, не запомнив его, то вам придется применить жесткую перезагрузку с потерей всех данных!

<p>Перезагрузка КПК</p>

Для карманных компьютеров может применяться как жесткая, так и мягкая перезагрузка. Жесткая перезагрузка возвращает устройство в первоначальное состояние, удаляя все установленные программы. Делать жесткую перезагрузку без особой необходимости не следует. Мягкая перезагрузка является более безопасной операцией, которую часто выполняют при появлении различных сбоев в работе программ.

Если разработчику необходимо программно перезагрузить устройство, то необходимо воспользоваться функцией KernelIoControl. В листинге 13.3 приведен небольшой пример, демонстрирующий мягкую перезагрузку.

Листинг 13.3

public const uint FILE_DEVICE_HAL = 0x00000101;

public const uint METHOD_BUFFERED = 0;

public const uint FILE_ANY_ACCESS = 0;

public uint CTL_CODE(uint DeviceType, uint Function,

 uint Method, uint Access) {

 return

  ((DeviceType << 16) | (Access << 14) | (Function << 2) | Method);

}

[DllImport("Coredll.dll")]

public extern static uint KernelIoControl(

 uint dwIoControlCode, IntPtr lpInBuf, uint nInBufSize, IntPtr lpOutBuf,

 uint nOutBufSize, ref uint lpBytesReturned);

private void butReset_Click(object sender, EventArgs e) {

 uint bytesReturned = 0;

 uint IOCTL_HAL_REBOOT =

  CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE ANY ACCESS);

 KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, IntPtr.Zero,

  0, ref bytesReturned);

}

<p>Еще раз о перезагрузке</p>

Для устройств, работающих под управлением Windows Mobile 5.0, существует более удобный способ перезагрузки. Он очень похож на код перезагрузки настольных компьютеров с использованием функции ExitWindowsEx. При этом надо обратить внимание на различия карманных компьютеров и смартфонов. Если КПК можно только перезагрузить, то смартфон можно и перезагрузить, и выключить. Соответствующий код приведен в листинге 13.4.

Листинг 13.4

[DllImport("aygshell.dll")]

public static extern System.Boolean ExitWindowsEx(int uFlags,

 int dwReserved);

const int EWX_REBOOT = 2; // перезагрузка

Перейти на страницу:

Похожие книги