WinAPI Отжатие клавиши
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
WinAPI Отжатие клавиши - 2010-06-01 18:38:41.733333
|
|
|
oktonion
Сообщений: 14
Оценки: 0
Присоединился: 2010-05-28 22:10:57.796666
|
Как отследить отжатие клавиши? Тоесть беру
if(GetKeyState(VK_RETURN))
{
blablabla;
}
Но при этом такой иф будет выполняться пока не будет нажата другая клавиша, а хотелось бы чтобы он срабатывал только 1 раз за 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 нажатие клавиши.
|
|
|
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]
|
|
|
RE: WinAPI Отжатие клавиши - 2010-06-01 18:57:31.333333
|
|
|
messenage
Сообщений: 21
Оценки: 0
Присоединился: 2010-03-03 21:23:49.290000
|
quote:
case WM_KEYDOWN: //Нажата ли комбинация <Ctrl>+S if(wParam =='S' && (0x8000 & GetKeyState(VK_CONTROL))) { //Ваши действия } return 0; функция GetKeyState не отражает состояния клавиши в реальном времени. она позволяет узнать состояния клавиатуры на момент, когда когда последние сообщение от клавиатуры было выбрано из очереди. GetKeyState обеспечивает возможность получения точной информации. даже если сообщение обрабатывается асинхронно уже после того , как состояния переключателя блы изменено. GetAnsyncKeyState() можно ее попробовать для получении информации о положении клавиши.
|
|
|
RE: WinAPI Отжатие клавиши - 2010-06-01 19:03:05.896666
|
|
|
oktonion
Сообщений: 14
Оценки: 0
Присоединился: 2010-05-28 22:10:57.796666
|
quote:
P.S. с чего ты взял, что Это я с кодом тупанул =\ Мне надо сделать примерно так:
while(1)
{
if(Клавиша нажата но не отпущена)
{
func1();
}
if(Клавишу отпустили)
{
func2();
}
}
quote:
GetAnsyncKeyState() можно ее попробовать для получении информации о положении клавиши. Да пробовал, мне просто не очень понятно что возвращается у этих двух функций, тоесть как можно отследить именно тот момент когда клавиша отжата. quote:
If the high-order bit is 1, the key is down; otherwise, it is up. Вот что это конкретно означает?
|
|
|
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едыдущего вызова функции. Почитай тут
|
|
|
RE: WinAPI Отжатие клавиши - 2010-06-01 20:19:03.126666
|
|
|
oktonion
Сообщений: 14
Оценки: 0
Присоединился: 2010-05-28 22:10:57.796666
|
Вот что получилось, может кому пригодится
while(!GetAsyncKeyState(VK_F1))//пока не нажата F1
{
if(GetAsyncKeyState(VK_F2)<0)//зажата клавиша F2
{
printf("Key is down\n");
}
if(GetAsyncKeyState(VK_F2)==0)//отжата клавиша F2
{
printf("Key is up\n");
}
}
Спасибо, ответ на свой вопрос получил.Только не очень ясно вот что, если отследить возвращаемое значение от GetAsyncKeyState при нажатой клавише то там не -32767 как у того парня в примере, а -32768.
int val=1, past_val=1;
while(!GetAsyncKeyState(VK_F1))
{
val=GetAsyncKeyState(VK_F2);
printf("%d\n", val);
past_val=val;
while(val==past_val)
{
val=GetAsyncKeyState(VK_F2);
Sleep(1);
}
Sleep(1);
}
return 0;
Ну а если не заморачиваться и просто отслеживать отрицательное значение, то все вроде как работает верно.
|
|
|
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.
|
|
|
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 в десятичной сс = -32767. Да, спасибо, не дочитал просто.;)
|
|
|
|
|