Hallo!
Bis jetzt konnte mir die Suchen-Funktion dieses Forums alle Fragen beantworten, die ich zu Delphi hatte, doch jetzt ist leider der Punkt gekommen, an dem ich selbst fragen muss
ich hoffe, mir kann jemand weiterhelfen
Ich habe eine Funktion geschrieben, welche die Lämpchen auf der Tastatur (also Num Lock, Caps Lock und Scroll Lock) ein- und ausschaltet:
Delphi-Quellcode:
//SetLED dient dazu, die Leuchtdioden auf der Tastatur anzusteuern.
//LED erhält die LED, deren Zustand geändert werden soll (1 bis 3 v.l.n.r.)
//NewStatus erhält die Information, ob die LED leuchten soll oder nicht.
procedure SetLED(LED : KeyboardLED; NewStatus : Boolean);
var
vi : TOSVersionInfo;
KS : TKeyboardState;
Key : Byte;
begin
vi.dwOSVersionInfoSize:=SizeOf(vi);
GetKeyboardState(KS);
case LED of
1: Key := VK_NUMLOCK;
2: Key := VK_CAPITAL;
3: Key := VK_SCROLL;
end;
if ((KS[Key] <> 0) xor NewStatus) then
begin
keybd_event(Key, $45, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(Key, $45, KEYEVENTF_EXTENDEDKEY or
KEYEVENTF_KEYUP, 0);
end;
end;
Das ganze funktioniert auch super, solange ich die Funktion durch z.B. Buttons aufrufe. 2x Anschalten bleibt bei Buttons auch immernoch an (soll ja auch).
Wenn ich jetzt allerdings einen Thread nutze, der dafür sorgt, dass ein Lämpchen angeschaltet bleibt, indem er es einfach jede Sekunde erneut anschaltet, ergibt sich folgendes Problem:
Das Lämpchen bleibt nicht an, sondern es blinkt... Und zwar im Sekundentakt, also arbeitet meine Funktion nun vermutlich als Umschalter statt als Anschalter.
Meine Threadprozedur sieht wie folgt aus:
Delphi-Quellcode:
procedure TDMXSignal_Connected.Execute;
begin
while not terminated do
begin
SetLED(3, True);
Sleep(1000);
end;
end;
Beinhaltet eigentlich keine potentielle Fehlerquelle (meiner bescheidenen Meinung nach...
)
Beim Debuggen zeigt sich jedoch, dass der TKeyboardState für den Thread statisch wird, das heißt bei Aufruf von SetLED durch den Thread ist der KeyboardState für die jeweilige Taste immer 0.
WARUM
Ich bin ratlos und wäre echt dankbar, wenn mir jemand helfen könnte
Danke dafür im Voraus und schönes Wochenende!!