Winapi (reakcja na ESC)

0

Piszę w czystym winapi, właściwie to już skończyłem program. Problem jaki mam to jak reagować na przycisk ESC od strzała, czyli od razu niezależnie od tego co tam w kolejce komunikatow jest i czy program coć aktualnie przetwarza na jakimś poziomie czy nie. Dzięki temu z programu w dowolnej chwili mozna by wyjść ... można bo mam jeszcze drugi problem, że jak juz w końcu po paru sekundach program zareaguje na ESC to nie przerywa i nie zamyka aplikacji. Kod:

switch(message)
   {
      case WM_CLOSE: DestroyWindow(hWnd); break;
      case WM_DESTROY:
		  DeleteObject(hFont);DeleteObject(hFont2);DeleteObject(hFont3); //i rózne inne Destroye....
//Przywrócenie oryginalnej rozdzielczości systemu
		 ZeroMemory(&devmode,sizeof(DEVMODE)); 
		  devmode.dmSize=sizeof(DEVMODE);
		  devmode.dmPelsWidth=pulpit.right; 
		  devmode.dmPelsHeight=pulpit.bottom; 
		  devmode.dmBitsPerPel=32;
		  devmode.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
		  ChangeDisplaySettings(&devmode, CDS_RESET); 
		  PostQuitMessage(0);
		  while(GetMessage(&::message,NULL,0,0)>0){}
		  PostQuitMessage(0);
		  break;
      case WM_KEYDOWN:
           switch(LOWORD(wParam))
           {
		      case VK_ESCAPE: SendMessage(hWnd,WM_DESTROY,0,0); break;

W WinMain mam m.in.

while(GetMessage(&message,NULL,0,0)>0)
{
   TranslateMessage(&message);
   DispatchMessage(&message);
   //próbowałem tutaj wstawić if(GetAsyncKeyState(VK_ESCAPE)) break; ale nie działało i tak dalej program się wykonuje. 
}
SendMessage(::hWnd,WM_DESTROY,0,0);
return (INT) message.wParam;   
0

Zadowalało by mnie rozwiązanie nawet na tzw. hama czyli 2 linijki:
DestroyWindow(hWnd); //dzięki temu okno znika z pola widzenia
oraz druga linijka to jakaś funkcja która wywala proces programu niezaleznie od tego czy użytkownik jest zalogowany na prawach administratora czy nie.

0

Wciśnięcie klawisza ESC wykryjesz w WM_COMMAND jako wParam==IDCANCEL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1