13.06.2012, 10:04. Просмотров 791. Ответов 5
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| Statuses.Forward =((GetAsyncKeyState(Keys.Forward )&0x8000)==0x8000);
Statuses.Back =((GetAsyncKeyState(Keys.Back )&0x8000)==0x8000);
Statuses.RightTurn=((GetAsyncKeyState(Keys.RightTurn)&0x8000)==0x8000);
Statuses.LeftTurn =((GetAsyncKeyState(Keys.LeftTurn )&0x8000)==0x8000);
Statuses.RightStep=((GetAsyncKeyState(Keys.RightStep)&0x8000)==0x8000);
Statuses.LeftStep =((GetAsyncKeyState(Keys.LeftStep )&0x8000)==0x8000);
Statuses.Quick =((GetAsyncKeyState(Keys.Quick )&0x8000)==0x8000);
Statuses.Slow =((GetAsyncKeyState(Keys.Slow )&0x8000)==0x8000);
if ((!Statuses.Quick)&&(!Statuses.Slow))
{
Speed=1.0;
}
if ((Statuses.Quick)&&(!Statuses.Slow))
{
Speed=2.0;
}
if ((!Statuses.Quick)&&(Statuses.Slow))
{
Speed=0.5;
}
if ((Statuses.Quick)&&(Statuses.Slow))
{
Speed=1.5;
}
if ((GetAsyncKeyState(Keys.Exit)&0x8000)==0x8000)
{
Statuses.ExitQuery=true;
}
if (Statuses.ExitQuery)
{
if ((GetAsyncKeyState(Keys.Yes)&0x8000)==0x8000)
{
Statuses.Exit=true;
}
if ((GetAsyncKeyState(Keys.No)&0x8000)==0x8000)
{
Statuses.ExitQuery=false;
}
} |
|
В принципе, работает, отличает левый shift от правого, но при выключенном NumLock принимает цифры цифрового блока за кнопки управления кареткой. А мне надо во-первых различать при любом состоянии NumLock, а во-вторых цифры должны распознаваться одинаково не зависимо от состояния NumLock. Как это исправить? Левые shift, ctrl и alt надо отличать от правых. Цифры и точка в цифровом блоке должны опознаваться как таковые, не зависимо от состояния NumLock и ни когда не приниматься за кнопки управления кареткой и inset, home, page up, delete, end, page down. Как это сделать? И где брать коды клавиш? В тех, что есть я не нашёл даже кнопку с точкой и знаком > (на которой русская "Ю").