![]() |
KeyboardLED (Update: ohne DLL)
Liste der Anhänge anzeigen (Anzahl: 1)
um nicht weiter den
![]() KeyboardLED ermöglicht es die LEDs des Keyboards zum leuchten zu bringen (ach... wer hätte das gedacht :stupid:) und das ganz ohne das virtuelle "Drücken" von NumLock & Co. Den Download gibts bei ![]() @Airblader: jetzt gibts auch gleich ne eingebaute Funktion zum zurücksetzen der LEDs |
Re: KeyboardLED
:gruebel: "inpoutput.dll" oder so wir nicht gefunden
|
Re: KeyboardLED
@Vorposter
Aus einem der Demos musst du die Datei nach Windows\system32 kopieren ;) @MarcoWarm Super :) Werd gleich mal schauen :mrgreen: Edit: Zurücksetzen funktioniert einwandfrei. Hättet ihr aber dazusagen können, dass dieses kleine, unscheinbare 'T' dazugekommen ist :mrgreen: |
Re: KeyboardLED
Oh mann ... was hab ich da für einen Kollegen .... so eine Nuss! :mrgreen:
Er wirds beheben ... er tippt .... und tippt ... und guckt mich böse an ... und tippt weiter ... ich glaub das wird dieses Jahr nichts mehr ;) ... und tippt ... und schimpft ....und nu ist die gefixte Version da! |
Re: KeyboardLED
Hängt die DLL mal mit an den ersten Beitrag an,
oder macht 'ne Zip für die Demo (Demo-EXE + inpoutput.dll). Und die DLL muß nicht unbedingt in das Systemverzeichnis. (ist bei einem Demoprogramm auch total bescheuert) Es sollte auch reichen (wenn ihr ordentlich programmiert habt), wenn sich die DLL im selben Verzeichnis wie die EXE befindet. [edit] menno wieder zu langsam ._. |
Re: KeyboardLED
cool das teil
nur beim beenden wirds ncht zurückgesetzt wen mans vergisst. ds ist n' bischen blöd aber macht nix! trotzdem :thumb: |
Re: KeyboardLED
@Jweis
Die Zurückstellung kann (!) ja auch nicht gewollt sein. Ein einfacher Funktionsaufruf im onDestroy tuts bei mir im Testprogramm ;) air |
Re: KeyboardLED
Zitat:
@JWeis: Das ist nur ne Demo (quick and dirty) das ist auf keinen Fall dazu gedacht zu irgendwas "nützlichem" zu dienen, außer der Werbung ;) Zitat:
|
Re: KeyboardLED
hallo,
ich hab diese Exe mal gestartet und getestet, aber mehr als dass sich das Programm aufhängt passiert bei mir nicht! Ach ja - ich hab ne USB-Tastatur |
Re: KeyboardLED
Dann poste ich meine Frage besser hier:
"Gibt es die vorkompillierte DCU auch für Delphi 5? Eine *.pas ist ja leider nicht dabei..." |
Re: KeyboardLED
Zitat:
wahrscheinlich sollte man beim coden try except drumbasteln, um die USB Probleme abzufangen. Vielleicht find ich noch ne andere Lösung aber jetzt spiel ich erstmal n bissl mit meinem Sohn... guts nächtle |
Re: KeyboardLED
Zitat:
Was die USB-Tastatur angeht hab ich das grad bei mir zu Hause ausprobiert mit einer USB-Tasta. die mit einem Adapter an PS2 steckt ... und da gehts ... wir werden morgen mal sehen ob es bei "echtem" USB-Anschluss ein Problem gibt. |
Re: KeyboardLED
funktioniert super :thumb:
gibt's die unit für delphi auch schon für die öffentlichkeit? würd da gern auch mal was mit machen :) aenogym |
Re: KeyboardLED
Hier übrigens mal ein "ausführlicheres" Testprogramm meinerseits ;)
Kann zwar "nur" 3 verschiedene Sachen, 2 davon aber noch nach Links o. Rechts, Timer ist einstellbar und man kann es inaktiv schalten :) ![]() air P.S.: Die DLL habe ich sicherheitshalber mit reingelegt |
Re: KeyboardLED
Es ist natürlich etwas "blöd", wenn man mit einem Programm an den LEDs herum manipuliert, dass sich die Tastatur dann auch entspr. anders verhällt. Will man z.B. die Netzwerklast über diese LEDs anzeigen lassen, dann sollte man nicht gerade etwas schreiben wollen :???: :lol:
|
Re: KeyboardLED
Die Veränderung der LEDs mit dieser Unit löst - zumindest bei mir - keine Änderung aus, da
ja nicht der Tastendruckt simuliert wird sondern die LED angesprochen wird ;) air |
Re: KeyboardLED
Zitat:
//edit: ich schwöre das da kein roter Kasten war! :) |
Re: KeyboardLED
Zitat:
|
Re: KeyboardLED
Selbst wenn NUM bei mir nicht aktiv ist kann ich mit dem NUM-Block noch vervorragend schreiben ;)
air |
Re: KeyboardLED
hi,
ich habe das programm auch mal an meinem laptop getestet, funktioniert wunderbar. ich denke dass es noch gut ist wenn man weiss dass es auch an laptops funktioniert, drum schreib ich jetzt mal... ach ja, es funktionieren beide, das von MarcoWarm und das von Airblader. @Airblader mein laptop wurde schon zur tragbaren Disco :mrgreen: gruss urbanbruhin |
Re: KeyboardLED
danke, unbekannte :D
:coder: aenogym |
Re: KeyboardLED
Also ich sitze hier an einem Vaio und da funktioniert es definitiv NICHT, da bei aktivem Num-Lock "uiopjklöm." = "456*123-0," ergibt... Ihr könnt es glauben oder nicht, es IST so :?
Das schrebe ch etzt mt atvem KeyED Es werden defnitv Zechen versccth |
Re: KeyboardLED
An meinem KeyLED kanns jedenfalls nicht liegen, da
1.) Es ja schließlich nur die Unit verwendet ;) 2.) Sonst ja funktioniert *fg* Auch mal was mit aktivem KeyLED und Intervall 10ms: Dies ist ein Testtext und wie man sieht passiert rein garnichts seltsames oder ungewöhnliches :) Und noch was mit NumPad: 56+57*28+45 Ist auch ganz normal ;) air Edit: Wenn KeyLED übrigens ein paar Leuten gefällt mach ich mich gerne auch an zusätzliche Muster und um es in den Tray zu minimieren etc... ;) Momentan ist es aber Spielerei, weil mir partout kein sinnvoller verwendungszweck dafür einfällt *fg* |
Re: KeyboardLED
Zitat:
|
Re: KeyboardLED
Ich meine damit dass der Fehler in der Unit liegt und nicht im Quelltext von mir :)
air |
Re: KeyboardLED
Zitat:
Mal eine Frage: warum steht da ein "i" im "defnitv" wenn es (das "i") anscheinend nicht gehen sollte? Und nochwas: Probier mal bitte die Demo vom MarcoWarm. Ich will Airblader nichts unterstellen aber ... man weiß ja nie. :) //edit: Ok, Nachtrag: Das Verschwinden von Zeichen konnte ich jetzt mit dem Prog von Airblader und einem Intervall von etwa 10ms nachempfinden. Das ist aber in der Natur der Sache begründet, die Marco noch ein wenig erläutern will. |
Re: KeyboardLED
Zitat:
Auch mit der anderen Demo tritt dieser Effekt ein... |
Re: KeyboardLED
Ihr habt es ja nich anders gewollt ;)
Jetzt müsst ihr nen technischen Vortrag ertragen (nich erschrecken vor dem bissl asm) Wat macht eijentlich SetKeyboardLED? Da stell'n mer uns ma janz dumm und sagen.... nen LED Status kann man beim Keyboard setzen, indem man einen zwei Byte-Code-Kommando an den Tastaturport sendet. (Bitte merken darauf komm ich nochmal zurück) Also was passiert nu? 1. ne Schleife wartet, bis der Tastaturpuffer leer ist.
Code:
2. jetzt schicken wir ganz schnell ein $ED an $60
in al,64h ;
and al,00000010b ; den Keyboard inputbuffer prüfen jz makeLED ; wenn der Leer ist ... loslegen
Code:
3. Prüfen, ob der Befehl von der Tastatur angenommen wurde
mov al,0edh ; Keyboard LED output Kommando $ED
out 60h,al ; an die Adresse $60 schreiben 4. jetzt machen wir alle 3 LEDs an
Code:
ok, ok, ok... zwischendrin fehlen n paar Befehle aber das soll ja jetzt auch bloß als Anschauungsmaterial dienen.
mov al,00000111b ; Keyboard LED output Kommando 111
out 60h,al ; an die Adresse $60 schreiben Dem aufmerksamen Leser ist sicher aufgefallen, daß hier das Risiko besteht, daß zwischen dem Senden von $ED und 00000111 die Tastatur (also der Mensch durch drücken einer Taste) eine "Taste" in den Buffer schreibt, die dann als LED Kommando gewertet würde. Unter DOS und Win9x kann man das unterbinden indem man den Interrupt exklusiv für sich reserviert (asm -> cli) und nachher die Interruptkontrolle wieder freigibt (asm -> sti). Aber leider macht uns XP da nen Strich durch die Rechnung, da sowas nur möglich ist, wenn die Anwendung im Kernelmodus läuft. Bitte Beachten
zur Beruhigung aller... chaosben ist immer noch dabei das irgendwie anders zu lösen (good luck man :thumb:) |
Re: KeyboardLED
auf jeden fall sehr nett das ganze.
ich sitz grade an nem programm, dass dieses geblinke auch halbwegs sinnvoll einsetzen kann (nein, kein traffic-monitor^^) wenns fertig ist, stell ich's natürlich in die freeware-sparte. dauert aber nochn wenig, da ich nebenbei auch noch viele andere dinge zu tun habe ;) aenogym |
Re: KeyboardLED
Bin schon gespannt.
Zitat:
|
Re: KeyboardLED
Wann bekomme ich denn meine D5-DCU ? :duck: :duck:
|
Re: KeyboardLED
Ach Daniel ... du machst mir Sorgen ... :)
Ich konnte bisher kein D5 an Land ziehen und wir wollten es eigentlich als ClosedSource behandeln. Ich hab grad den Marco gefragt und wir sind uns einig geworden, das du den Source unter der Bedingung bekommst, das er weiter "cliosed" bleibt. Wenn du einverstanden bist, kannt du ihn Montag haben. Dann kommen wir wieder ran. |
Re: KeyboardLED
Zitat:
Zitat:
|
Re: KeyboardLED
Danke an Daniel G....
jetzt gibts KeyboardLED auch als Delphi 5 Unit unter oben genanntem Link |
Re: KeyboardLED
Zitat:
Man sollte auch vorher den aktuellen Status der LEDs abfragen und diesen zwischenspeichern. In meiner Direkt-Port-Access Unit sieht dies so aus:
Delphi-Quellcode:
Man könnte so auch die Laufwerks LEDs leuchten lassen
procedure TPort.SetKeyboardLED(LED: Byte; State: TLEDState);
function LEDState: System.Byte; begin Result := 0; if GetCurrentThreadID <> MainThreadID then AttachThreadInput(GetCurrentThreadID, MainThreadID, True); if GetKeyState(vk_Scroll) and 1 <> 0 then Result := Result or klScroll; if GetKeyState(vk_NumLock) and 1 <> 0 then Result := Result or klNum; if GetKeyState(vk_Capital) and 1 <> 0 then Result := Result or klCaps; if GetCurrentThreadID <> MainThreadID then AttachThreadInput(GetCurrentThreadID, MainThreadID, False); end; begin if FKbdLED and $80 = 0 then FKbdLED := FKbdLED or $80 or LEDState; case State of lsReset : FKbdLED := FKbdLED and not LED or LEDState; lsOn : FKbdLED := FKbdLED or LED; lsOff : FKbdLED := FKbdLED and not LED; end; if FKBdLEDTime <> 0 then while FKbdLEDTime >= GetTickCount do ; PortB[$60] := $ED; FKbdLEDTime := HDDelay; while FKbdLEDTime > 0 do Dec(FKbdLEDTime); PortB[$60] := FKbdLED and klAll; FKbdLEDTime := GetTickCount + 1; end;
Delphi-Quellcode:
Beachten sollte man aber das man auf einem Protected Mode OS normalerweise keinen Zugriff auf die Ports hat, nur Kernelmode Treiber sollten dies können. Um nun denoch aus Ring 3 heraus Zugriff auf die Ports zu bekommen wird dieser Schutz deaktiviert und meistens alle Ports für alle Anwendungen freigegeben, zb. mit GiveIO.sys oä.
procedure TPort.SetDriveLED(Drive: Byte; State: TLEDState);
begin Drive := Drive and 3; if State = lsOn then Drive := Drive or (not Drive shl 4); PortB[$03F2] := Drive; end; Dies hat aber nun zur Folge das dies 1. nur unter WinNT/Win2k etc funktioniert und 2. das eine Anwendung die auf Grund irgendwelcher Fehler in den Port Bereich irgendwelche Daten schreibt dafür sorgt das Hardware oder Daten zerstört werden können. Ich würde sowas nicht benutzen wollen. Gruß Hagen |
Re: KeyboardLED
Hallo,
Zitat:
Zugriffe auf Ports für dort zu einer Exception. (Sorry aber ich hatte den Beitrag von negaH nicht gelesen) Rainer |
Re: KeyboardLED
Zitat:
Aber daß das mit Interrupts nix zu tun hat, ist nicht ganz korrekt... Es ist nur dumm, daß man unter XP die Interrupts nicht sperren darf (cli etc.) Zitat:
Zitat:
Zitat:
Zitat:
|
Re: KeyboardLED
Delphi-Quellcode:
Doch funktioniert unter Win95 bis WinXP. Aber nur weil dieses PortB[], PortW[], PortL[] meine Entwicklungen sind. Ich bezog mich also nicht auf das alte PASCAL Port[] sondern auf meine direkt Port Access Unit.
PortB[$03F2] := Drive;
Zitat:
Der Zugriff auf den Keyboard Port hat insofern mit Interrupts nur damit zu tun das man diese eventuell mit CLI/STI sperren sollte, mehr aber auch nicht. Zitat:
Mal ne andere Frage: Funktioniert dein Code auch unter Win95 uä. ? Gruß Hagen |
Re: KeyboardLED
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: KeyboardLED
Zitat:
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz