?
Solved

using keyboard arrow keys

Posted on 2001-09-16
8
Medium Priority
?
1,568 Views
Last Modified: 2010-05-18
I never tried using the up,down,left and right arrow keys
before in a program and i didn't see them listed in the ascii table in my c++ book. What are their ascii values or if they need to handled differently how?
0
Comment
Question by:mitchguy
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 6

Expert Comment

by:JonFish85
ID: 6486539
here's what I got from MSDN:

Virtual-Key Codes
The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order.

Symbolic constant name Value (hexadecimal) Mouse or keyboard equivalent
VK_LBUTTON 01 Left mouse button  
VK_RBUTTON 02 Right mouse button  
VK_CANCEL 03 Control-break processing  
VK_MBUTTON 04 Middle mouse button (three-button mouse)  
?  05?07 Undefined  
VK_BACK 08 backspace key  
VK_TAB 09 tab key  
?  0A?0B Undefined  
VK_CLEAR 0C clear key  
VK_RETURN 0D enter key  
?  0E?0F Undefined  
VK_SHIFT 10 shift key  
VK_CONTROL 11 ctrl key  
VK_MENU 12 alt key  
VK_PAUSE 13 pause key  
VK_CAPITAL 14 caps lock key  
?  15?19 Reserved for Kanji systems  
?  1A Undefined  
VK_ESCAPE 1B esc key  
?  1C?1F Reserved for Kanji systems  
VK_SPACE 20 spacebar  
VK_PRIOR 21 page up key  
VK_NEXT 22 page down key  
VK_END 23 end key  
VK_HOME 24 home key  
VK_LEFT 25 left arrow key  
VK_UP 26 up arrow key  
VK_RIGHT 27 right arrow key  
VK_DOWN 28 down arrow key  
VK_SELECT 29 select key  
?  2A Original equipment manufacturer (OEM) specific  
VK_EXECUTE 2B execute key  
VK_SNAPSHOT 2C print screen key  
VK_INSERT 2D ins key  
VK_DELETE 2E del key  
VK_HELP 2F help key  
VK_0 30 0 key  
VK_1 31 1 key  
VK_2 32 2 key  
VK_3 33 3 key  
VK_4 34 4 key  
VK_5 35 5 key  
VK_6 36 6 key  
VK_7 37 7 key  
VK_8 38 8 key  
VK_9 39 9 key  
?  3A?40 Undefined  
VK_A 41 a key  
VK_B 42 b key  
VK_C 43 c key  
VK_D 44 d key  
VK_E 45 e key  
VK_F 46 f key  
VK_G 47 g key  
VK_H 48 h key  
VK_I 49 i key  
VK_J 4A j key  
VK_K 4B k key  
VK_L 4C l key  
VK_M 4D m key  
VK_N 4E n key  
VK_O 4F o key  
VK_P 50 p key  
VK_Q 51 q key  
VK_R 52 r key  
VK_S 53 s key  
VK_T 54 t key  
VK_U 55 u key  
VK_V 56 v key  
VK_W 57 w key  
VK_X 58 x key  
VK_Y 59 y key  
VK_Z 5A z key  
VK_LWIN 5B Left Windows key (Microsoft Natural Keyboard)  
VK_RWIN 5C Right Windows key (Microsoft Natural Keyboard)  
VK_APPS 5D Applications key (Microsoft Natural Keyboard)  
?  5E?5F Undefined  
VK_NUMPAD0 60 Numeric keypad 0 key  
VK_NUMPAD1 61 Numeric keypad 1 key  
VK_NUMPAD2 62 Numeric keypad 2 key  
VK_NUMPAD3 63 Numeric keypad 3 key  
VK_NUMPAD4 64 Numeric keypad 4 key  
VK_NUMPAD5 65 Numeric keypad 5 key  
VK_NUMPAD6 66 Numeric keypad 6 key  
VK_NUMPAD7 67 Numeric keypad 7 key  
VK_NUMPAD8 68 Numeric keypad 8 key  
VK_NUMPAD9 69 Numeric keypad 9 key  
VK_MULTIPLY 6A Multiply key  
VK_ADD 6B Add key  
VK_SEPARATOR 6C Separator key  
VK_SUBTRACT 6D Subtract key  
VK_DECIMAL 6E Decimal key  
VK_DIVIDE 6F Divide key  
VK_F1 70 f1 key  
VK_F2 71 f2 key  
VK_F3 72 f3 key  
VK_F4 73 f4 key  
VK_F5 74 f5 key  
VK_F6 75 f6 key  
VK_F7 76 f7 key  
VK_F8 77 f8 key  
VK_F9 78 f9 key  
VK_F10 79 f10 key  
VK_F11 7A f11 key  
VK_F12 7B f12 key  
VK_F13 7C f13 key  
VK_F14 7D f14 key  
VK_F15 7E f15 key  
VK_F16 7F f16 key  
VK_F17 80H f17 key  
VK_F18 81H f18 key  
VK_F19 82H f19 key  
VK_F20 83H f20 key  
VK_F21 84H f21 key  
VK_F22 85H f22 key  
VK_F23 86H f23 key  
VK_F24 87H f24 key  
?  88?8F Unassigned  
VK_NUMLOCK 90 num lock key  
VK_SCROLL 91 scroll lock key  
?  92?B9 Unassigned  
?  BA?C0 OEM specific  
?  C1?DA Unassigned  
?  DB?E4 OEM specific  
?  E5 Unassigned  
?  E6 OEM specific  
?  E7?E8 Unassigned  
?  E9?F5 OEM specific  
VK_ATTN F6 Attn key
VK_CRSEL F7 CrSel key
VK_EXSEL F8 ExSel key
VK_EREOF F9 Erase EOF key
VK_PLAY FA Play key
VK_ZOOM FB Zoom key
VK_NONAME FC Reserved for future use.  
VK_PA1 FD PA1 key
VK_OEM_CLEAR FE Clear key
</MSDN>
it appears as though Left arrow = 25, Up = 26, Right = 27, Down = 28

hope this helps!
0
 

Author Comment

by:mitchguy
ID: 6486620
I'm programming on a Linux machine are those codes just for
microsoft environments?
0
 
LVL 6

Expert Comment

by:JonFish85
ID: 6486625
I have no idea, but I would be inclined to believe that they are Windows specific... Can you try printing out the ascii value of the current key pressed? Other than that I have no idea...
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 30

Expert Comment

by:Axter
ID: 6486763
>>I'm programming on a Linux machine
I don't know if the input keys for a Linux machine is similar to the input keys for DOS, but you can try the DOS method to see if it works.
In DOS to input special keys, you way for a zero input char.  After that, the following key is the special key.
0
 
LVL 30

Accepted Solution

by:
Axter earned 200 total points
ID: 6486765
Example code:
#include <conio.h>
#include <string.h>

int main(int argc, char* argv[])
{
     int key;
     do
     {
          printf("Enter a special key or press ESC to quit.\n");
          do
          {
               key = getch();
          }while(key != 0 && key != 27);
          if (key != 27)
          {
               key = getch();
               char KeyPress[] = "Unknown";
               switch(key)
               {
               case 59:
                    strcpy(KeyPress,"F1");
                    break;
               case 60:
                    strcpy(KeyPress,"F2");
                    break;
               case 61:
                    strcpy(KeyPress,"F3");
                    break;
               case 62:
                    strcpy(KeyPress,"F4");
                    break;
               case 63:
                    strcpy(KeyPress,"F5");
                    break;
               case 64:
                    strcpy(KeyPress,"F6");
                    break;
               case 65:
                    strcpy(KeyPress,"F7");
                    break;
               }
               printf("\nYou pressed %s\n",KeyPress);
          }
     }while(key != 27);
               
     return 0;
}

0
 
LVL 4

Expert Comment

by:IainHere
ID: 6487068
What kind of Linux App are you developing?  If it's KDE, then that's based on Qt, which makes things easier for you.  See "Keyboard events" in this piece (plus plenty other Qt tutorials)
http://embedded.linuxjournal.com/magazine/issue03/4660/?sid=37e591e5395756e6adf6925d2e7b9c11

If you're developing for Gnome, they have a similar (but different, of course :-) system.  Here's a link to the relevent section of the Gnome docs:

http://developer.gnome.org/doc/GGAD/sec-gdkevent.html
(About 2/3 way down the page, "Keyboard Events").

I've heard something about GTK being nasty with keyboard events (ie not working properly), but I've never really used it, so wouldn't know.

Your best bet would probably be to find a program similar to the one you're writing, and finding out how they did it - that's a large part of the benefit of open source, after all.
0
 

Author Comment

by:mitchguy
ID: 6490633
I was getting an ascii value using getch() in a program on a windows 98 machine using visual studio. I think you've explained something that was happening i didn't understand about dos waiting for a 0 value first because every time i pressed the arrow key it cycled through the program twice
once giving a 0 value and then once the key press. Apparently the arrow keys have the same ascii value as four
capital letters already assigned on the key board.

0
 

Author Comment

by:mitchguy
ID: 6490658
lainHere,
thanks for the Linux info, I'll post some points for you.
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.
Suggested Courses

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question