/// <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.18private 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.19private 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.21private 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>