Zitat von
bitsetter:
Hallo,
die Bildschirmtastatur von Windows ist Topmost. Wenn man die Bildschirmtastatur verschiebt setzt diese sich dadurch wieder in den Vordergrund. Wenn man dann mit der Maus wieder über die Tastatur geht, wird das zuletzt aktive Fenster wieder in den Vordergrund gebracht.
Ich habe mal etwas herumexperimentiert, leider flackert das alles noch ein bisschen, da man beim klicken auf den Button das Fenster immer wieder nach vorne bringt.
Delphi-Quellcode:
private
hForeground : HWND;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowPos(self.Handle, HWND_NOTOPMOST + WORD(true), 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
end;
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
windows.SetForegroundWindow(hForeground);
end;
procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
windows.keybd_event(ord('A'), 0, 0, 0);//Beispiel
keybd_event(ord('A'), 0, KEYEVENTF_KEYUP, 0);
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
hForeground := windows.GetForegroundWindow;
end;
Danke für Ausführungen, ich habe selbst gestern versucht mit sendkeys etwas auf die Beine zu stellen, bekam komischerweise nur in einem Timer den Buchstaben gesendet, obwohl das
Handle klar war, über einen Button gings nicht.
Bei deinem Code habe ich das Problem, das sowaohl beim Mousedown und beim MouseUp ein A gesendet wird, das ich aber nicht so ganz verstehe.
Gruß, bluescreen25
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz