Tasterturabfrage



  • Hallo,
    Ich will ein kleines Programm schreiben das beim drücken von F1 beendet wird und beim drücken von F2 eine Zahl ausgibt die ständig größer wird. Ich hab mir schon viel dazu angeschaut und es versucht zu verstehen aber ich werde einfach nicht schlau.

    #include <windows.h>
    #include <stdio.h>
    
    bool keys[256];
    bool active;
    
    LRESULT	CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    void main()
    {
    
    	short test = 0;	
    
    	printf("test = %d\n",test);
    
    	while(!keys[VK_F2])
    	{
    		if(keys[VK_F1])
    		{
    			test = test + 1;
    			printf("test = %d\n",test);
    		}
    
    	}
    }
    
    LRESULT CALLBACK WndProc(	HWND	hWnd,			// Handle For This Window
    							UINT	uMsg,			// Message For This Window
    							WPARAM	wParam,			// Additional Message Information
    							LPARAM	lParam)			// Additional Message Information
    {
    	switch (uMsg)									// Check For Windows Messages
    	{
    		case WM_ACTIVATE:							// Watch For Window Activate Message
    		{
    			if (!HIWORD(wParam))					// Check Minimization State
    			{
    				active=TRUE;						// Program Is Active
    			}
    			else
    			{
    				active=FALSE;						// Program Is No Longer Active
    			}
    
    			return 0;								// Return To The Message Loop
    		}
    
    		case WM_SYSCOMMAND:							// Intercept System Commands
    		{
    			switch (wParam)							// Check System Calls
    			{
    				case SC_SCREENSAVE:					// Screensaver Trying To Start?
    				case SC_MONITORPOWER:				// Monitor Trying To Enter Powersave?
    				return 0;							// Prevent From Happening
    			}
    			break;									// Exit
    		}
    
    		case WM_CLOSE:								// Did We Receive A Close Message?
    		{
    			PostQuitMessage(0);						// Send A Quit Message
    			return 0;								// Jump Back
    		}
    
    		case WM_KEYDOWN:							// Is A Key Being Held Down?
    		{
    			keys[wParam] = TRUE;					// If So, Mark It As TRUE
    			return 0;								// Jump Back
    		}
    
    		case WM_KEYUP:								// Has A Key Been Released?
    		{
    			keys[wParam] = FALSE;					// If So, Mark It As FALSE
    			return 0;								// Jump Back
    		}
    
    //		case WM_SIZE:								// Resize The OpenGL Window
    //		{
    //			ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));  // LoWord=Width, HiWord=Height
    //			return 0;								// Jump Back
    //		}
    	}
    
    	// Pass All Unhandled Messages To DefWindowProc
    	return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }
    

    Was ist hier falsch? 😕 Bitte um hilfe. MfG Ernd



  • Du vermischst hier Elemente von WINAPI-Programmierung mit Konsolenprogrammierung. Das kann so einfach nicht funktionieren.

    Du musst dich für einen Weg entscheiden; ich gehe mal davon aus, dass Du eigentlich für die Konsole programmierst. Dabei hat dann aber eine CALLBACK Funktion nichts zu suchen.

    Woher hast Du den Code? Selbstgeschrieben? Wenn nicht, steinige den Verfasser des Ganzen 😮



  • Da das ganze absolut nichts mehr mit Standard ANSI-C zu tun hat, verschieb ich dich mal.

    Am besten wohl in die Konsole, das es sich anscheinend um ein Konsolenprogramm handelt. Es gibt übrigens auch ein/zwei Beiträge in der Konsolen-FAQ, die dir weiterhelfen könnten (Abfrage von Sondertasten wie z. B. F1).



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi,
    Ja es soll ein Konsolen Programm sein. Das mit den WinAPI hab ich trotzdem bischen spät bemerkt. Den Code habe ich von nehe. Aber wie das mit der Tastertur abfrage funktioniert verstehe ich immer noch nicht.
    Ich muss ein Array definieren mit den Datentyp bool. Das Array steht für jede Taste der Tastertur. In den Tutorials die ich gelesen habe funktioniert das einwandfrei. Aber bei mir überhaupt kein meter.



  • Muss es denn unbedingt mit dieser Callback-Funktion laufen?

    Nochmal:
    Schau dir mal die Konsolen-FAQ an.



  • Ich habe mir die Tutorials durchgelesen. Und bischen probiert und gefummelt und es Funktioniert. Danke schön für den Hinweis.
    MfG Ernd


Anmelden zum Antworten