RegisterHotKey gibt msg nicht weiter ?



  • Hallo,

    ich habe gerade versucht einen Hotkey per RegisterHotKey für ein Fenster festzulegen, dies funktioniert soweit dass der Tastendruck abgefangen wird, jedoch die Nachricht aus dem WndProc nicht ausgegeben wird, wenn dies geschieht:

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
    	{
    	    case WM_HOTKEY:
    		    MessageBox(NULL, (char*)wParam, "", MB_OK);
    	    default:
    		    break;
    	} return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {	
    	WNDCLASSEX WndClsEx;
    
    	WndClsEx.cbSize        = sizeof(WNDCLASSEX);
    	WndClsEx.lpfnWndProc   = WndProc;
    	WndClsEx.lpszClassName = "frm1xx";
    	WndClsEx.hInstance     = hInstance;
    
    	RegisterClassEx(&WndClsEx);
    
    	HWND hWnd = CreateWindow(0,"frm1xx", NULL, NULL,NULL,NULL,
    		NULL,NULL,NULL,NULL,hInstance,NULL);
    
    	RegisterHotKey(hWnd, 2222, 0, 65); //a
    
    	MSG msg;
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		TranslateMessage(&msg); 
    		DispatchMessage(&msg);
    	}
    
    	return msg.wParam; //(int)
    }
    

    Wo liegt hier der Fehler ?

    Gehe ich richtig davon aus dass man auch eine Fensterklasse registrieren muss um einen Hotkey korrekt abfangen zu können ?

    Btw.: kann man systemweite Hotkeys auch ohne ein Fenster abfangen, z.B. in einer Konsolenanwendung ?

    Danke im Voraus !



  • Ich dachte immer, dass RegisterHotKey zurückgibt, es erfolgreich war....


  • Mod

    Und ich würde mal sagen, dass nur Buchstaben ohne Modifier sicherlich nicht als Hotkey verwendet werden dürfen. IMHO wäre dies fatal, denn das würde ja andere Anwednungen evtl. komplett unbrauchbar machen.

    Wie Jochen schon fragte: Wurde der Hotkey registriert?



  • Ja der Hotkey wird registriert und auch abgefangen, jedoch liegt der Fehler in der Fenster-Klasse, da er dieser nicht richtig zugeteilt wird.

    Anscheinend kann diese erst korrekt registriert werden, wenn alle Argumente festgelegt sind.

    Es funktioniert nun mit einem WNDCLASSEX-Code aus MSDN, jedoch bleibt die Fragen offen ob ich einen Hotkey auch global für eine Konsolen-Anwendung registrieren kann?


Anmelden zum Antworten