Reakcja na zdarzenia spoza okna programu

0

Witam,

Piszę program i mam problem: potrzebny mi kod do obsługi zdarzeń spoza okna programu.

(WinApi C++)

Konkretnie np. jeżeli mamy otwartą Mozillę jest ona aktywnym oknem. Mój program działa w tle. Chciałbym żeby jak nacisnę np. F11 mój program zareagował. Na obecna chwilę reaguje gdy on jest aktywny :D.

Będę wdzięczny za kawałki kodu.

Z góry dziękuje.

1

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309%28v=vs.85%29.aspx
Pamiętaj tylko że aplikacja która była aktywna podczas naciśnięcia HotKey nie dostanie tego klawisza. Więc musisz odrejestrować HotKey wysłać klawisz zarejestrować HotKey

0

Thx bardzo jeszcze jedno pytanie:

Jak już zarejestruje HOTKEY:

if (RegisterHotKey(hwnd,1,MOD_ALT,0x42))  //0x42 is 'b'
    {
		MessageBox(NULL,L"Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n",L"zarejestrowno",MB_YESNO | MB_ICONQUESTION);
    }
     if (RegisterHotKey(hwnd,1,MOD_SHIFT,0x42))  //0x42 is 'b'
    {
		MessageBox(NULL,L"Hotkey 'SHIFT+b' registered, using MOD_NOREPEAT flag\n",L"zarejestrowno",MB_YESNO | MB_ICONQUESTION);
    }

Tu kawałek pętli (błędny):

 if (message == WM_HOTKEY)
     {
            MessageBox(NULL,L"WM_HOTKEY received\n",L"wykryto",MB_YESNO | MB_ICONQUESTION);         
     }
	 if (message == WM_HOTKEY)
     {
            MessageBox(NULL,L"WM_HOTKEY received\n",L"wykryto2",MB_YESNO | MB_ICONQUESTION);         
     }

Jak odróżnić które klawisze zostały wciśnięte???

0

Jeszcze jedno: HotKey Działa dobrze.....
Ale na aplikacji pełno-ekranowej (no grze potocznie mówiąc) program wcale nie reaguje.

#include <windows.h>
#include <string>

#define HOTKEY                       0x0312
#define HOTKEY2                       0x0313

  LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam)
{

   switch (message)
   {
   case WM_HOTKEY:
	   {
		   switch(wParam)
		   {
			 case HOTKEY:
				{
				 MessageBox(NULL,L"ALT received\n",L"wykryto",MB_YESNO | MB_ICONQUESTION);    
				 break;
				}
			 case HOTKEY2:
				{
					INPUT Klawisz;
					ZeroMemory (&Klawisz, sizeof(INPUT));
					// ustawienie pól struktury i wygenerowanie zdarzenia
					Klawisz.type = INPUT_KEYBOARD;
					Klawisz.ki.wVk = 0x43;
					SendInput (1, &Klawisz, sizeof(INPUT));
					break;
				}
		   }
		   break;
	   }
	   break;

   case WM_DESTROY:
      {
         PostQuitMessage(0);
         break;
      }
         
   }
	return DefWindowProc(hwnd, message, wParam, lParam);
} 
int WINAPI WinMain(HINSTANCE hInstance,
      HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    
   MSG msg;
	std::wstring g_strKlasaOkna=L"clasaswnd";

   

  /* rejestrujemy klasę okna */
	WNDCLASSEX KlasaOkna;
	// wypełniamy strukturę WNDCLASSEX
	ZeroMemory (&KlasaOkna, sizeof(WNDCLASSEX));
	KlasaOkna.cbSize = sizeof(WNDCLASSEX);
	KlasaOkna.hInstance = hInstance;
	KlasaOkna.lpfnWndProc = WndProc;
	KlasaOkna.lpszClassName = g_strKlasaOkna.c_str();
	KlasaOkna.hCursor = LoadCursor(NULL, IDC_CROSS );
	KlasaOkna.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	KlasaOkna.hbrBackground = (HBRUSH) COLOR_WINDOW;
	KlasaOkna.style =  CS_OWNDC;
	// rejestrujemy klasę okna
	RegisterClassEx (&KlasaOkna);
	/* tworzymy okno */
// tworzymy okno funkcją CreateWindowEx
	HWND hOkno = CreateWindowEx( WS_EX_CLIENTEDGE, g_strKlasaOkna.c_str(), L"+", WS_OVERLAPPEDWINDOW,20, 20, 100, 100, NULL, NULL, hInstance, NULL );

  
   ShowWindow(hOkno, nCmdShow);


   if (RegisterHotKey(hOkno,HOTKEY,MOD_ALT,0x42))  //0x42 is 'b'
    {
		MessageBox(NULL,L"Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n",L"zarejestrowno",MB_YESNO | MB_ICONQUESTION);
    }
     if (RegisterHotKey(hOkno,HOTKEY2,MOD_SHIFT,0x42))  //0x42 is 'b'
    {
		MessageBox(NULL,L"Hotkey 'SHIFT+b' registered, using MOD_NOREPEAT flag\n",L"zarejestrowno",MB_YESNO | MB_ICONQUESTION);
    }
   

   while (GetMessage(&msg, NULL, 0, 0))       
   {   
       TranslateMessage(&msg);
         DispatchMessage(&msg);      
   }

     return msg.wParam;
}

Dlaczego? I co zrobić by program reagował na HotKey?
Mam jakiś błąd w kodzie???

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