Button-Click per Software simulieren
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Button-Click per Software simulieren
Ich möchte innerhalb eines Formulars per Software einen bestimmten Button des Formulars anclicken.
Wie geht das ?
Früher konnte man unter Windows eine wm_... Nachricht versenden, - ich möchte aber eine Lösung, die sowohl unter Windows als auch unter Linux funktioniert.
Wie geht das ?
Früher konnte man unter Windows eine wm_... Nachricht versenden, - ich möchte aber eine Lösung, die sowohl unter Windows als auch unter Linux funktioniert.
Re: Button-Click per Software simulieren
Was ist der Sinn der Sache in einem eigenen Formular?
Warum rufst du nicht einfach die Ereignisbehandlungsprozedur direkt auf? Button1Click(Self);
Wenn man eine fremde Anwendung (WebBrowser oder so) "fernsteuern" will, kann ich es noch verstehen.
Warum rufst du nicht einfach die Ereignisbehandlungsprozedur direkt auf? Button1Click(Self);
Wenn man eine fremde Anwendung (WebBrowser oder so) "fernsteuern" will, kann ich es noch verstehen.
-
- Beiträge: 29
- Registriert: Fr 19. Mai 2017, 18:04
- OS, Lazarus, FPC: Win10x64, L 1.8rc3, FPC3.0.2
- CPU-Target: 64
- Wohnort: Nord-Baden
- Kontaktdaten:
Re: Button-Click per Software simulieren
Auch für die eigene Anwendung gibt es durchaus einen Sinn:theo hat geschrieben:Was ist der Sinn der Sache in einem eigenen Formular?
Warum rufst du nicht einfach die Ereignisbehandlungsprozedur direkt auf? Button1Click(Self);
Wenn man eine fremde Anwendung (WebBrowser oder so) "fernsteuern" will, kann ich es noch verstehen.
Zu Testzwecken
Ich erstelle für wichtige Dialoge TestCases (DUnit) die normales Verhalten / unnormales Verhalten / Monkey simuliert.
und vergleiche ob der Form die erwarteten Informationen liefert, oder zumindest bedienbar bleibt.
OS: ...-Win10 x64
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
Re: Button-Click per Software simulieren
theo verweist in seinem Beitrag aus anno 2009 (http://www.lazarusforum.de/viewtopic.php?f=10&t=2436) auf den Ordner components/mouseandkeyinput/ in der Lazarus-Installation.
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Re: Button-Click per Software simulieren
Ich möchte einen Ablauf innerhalb eines Programms automatisieren.
Beispiel:
Das Programm wird mit einem Parameter aufgerufen.
Aufgrund dessen soll ein Formular gestartet werden, es werden automatisch bestimmte Werte in das Formular eingetragen, automatisch weiterverarbeitet (="Klick auf OK-Button), und anschliessend ausgedruckt werden(Klick auf Druck-Button). Danach beendet sich das Programm wieder.
Dieser Ablauf soll manuell (=normal) möglich sein, aber unter bestimmten Umständen auch voll-automatisch ablaufen.
Und dafür brauche ich diesen "Button-Click" (mehrfach).
Beispiel:
Das Programm wird mit einem Parameter aufgerufen.
Aufgrund dessen soll ein Formular gestartet werden, es werden automatisch bestimmte Werte in das Formular eingetragen, automatisch weiterverarbeitet (="Klick auf OK-Button), und anschliessend ausgedruckt werden(Klick auf Druck-Button). Danach beendet sich das Programm wieder.
Dieser Ablauf soll manuell (=normal) möglich sein, aber unter bestimmten Umständen auch voll-automatisch ablaufen.
Und dafür brauche ich diesen "Button-Click" (mehrfach).
Re: Button-Click per Software simulieren
Das erklärt aber mMn nicht, wieso du einen Button-Click brauchst.
Das kannst du doch auch durch den Aufruf der Methoden erledigen, quasi ohne Button?
Oder wo ist das Problem dabei?
Das kannst du doch auch durch den Aufruf der Methoden erledigen, quasi ohne Button?
Oder wo ist das Problem dabei?
Re: Button-Click per Software simulieren
Meinst du sowas? Dieses Demoprogramm schreibt munter in eine Laufende Notepad-Instanz. Wenn man jetzt noch wüsste, wie das unter Linux geht... (ok, das war eigentlich deine ursprüngliche Frage...)
Code: Alles auswählen
uses
MouseAndKeyInput, LCLType, Process, Windows;
procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
external user32 Name 'SwitchToThisWindow';
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
begin
h := FindWindow('NotePad', nil);
Label1.Caption := 'Handle = ' + IntToStr(h);
if h > 0 then begin
SwitchToThisWindow(h, true);
KeyInput.Apply([ssShift]);
KeyInput.Press(VK_A);
KeyInput.Unapply([ssShift]);
KeyInput.Press(VK_B);
KeyInput.Press(VK_C);
end;
end;
Re: Button-Click per Software simulieren
@wp_xyz: Bevor wir hier kompliziertes Zeug vorschlagen, sollten wir abklären, ob malabarista nicht einfach einen Denkfehler macht.
Nach seinen Schilderungen, sehe ich keinen Grund für solche Maßnahmen.
Nach seinen Schilderungen, sehe ich keinen Grund für solche Maßnahmen.
-
- Beiträge: 22
- Registriert: Di 19. Okt 2010, 17:23
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Kaiserstuhl
Re: Button-Click per Software simulieren
Also ich habe in einer Anwendung, die wahlweise im Bediener- oder Automatik-Modus läuft mal sowas implementiert (also Steuerung über Aufruf-Parameter)... Hilft das vielleicht weiter?
Code: Alles auswählen
procedure TFrmDispo.FormCreate(Sender: TObject);
var
....
begin
// Programm-Modus festlegen
fPM := pmUser;
for iParam := 0 to ParamCount do begin
Param := ParamStr(iParam);
// Zerlegung
Key := StrListElem(Param, '=', 1); Key := AnsiUpperCase(Key);
Value := StrListElem(Param, '=', 2); Value := AnsiUpperCase(Value);
// Festlegung Programm-Modus
if (Key = 'PM') then begin
if (Value = 'AUTO')
then fPM := pmAuto
else fPM := pmUser;
end;
end;
// im Automatic-Mode Arbeiten verrichten
if (fPM = pmAuto) then begin
hier einfach die notwendigen Arbeiten erledigen, wie z.B.
- zuerst die notwendigen Werte eintragen/einlesen
- Plausi-Prüfungen
- Druck auslösen
- sonstiges
// und dann nix wie weg...
Close;
Application.Terminate;
end;
end;
Wer mehr denkt hat mehr vom Hirn...
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Re: Button-Click per Software simulieren
@linus: genauso soll es ablaufen, wahlweise Bedienermodus oder auto-Modus.
Nur mit dem Unterschied, dass es über mehrere Formulare läuft (nicht nur eines)
Nur mit dem Unterschied, dass es über mehrere Formulare läuft (nicht nur eines)
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Re: Button-Click per Software simulieren
@linus: kann man das alles bereits im FormCreate machen ???
Das war mir neu. Ich dachte man müsste mindestens den Show-/Paint-Vorgang abwarten.
Das war mir neu. Ich dachte man müsste mindestens den Show-/Paint-Vorgang abwarten.
-
- Beiträge: 22
- Registriert: Di 19. Okt 2010, 17:23
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Kaiserstuhl
Re: Button-Click per Software simulieren
Wenn das über mehrere Formulare weg laufen soll, würde ich mir überlegen, ob die betreffenden Code-Teile in eine separate Unit ausgelagert werden können. Dann ist das auch etwas schöner zum Lesen und evtl. auch etwas besser für die Wartbarkeit...malabarista hat geschrieben:@linus: genauso soll es ablaufen, wahlweise Bedienermodus oder auto-Modus.
Nur mit dem Unterschied, dass es über mehrere Formulare läuft (nicht nur eines)
Wer mehr denkt hat mehr vom Hirn...
-
- Beiträge: 29
- Registriert: Fr 19. Mai 2017, 18:04
- OS, Lazarus, FPC: Win10x64, L 1.8rc3, FPC3.0.2
- CPU-Target: 64
- Wohnort: Nord-Baden
- Kontaktdaten:
Re: Button-Click per Software simulieren
[Standardantwort #1:]... das kommt drauf an ...malabarista hat geschrieben:@linus: kann man das alles bereits im FormCreate machen ???
Das war mir neu. Ich dachte man müsste mindestens den Show-/Paint-Vorgang abwarten.
Und zwar ob du Teile deines Codes in separate Forms, Datamodules o.ä. ausgelagert hast.
Der Form selbst ist bei Formcreate schon voll erstellt, und solange Du dich nur auf Objekte und Klassen im Form beziehst ist alles OK, aber Du kannst hier nicht davon ausgehen, daß andere Forms und Klassen auch schon erstellt worden sind.
Desweiteren ist die Fehlerbehandlung nicht so schön oder führt zu interessanten Ergebnissen. Soweit ich es verstanden habe ist FormCreate dazu gedacht weitere Elemente Componenten, Controls o.ä. zu Initialisieren.
Die Fehlerbehandlung geht bei einem Fehler in FormCreate davon aus, daß der Form nicht in Ordnung ist und Zerstört ihn gleich wieder. Deshalb ist es besser zumindest ein OnShow, oder einen OnTimer abzuwarten, damit ist sichergestellt daß sich die Anwendung im Run-Modus befindet.
OS: ...-Win10 x64
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Re: Button-Click per Software simulieren
Das mit dem OnTimer ist eine schöne Idee.
Damit komme ich aus diesem ersten OnShow heraus.
Damit komme ich aus diesem ersten OnShow heraus.