Lightshow 0.1



  • Hey ihr Lieben, ich besitze eine Logitech G11, nun habe ich mir überlegt die hat doch so viele Tasten, welche auch noch leuchten, ich möchte die doch einmal ansteuern.
    Da ich den richtigen Ansatz noch nicht dazu gefunden habe und ich nicht völligst entmutigt sein wollte. Dachte ich mir hey dann greifst du vielleicht einfach nur auf die Num-LK, Scroll-LK und die CAP-LK Lichter Zu. einfach per SendKey, funktioniert soweit auch ganz gut, nur hab ich ein Problem, ich möchte in einer Do-While schleife in der ich ein switch unter gebracht habe noch mals eine Do-While schleife unterbringen. aber erst wenn auf die Taste s gedrückt wurde und wenn dann q gedrückt wurde soll die schleife aufhören. macht sie aber leider nicht 😞

    desweitern habe ich versucht das das Programm von anfang an die Look Lichter ausmacht, nur das Problem wenn eins aus ist macht es es dadurch an weil es ja einen Tastenschlag realisiert (mit sendkey).
    über ideen und anregungen wäre ich sehr erfreut =D...

    #include <windows.h>
    #include <conio.h>
    #include <iostream>
    	using namespace std;
    
    int SetLight()
    {
    	keybd_event(144, 0, 0, 0);          // Num Lock
        keybd_event(144, 0, 0x02, 0);       // aus
    	Sleep(100);
    	keybd_event(20, 0, 0, 0);           // Caps Lock
        keybd_event(20, 0, 0x02, 0);        // aus
    	Sleep(100);
    	keybd_event(145, 0, 0, 0);          // Scroll Lock
        keybd_event(145, 0, 0x02, 0);       // aus
    	Sleep(100);
    
    	return(0);
    }	
    int LightShow()
    {
    
    	keybd_event(144, 0, 0, 0);          // Num Lock
        keybd_event(144, 0, 0x02, 0);       // an
        Sleep(250);
        keybd_event(144, 0, 0, 0);          // Num Lock
        keybd_event(144, 0, 0x02, 0);       // aus
    	Sleep(250);
    
        keybd_event(20, 0, 0, 0);           // Caps Lock
        keybd_event(20, 0, 0x02, 0);        // an
        Sleep(250);
        keybd_event(20, 0, 0, 0);           // Caps Lock
        keybd_event(20, 0, 0x02, 0);        // aus
        Sleep(250);
    
        keybd_event(145, 0, 0, 0);          // Scroll Lock
        keybd_event(145, 0, 0x02, 0);       // an
        Sleep(250);
        keybd_event(145, 0, 0, 0);          // Scroll Lock
        keybd_event(145, 0, 0x02, 0);       // aus
        Sleep(250);
    
    	return(0);
    
    }
    int ApplicationFlow()
    {
    	char select;
    	do
    	{
    		select=getch();
    		switch(select)
    		{
    		case 's':
    			{
    				do
    				{
    					LightShow();
    				}while(select!='q');
    				break;
    			}
    		default:
    			{
    				break;
    			}
    
    		}
    
    	}while(select!='q');
    	return(0);
    }
    int main()
    {
    	SetLight();
    	ApplicationFlow();
    	getch();
    	return(0);
    }
    

    gruß DFZ



  • Warum dein Ansatz einer verschachtelten do-while Schleife nicht funktioniert, ist wohl der, dass in der inneren kein Tastendruck 'q' abgefangen wird. (select ist ja immer noch 's').
    Ein getch wird dir da allein nicht viel nützen, da deine Lightshow bei jedem Schleifendurchlauf bei getch auf einen Tastendruck wartet.
    Eine mehr oder weniger gute Lösung wäre folgender Ansatz.

    char select;
    	do
    	{
    		cout << "run" << endl;
    
    	} while(!kbhit() || (kbhit() && getch() !='q'));
    

    kbhit prüft lediglich, ob eine Taste gedrückt wurde. mit getch kannst du danach den Wert abfragen.

    Zu deiner 2. Frage ... du kannst prüfen, ob eine Taste leuchtet und auch nur dann zurücksetzen

    Ansatz:

    BYTE states[256];
    
    GetKeyboardState((LPBYTE)&states);
    
    cout << (states[VK_NUMLOCK] & 1) << endl;
    

    oder das Beispiel von Mircosoft
    http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx


Anmelden zum Antworten