Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

WinAPI Отжатие клавиши

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> WinAPI Отжатие клавиши
Имя
Сообщение << Старые топики   Новые топики >>
WinAPI Отжатие клавиши - 2010-06-01 18:38:41.733333   
oktonion

Сообщений: 14
Оценки: 0
Присоединился: 2010-05-28 22:10:57.796666
Как отследить отжатие клавиши?
Тоесть беру
if(GetKeyState(VK_RETURN)) &nbsp; { &nbsp;&nbsp; blablabla; &nbsp; } Но при этом такой иф будет выполняться пока не будет нажата другая клавиша, а хотелось бы чтобы он срабатывал только 1 раз за 1 нажатие клавиши.
Post #: 1
RE: WinAPI Отжатие клавиши - 2010-06-01 18:40:08.130000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Хуки вешай.

P.S. с чего ты взял, что
quote:

ORIGINAL: oktonion

Но при этом такой иф будет выполняться пока не будет нажата другая клавиша, а хотелось бы чтобы он срабатывал только 1 раз за 1 нажатие клавиши.
Post #: 2
RE: WinAPI Отжатие клавиши - 2010-06-01 18:42:35.300000   
oktonion

Сообщений: 14
Оценки: 0
Присоединился: 2010-05-28 22:10:57.796666
Хуки это безусловно хорошо, но я хотел бы пояснения описания самой функции GetKeyState8|
quote:

The return value specifies the status of the specified virtual key, as follows:
[ul]
  • If the high-order bit is 1, the key is down; otherwise, it is up.
  • If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.[/ul]

  • Post #: 3
    RE: WinAPI Отжатие клавиши - 2010-06-01 18:57:31.333333   
    messenage

    Сообщений: 21
    Оценки: 0
    Присоединился: 2010-03-03 21:23:49.290000
    quote:


    case WM_KEYDOWN:
    //Нажата ли комбинация &lt;Ctrl&gt;+S
    if(wParam =='S' &amp;&amp; (0x8000 &amp; GetKeyState(VK_CONTROL)))
    {
    //Ваши действия
    }
    return 0;

    функция GetKeyState не отражает состояния клавиши в реальном времени. она позволяет узнать состояния клавиатуры на момент, когда когда последние сообщение от клавиатуры было выбрано из очереди.
    GetKeyState обеспечивает возможность получения точной информации. даже если сообщение обрабатывается асинхронно уже после того , как состояния переключателя блы изменено.
    GetAnsyncKeyState() можно ее попробовать для получении информации о положении клавиши.
    Post #: 4
    RE: WinAPI Отжатие клавиши - 2010-06-01 19:03:05.896666   
    oktonion

    Сообщений: 14
    Оценки: 0
    Присоединился: 2010-05-28 22:10:57.796666
    quote:

    P.S. с чего ты взял, что

    Это я с кодом тупанул =\
    Мне надо сделать примерно так:
    while(1) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; if(Клавиша нажата но не отпущена) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; func1(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; if(Клавишу отпустили) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; func2(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; }
    quote:

    GetAnsyncKeyState() можно ее попробовать для получении информации о положении клавиши.

    Да пробовал, мне просто не очень понятно что возвращается у этих двух функций, тоесть как можно отследить именно тот момент когда клавиша отжата.
    quote:

    If the high-order bit is 1, the key is down; otherwise, it is up.

    Вот что это конкретно означает?
    Post #: 5
    RE: WinAPI Отжатие клавиши - 2010-06-01 19:34:58.853333   
    Lost_boy

    Сообщений: 327
    Оценки: 0
    Присоединился: 2009-03-25 11:07:27.910000
    GetAnsyncKeyState() возвращает:
    Если установлен стаpший байт, клавиша Key находится в нажатом положении, а если младший - то клавиша Key была нажата после пpедыдущего вызова функции.
    Почитай тут
    Post #: 6
    RE: WinAPI Отжатие клавиши - 2010-06-01 20:19:03.126666   
    oktonion

    Сообщений: 14
    Оценки: 0
    Присоединился: 2010-05-28 22:10:57.796666
    Вот что получилось, может кому пригодится
    while(!GetAsyncKeyState(VK_F1))//пока не нажата F1 { &nbsp; if(GetAsyncKeyState(VK_F2)&lt;0)//зажата клавиша F2 &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Key is down\n"); &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp; if(GetAsyncKeyState(VK_F2)==0)//отжата клавиша F2 &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Key is up\n"); &nbsp;&nbsp;&nbsp;&nbsp; } } Спасибо, ответ на свой вопрос получил.Только не очень ясно вот что, если отследить возвращаемое значение от GetAsyncKeyState при нажатой клавише то там не -32767 как у того парня в примере, а -32768.
    int val=1, past_val=1; while(!GetAsyncKeyState(VK_F1)) { &nbsp; val=GetAsyncKeyState(VK_F2); &nbsp; printf("%d\n", val); &nbsp; past_val=val; &nbsp; while(val==past_val) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp; val=GetAsyncKeyState(VK_F2); &nbsp;&nbsp;&nbsp;&nbsp; Sleep(1); &nbsp;&nbsp;&nbsp; } &nbsp; Sleep(1); } return 0; Ну а если не заморачиваться и просто отслеживать отрицательное значение, то все вроде как работает верно.
    Post #: 7
    RE: WinAPI Отжатие клавиши - 2010-06-01 23:31:54.906666   
    Lost_boy

    Сообщений: 327
    Оценки: 0
    Присоединился: 2009-03-25 11:07:27.910000
    quote:

    ORIGINAL: oktonion
    Только не очень ясно вот что, если отследить возвращаемое значение от GetAsyncKeyState при нажатой клавише то там не -32767 как у того парня в примере, а -32768.

    Там есть ответ на этот вопрос. 0x8000 в десятичной сс = -32768, а 0x8001  в десятичной сс = -32767.
    Post #: 8
    RE: WinAPI Отжатие клавиши - 2010-06-02 01:10:45.450000   
    oktonion

    Сообщений: 14
    Оценки: 0
    Присоединился: 2010-05-28 22:10:57.796666
    quote:

    Там есть ответ на этот вопрос. 0x8000 в десятичной сс = -32768, а 0x8001 в десятичной сс = -32767.
    quote:

    ORIGINAL: Lost_boy

    Там есть ответ на этот вопрос. 0x8000 в десятичной сс = -32768, а 0x8001&nbsp; в десятичной сс = -32767.


    Да, спасибо, не дочитал просто.;)
    Post #: 9
    Страниц:  [1]
    Все форумы >> [Компилируемые языки] >> WinAPI Отжатие клавиши







    Связаться:
    Вопросы по сайту / xakep@glc.ru

    Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.