• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 395
  • Last Modified:

how can i capture esc key press ?

i tried to use getche() but there is a problem with it.


cout<<"please enter the key :";
cout<<endl;
choice = getche();


if we are not using endl the cout will not appear until we press akey.
so is there another way to write it?
0
eddyhalim
Asked:
eddyhalim
  • 7
  • 6
  • 3
1 Solution
 
hongjunCommented:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int ReadKey(HANDLE hInput);
int HandleKey(KEY_EVENT_RECORD Key);

void main()
{
      HANDLE hInput;

      hInput = GetStdHandle(STD_INPUT_HANDLE);

      if ( ReadKey(hInput) == 27 )
            printf("Esc key pressed\n");
      else
            printf("Esc key not pressed\n");
}


int ReadKey(HANDLE hInput)
{
      DWORD Result;
      INPUT_RECORD Buffer;
      int KeyCode;

      flushall();
      do
      {
            ReadConsoleInput(hInput, &Buffer, 1, &Result);
            if ( Buffer.EventType == KEY_EVENT)
                  KeyCode = HandleKey(Buffer.Event.KeyEvent);
      } while ( Buffer.EventType != KEY_EVENT );

      return KeyCode;
}

int HandleKey(KEY_EVENT_RECORD Key)
{
      return Key.wVirtualKeyCode;
}

Hope it helps
hongjun
0
 
wytzeCommented:
cout <<"Press a key"<<flush;
                        choise=getch();
if (choise == 0x00){
      // function key
      choise = getch();
}else if (choise == 27) {
      // escape;
      cout << "ESC";
}else {
      cout << choise;
      // do some thing with choise
}
0
 
hongjunCommented:
One problem using getch() is that it cannot accept key like CAPS lock. ReadConsoleInput function can! But remember to include <windows.h>

hongjun
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
wytzeCommented:
Ok, but is he using windows?
0
 
hongjunCommented:
I am just trying to help. This is definitely a better one since it can read in any key even if the key input is a system key.

hongjun
0
 
eddyhalimAuthor Commented:
thanks for all your help,I'll try it first.

Hong jun,
you are singaporean, i have some question to ask due to University  for Computer Science in your country. Which one is the best university in Computerscience.?
0
 
hongjunCommented:
Are you a Singaporean or a foreign? Basically there are currently 2 Universities in Singapore - National University of Singapore(NUS) and Nanyang Technological University(NTU). I feel that NUS is better in your field you want.

By the way, ReadConsoleInput function can be used even if you are not creating a Win32 window.

hongjun
0
 
eddyhalimAuthor Commented:
wytze thanks a lot for your help but using flush it's not work. it's also almost same as endline.
, i finally found it the way change the cout by using the printf ot cputs.
0
 
eddyhalimAuthor Commented:
hongjun, i am foreign not singaporean.
by the way what are u studying now?.
0
 
wytzeCommented:
if you want no buffering in your output, you could try the follwing:

cout.setf(ios::unitbuf);

cout << "Hello" << " this" << " an";

the output is now flushed per unit. In this case three times.

The advantage above printf en cputs is that u remain in pure C++, some regard this as a disadvantage but that is matter of taate.
0
 
hongjunCommented:
I am studying in Singapore Polytechnic studying Computer Information Systems. I am studying programming like C++, VB 6.0, Windows Programming, Networking and security to list a few.

University is better than a Polytechnic and so if you can enrol yourself in a University then go for it. You will definitely learn more than me.

hongjun
0
 
eddyhalimAuthor Commented:
i'm now studying in collage in malaysia. taking a degree in Computer science too.I'm learning programming such as VC++6(new),VB6,delphi, assembly.and also i still learning some graphic design such as 3dmax, and photoshop(i learn by myself)
0
 
hongjunCommented:
Me too! I also learn Photoshop by myself. My course do not teach Photoshop and so have to learn by myself.

hongjun
0
 
eddyhalimAuthor Commented:
thanks anyway for your info.
0
 
eddyhalimAuthor Commented:
thx to wytze
0
 
eddyhalimAuthor Commented:
thx for your help wytze
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

  • 7
  • 6
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now