Solved

how can i capture esc key press ?

Posted on 2000-03-08
16
354 Views
Last Modified: 2012-06-27
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
Comment
Question by:eddyhalim
  • 7
  • 6
  • 3
16 Comments
 
LVL 33

Accepted Solution

by:
hongjun earned 20 total points
Comment Utility
#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
 

Expert Comment

by:wytze
Comment Utility
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
 
LVL 33

Expert Comment

by:hongjun
Comment Utility
One problem using getch() is that it cannot accept key like CAPS lock. ReadConsoleInput function can! But remember to include <windows.h>

hongjun
0
 

Expert Comment

by:wytze
Comment Utility
Ok, but is he using windows?
0
 
LVL 33

Expert Comment

by:hongjun
Comment Utility
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
 

Author Comment

by:eddyhalim
Comment Utility
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
 
LVL 33

Expert Comment

by:hongjun
Comment Utility
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
 

Author Comment

by:eddyhalim
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:eddyhalim
Comment Utility
hongjun, i am foreign not singaporean.
by the way what are u studying now?.
0
 

Expert Comment

by:wytze
Comment Utility
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
 
LVL 33

Expert Comment

by:hongjun
Comment Utility
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
 

Author Comment

by:eddyhalim
Comment Utility
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
 
LVL 33

Expert Comment

by:hongjun
Comment Utility
Me too! I also learn Photoshop by myself. My course do not teach Photoshop and so have to learn by myself.

hongjun
0
 

Author Comment

by:eddyhalim
Comment Utility
thanks anyway for your info.
0
 

Author Comment

by:eddyhalim
Comment Utility
thx to wytze
0
 

Author Comment

by:eddyhalim
Comment Utility
thx for your help wytze
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

772 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now