Hallo zusammen
ich versuche ein Programm zu erstellen, das bei laufendem Screen-Saver mit Passwort-Schutz diesen automatisch ausschaltet und danach das in einem Edit-Feld bereit stehende Passwort in die Windows-Dialog-Box 'einfüllt'. Das Programm sollte unter W2000 oder XP laufen.
Ich bin mit nachfolgendem Code auch bereits soweit, dass mir der Screen-Saver ausgeschaltet wird und eben diese Dialog-Box angezeigt wird. Aber die enthaltene Routine mit den KEYBD_EVENT funktioniert nicht, resp. die Tasteneingaben laufen nicht ins Passwortfeld der Dialogbox, obwohl dieses fokusiert ist.
Was mache ich da falsch, resp. was habe ich vergessen oder übersehen?
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var x : integer;
var q : char;
var hDesktop: HDESK;
begin
if not ScreenSaverRunning then
Memo1.Lines.Append('SS läuft nicht')
else
begin
Memo1.Lines.Append('SS läuft');
hDesktop := OpenDesktop('screen-saver', 0, False, MAXIMUM_ALLOWED);
if hDesktop <> 0 then
begin
EnumDesktopWindows(hDesktop, @EnumWindowCallback, 0);
Form1.JvWavePlayer1.Play;
for x := 1 to length(Form1.Edit1.Text) do
begin
q := UpCase(Form1.Edit1.Text[x]);
keybd_event(Ord(q), 0, 0, 0);
end;
keybd_event(13,0,0,0);
CloseDesktop(hDesktop);
end
else
begin
PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0);
{ SetCursorPos(10,10);
SetCursorPos(20,20); }
for x := 1 to length(Form1.Edit1.Text) do
begin
q := UpCase(Form1.Edit1.Text[x]);
keybd_event(Ord(q), 0, 0, 0);
end;
keybd_event(13,0,0,0);
JvWavePlayer1.Play;
end;
end;
end;
Ich weiss, dass das ganze nicht besonders schön programmiert ist, da ich eben am ausprobieren bin.