Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ КПК ΠΈ смартфонов Π½Π° .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 50

Автор АлСксандр Климов

  /// <param name="phkResult">[out] ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, получаСмая ΠΎΡ‚

  /// дСскриптора ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°. Если Π²Ρ‹ большС Π½Π΅ Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ΡΡŒ

  /// Π² дСскрипторС, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ RegCloseKey для Π΅Π³ΠΎ

  /// закрытия</param>

  /// <returns>ERROR_SUCCESS сообщаСт ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  /// Π’ случаС ошибки возвращаСтся Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

  /// </returns>

  [DllImport("coredll.dll", SetLastError = true)]

  public static extern int RegOpenKeyEx(

   UIntPtr hkey, String lpSubKey, uint ulOptions, KeyAccess samDesired,

   ref UIntPtr phkResult);


  /// <summary>

  /// Ѐункция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° рССстра

  /// </summary>

  /// <param name="hkey">[in] ДСскриптор ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Ρƒ

  /// ΠΈΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ рССстра: HKCR, HKCU, HKLM.</param>

  /// <param name="lpValueName">[in] Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

  /// </param>

  /// <param name="lpReserved">[in] Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

  /// УстановитС Π² NULL.</param>

  /// <param name="lpType">[out] Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

  /// </param>

  /// <param name="lpData">[out] Π‘ΡƒΡ„Π΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅.

  /// Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ NULL, Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ.

  /// </param>

  /// <param name="lpcbData">[in/out] Π Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° Π² Π±Π°ΠΉΡ‚Π°Ρ…

  /// </param>

  /// <returns>ERROR_SUCCESS сообщаСт ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  /// Π’ случаС ошибки возвращаСтся Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

  /// </returns>

  [DllImport("coredll.dll", SetLastError = true)]

  public static extern int RegQueryValueEx(

   UIntPtr hkey, String lpValueName, IntPtr lpReserved, ref KeyType lpType,

   byte[] lpData, ref uint lpcbData);


  /// <summary>

  /// Ѐункция создаСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ рССстра.

  /// </summary>

  [DllImport("coredll.dll", SetLastError = true)]

  public static extern int RegSetValueEx(

   UIntPtr hkey, String lpValueName, uint Reserved, KeyType dwType,

   byte[] lpData, uint cbData);


  [DllImport("coredll.dll", SetLastError = true)]

  public static extern int RegDeleteValue(UIntPtr hkey, string valueName);


  [DllImport("coredll.dll", SetLastError = true)]

  public static extern int RegCloseKey(UIntPtr hkey);

 }

}

НаличиС внСшнСй ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса Registry Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² рССстрС. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π»ΠΈ ΠΊ устройству внСшняя ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°. Π—Π° Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ HasKeyboard Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ HKEY_CURRENT_USER\Software\Microsoft\Shell. Если Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ внСшнСй ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π½Π΅Ρ‚. Π’ листингС 13.18 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

Листинг 13.18

private void butCheckKeyboard_Click(object sender, EventArgs e) {

 uint check = 0;

 Registry.GetDWORDValue(Registry.HKCU, "SOFTWARE\\Microsoft\\Shell",

  "HasKeyboard", ref check);

 lblInfo.Text = Convert.ToBoolean(check).ToString();

}

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° GetDWORDValue ΠΈΠ· класса Registry. Если ΠΆΠ΅ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ, Π° ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊ функциям API, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 13.19.

Листинг 13.19

private static bool IsKeyboard() {

 uint dwordResult;

 UIntPtr hkey = UIntPtr.Zero;

 try {

  int result =

   Registry.RegOpenKeyEx(Registry.HKCU, "SOFTWARE\\Microsoft\\Shell", 0,

   Registry.KeyAccess.None, ref hkey);

  if (Registry.ERROR_SUCCESS != result) return false;

  byte[] bytes = null;

  uint length = 0;

  Registry.KeyType keyType = Registry.KeyType.None;

  result =

   Registry.RegQueryValueEx(hkey, "HasKeyboard", IntPtr.Zero, ref keyType,

   null, ref length);

  if (Registry.ERROR_SUCCESS != result) return false;

  bytes = new byte[Marshal.SizeOf(typeof(uint))];

  length = (uint)bytes.Length;

  keyType = Registry.KeyType.None;

  result =

   Registry.RegQueryValueEx(hkey, "HasKeyboard", IntPtr.Zero, ref keyType,

   bytes, ref length);

  if (Registry.ERROR_SUCCESS != result) return false;

  dwordResult = BitConverter.ToUInt32(bytes, 0);

  return (dwordResult == 1);

 } finally {

  if (UIntPtr.Zero != hkey) {

   Registry.RegCloseKey(hkey);

  }

 }

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 13.20.

Листинг 13.20

// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ внСшнСй ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

lblInfo.Text = IsKeyboard().ToString();

Π’ΠΠ˜ΠœΠΠΠ˜Π•

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° эмуляторС функция ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ присутствиС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π§Ρ‚ΠΎ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, справСдливо, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° эмуляторС.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅

Π’Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рССстра ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ устройства. Π—Π° эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Owner Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ HKEY_CURRENT_USER\ControlPanel\Owner. Π’ листингС 13.21 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Листинг 13.21

private void butOwner_Click(object sender, EventArgs e) {

 string strOwner = "";

 Registry.GetStringValue(Registry.HKCU, "\\ControlPanel\\Owner", "Owner",

  ref strOwner);

 lblInfo.Text = strOwner;

}

НаличиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Π£Π·Π½Π°Ρ‚ΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π² систСмС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API ΠΈΠ»ΠΈ просмотрСв Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² рССстрС. ИспользованиС рССстра Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡΡŒ нСсколько Ρ€Π°Π½ΡŒΡˆΠ΅. Π’ листингС 13.22 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ присутствии ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API GetKeyboardStatus.

Листинг 13.22

/// <summary>

/// Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ статус ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π΅Π΅

/// возмоТности.

/// </summary>

/// <returns>Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску,

/// ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ присутствиС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π΅Π΅ возмоТности

/// </returns>

[DllImport("coredll.dll")]

public static extern uint GetKeyboardStatus();


/// <summary>

/// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ присутствиС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² систСмС

/// </summary>

public const uint KBDI_KEYBOARD_PRESENT = 0x0001;


/// <summary>

/// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

/// Π”Π°Π½Π½Ρ‹ΠΉ Π±ΠΈΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

/// EnableHardwareKeyboard

/// </summary>

public const uint KBDI_KEYBOARD_ENABLED = 0x0002;


/// <summary>

/// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ клавиш ENTER ΠΈ ESC

/// </summary>

public const uint KBDI_KEYBOARD_ENTER_ESC = 0x0004;


/// <summary>

/// ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ клавиш с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ ΠΈ Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ

/// </summary>

public const uint KBDI_KEYBOARD_ALPHA_NUM = 0x0008;


private void Form1_Load(object sender, EventArgs e) {

 MessageBox.Show("НаличиС ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹: " +

  IsKeyboard().ToString());

}


private static bool IsKeyboard() {

 uint flags = KBDI_KEYBOARD_ENABLED | KBDI_KEYBOARD_PRESENT;

 return ((GetKeyboardStatus() & flags) == flags);

}

Π’ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΎΠΊ

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, практичСски всС соврСмСнныС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² ΠΈ смартфонов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Для использования Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΊΠ° Π½Π° смартфонС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Vibrate, VibrateStop ΠΈ VibrateGetDeviceCaps.

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΊΠ° Π² своих прилоТСниях. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 13.23.

Листинг 13.23

/// <summary>

/// Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΎΠΊ

/// </summary>

/// <returns>S_OK сообщаСт ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ случаС

/// ошибки возвращаСтся E_FAIL

///</returns>

[DllImport("aygshell")]

private static extern int Vibrate(int cvn, IntPtr rgvn, uint fRepeat,

 uint dwTimeout);


/// <summary>

/// ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΎΠΊ

/// </summary>

/// <returns>S_OK сообщаСт ΠΎΠ± остановкС Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΊΠ°. Π’ случаС

/// ошибки возвращаСтся EFAIL

/// </returns>

[DllImport("aygshell")]

private static extern int VibrateStop();


/// <summary>

/// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ свСдСния ΠΎ возмоТности использования Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΊΠ°

/// </summary>

/// <param name="caps">ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ VIBRATEDEVICECAPS,

/// ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ возмоТности воспроизвСдСния Π²ΠΈΠ±Ρ€ΠΎΠ·Π²ΠΎΠ½ΠΊΠ°

/// устройством.

///</param>

[DllImport("aygshell")]

private static extern int VibrateGetDeviceCaps(VibrationCapabilities caps);


/// <summary>