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 nichtdesweitern 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