Перейти к содержимому


Фотография
- - - - -

[C#] Использование "горячих клавиш"

C# c# Хоткеи C# getkeyState C# GetAsyncKeyState C# KeyLogger

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 iDReeM

iDReeM

    Капрал

  • Пользователи
  • PipPip
  • Репутация
    12
  • 16 сообщений
  • 2 тем

Отправлено 10 июля 2015 - 12:36

 Всем Ку! В Данной теме расскажу вам как использовать горячие клавиши на С#. 

Приступим к самой магии:

public class cKeyHook
{
    /// <summary>
    /// Return
    /// </summary>
    /// <returns></returns>
    protected short GetKeyState(int dwKEY)
    {
        return cHook.GetKeyState(dwKEY);
    }
    protected short GetAsyncKeyState(int dwKEY)
    {
        return cHook.GetAsyncKeyState(dwKEY);
    }
    /// <summary>
    /// public bind
    /// </summary>
    /// <returns></returns>
    public bool isKeyState(int dwKEY)
    {
        bool dwState = false;
        try
        {
            dwState = this.GetKeyState(dwKEY) != 0 ? true : false;
        }
        catch (Exception Except)
        {
            Console.WriteLine("{0}", Except.Message);
        }
        return dwState;
    }
    public bool isAsyncKeyState(int dwKEY)
    {
        bool dwState = false;
        try
        {
            dwState = this.GetAsyncKeyState(dwKEY) != 0 ? true : false;
        }
        catch (Exception Except)
        {
            Console.WriteLine("{0}", Except.Message);
        }
        return dwState;
    }
    ~cKeyHook() {}
}

 Не забываем о импортах: 

public class cHook
{
    [DllImport("user32.dll")]
    public static extern short GetKeyState(int vKey);
    [DllImport("user32.dll")]
    public static extern short GetAsyncKeyState(int vKey);
}

 Зависимости: 

using System;
using System.Runtime.InteropServices;

 Теперь перейдем к магии использования, в конструкторе калякаем указатель на наш класс: 

cKeyHook KeyPressHook; 

 Обременяем форму программы таймером, или создаем поток. (на свое усмотрение...). На таймер или в поток биндим клавиши, рассмотрим на примере кнопки E (на англ). 

int VK_E = 0x45;

 

if (KeyPressHook.isKeyState(VK_E))
{
    //Клавиша "E" Была НАЖАТА
}

 

if (KeyPressHook.isAsyncKeyState(VK_E))
{
    //Клавиша "Е" ЗАЖАТА
}

 Думаю принцип работы и использования понятен. Удачи   :)


СКАЧАТЬ
  • 10

#2 iDReeM

iDReeM

    Капрал

  • Пользователи
  • PipPip
  • Репутация
    12
  • 16 сообщений
  • 2 тем

Отправлено 13 июля 2015 - 01:28

Еще оффсеты клавиш, если кому нужно:

int VK_F1 = 0x70; /* F1 */
int VK_F2 = 0x71; /* F2 */
int VK_F3 = 0x72; /* F3 */
int VK_F4 = 0x73; /* F4 */
int VK_F5 = 0x74; /* F5 */
int VK_F6 = 0x75; /* F6 */
int VK_F7 = 0x76; /*  */
int VK_F8 = 0x77; /*  */
int VK_F9 = 0x78; /*  */
int VK_F10 = 0x79; /*  */
int VK_F11 = 0x80; /*  */
int VK_F12 = 0x81; /*  */
int VK_SPACE = 0x20; /* Пробел */
int VK_BACK = 0x8; /* BackSpace */
int VK_TAB = 0x9; /* TAB */
int VK_RETURN = 0x0D; /* Ентер */
int VK_SHIFT = 0x10; /*  */
int VK_CONTROL = 0x11; /*  */
int VK_MENU = 0x12; /* альт */
int VK_CAPITAL = 0x14; /* капс лок */
int VK_ESCAPE = 0x1B; /*  */
int VK_INSERT = 0x2D; /*  */
int VK_PRIOR = 0x21; /* PageUp */
int VK_NEXT = 0x22; /* PageDown */
int VK_END = 0x23; /*  */
int VK_HOME = 0x24; /*  */
int VK_LEFT = 0x25; /* стрелка влево */
int VK_UP = 0x26; /* стрелка вверх */
int VK_RIGHT = 0x27; /* стрелка вправо */
int VK_DOWN = 0x28; /* стрелка вниз */
int VK_DELETE = 0x2E; /* делете */
int VK_SNAPSHOT = 0x2C; /* Принт Скрин */
int VK_SCROLL = 0x91; /* ScrollLock */
int VK_A = 0x41; /*  */
int VK_B = 0x42; /*  */
int VK_C = 0x43; /*  */
int VK_D = 0x44; /*  */
int VK_E = 0x45; /*  */
int VK_F = 0x46; /*  */
int VK_G = 0x47; /*  */
int VK_H = 0x48; /*  */
int VK_I = 0x49; /*  */
int VK_J = 0x4A; /*  */
int VK_K = 0x4B; /*  */
int VK_L = 0x4C; /*  */
int VK_M = 0x4D; /*  */
int VK_N = 0x4E; /*  */
int VK_O = 0x4F; /*  */
int VK_Q = 0x50; /*  */
int VK_P = 0x51; /*  */
int VK_R = 0x52; /*  */
int VK_S = 0x53; /*  */
int VK_T = 0x54; /*  */
int VK_U = 0x55; /*  */
int VK_V = 0x56; /*  */
int VK_W = 0x57; /*  */
int VK_X = 0x58; /*  */
int VK_Y = 0x59; /*  */
int VK_Z = 0x5A; /*  */
int VK_LWIN = 0x5B; /* левая кнопка меню пуск */
int VK_RWIN = 0x5C; /* правая кнопка меню пуск */
int VK_NUMPAD0 = 0x60; /*  */
int VK_NUMPAD1 = 0x61; /*  */
int VK_NUMPAD2 = 0x62; /*  */
int VK_NUMPAD3 = 0x63; /*  */
int VK_NUMPAD4 = 0x64; /*  */
int VK_NUMPAD5 = 0x65; /*  */
int VK_NUMPAD6 = 0x66; /*  */
int VK_NUMPAD7 = 0x67; /*  */
int VK_NUMPAD8 = 0x68; /*  */
int VK_NUMPAD9 = 0x69; /*  */
int VK_MULTIPLY = 0x6A; /* ' * ' */
int VK_ADD = 0x6B; /* ' + ' */
int VK_SUBTRACT = 0x6C; /* ' - ' */
int VK_DECIMAL = 0x6D; /* ' . ' */
int VK_DIVIDE = 0x6E; /* ' / ' */

Сообщение отредактировал iDReeM: 13 июля 2015 - 01:30

  • 0




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Click to return to top of page in style!