Lazarus und Fremdprogramm

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
thhz
Beiträge: 3
Registriert: So 27. Feb 2022, 21:55

Lazarus und Fremdprogramm

Beitrag von thhz »

Hallo,

ich habe noch keine große Erfahrung mit Lazarus, daher habe ich erst einmal das Einsteigerforum gewählt,
auch wenn die Thematik recht knifflig ist.
Ich möchte bestimmte Felder in unserem Firmen ERP-System (unter Windows) über eine Lazarusanwendung füllen.
So möchte ich die Eingabe erleichtern, stelle ich mir zumindest vor.
An die Datenbank im Hintergrund komme ich nicht dran, daher möchte ich es so versuchen.
Die Idee kam mir durch ein Textbausteinprogramm. Das wird mittels Hotkey aufgerufen und man kann in jede beliebige Anwendung
vordefinierte Bausteine einfügen. Nur die müssen speziell sein, man kann sie nicht in dem Textbausteinprogramm nicht erstellen.
Habe schon Stunden mit Google verbracht, bin so weit das SendInput und Sendkey eine Rolle spielen könnten,
ebenso getactivewindow und lazmouseandkey package.
Habe viel gelesen, komme aber nicht weiter, ich finde auch keine Beispiele die ich verwenden kann, ehrlich gesagt ist mir
das auch zu komplex, so viel Erfahrung habe ich nicht.

also
- woher weiß mein Lazprogramm aus welcher Anwendung es aufgerufen wurde bzw. aus welchem Eingabefeld?
- es gibt insgesamt 3 Felder zufüllen
- das Programm hat auch 3 Felder
- auf z.B. einen Buttonklick, soll der Text aus Feld 1 in das aktive Feld der ERP-Anwendung gelangen
- dann müsste ein TAB gesendet werde, Feld 2 wird angesprungen und gefüllt, dann Feld 3

Ich hoffe das ich mich nicht zu umständlich ausgedrückt habe, ist mein erster Beitrag in einem Forum :D
Hätte jemand einen Denkanstoß oder schon selbst Erfahrung mit einem ähnlichen Projekt?

Vielen Dank

Gruß
Thomas

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 143
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Windows 10 Lazarus 2.2.2 FPC 3.2.2

Re: Lazarus und Fremdprogramm

Beitrag von Niesi »

thhz hat geschrieben:
Mo 28. Feb 2022, 22:10

- es gibt insgesamt 3 Felder zufüllen
- das Programm hat auch 3 Felder
- auf z.B. einen Buttonklick, soll der Text aus Feld 1 in das aktive Feld der ERP-Anwendung gelangen
- dann müsste ein TAB gesendet werde, Feld 2 wird angesprungen und gefüllt, dann Feld 3
Das wird so nicht gehen. Ich vermute, dass das Textbausteinprogramm über die Zwischenablage arbeitet. Das könntest Du auch versuchen. Die Eingebenden müssen dann jeweils den vorgefertigten Text z. B. per "Strg" + "v" einfügen.
Es sei denn, Du verfügst über eine Schnittstelle zu dem Programm, dessen Felder Du füllen möchtest - aber einfach so mal an oder gar in ein laufendes Programm Eingaben von außen senden, da wüsste ich nicht, wie das funktionieren sollte ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5177
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Lazarus und Fremdprogramm

Beitrag von af0815 »

Einsteigspunkte
viewtopic.php?t=7729
viewtopic.php?t=3767

https://www.tech-ecke.de/index_quereins ... lieren.htm

Das größte Problem ist, das man nicht unbedingt gut sieht wohin man was sendet :-)

Code: Alles auswählen

uses
 .......
  ,windows
  ,ShellApi
  , JwaWinUser  // für TInput
  ;
..........
procedure SendVK(aVK:word);
var
  input: TInput;
begin
  FillChar(input, sizeof(TInput), 0);

  input.type_ := INPUT_KEYBOARD;
  input.ki.wVk := aVK;

  SendInput(1, @input, sizeof(TInput));
end;

procedure SendF1;
begin
  SendVK(VK_F1);
end;
Dateianhänge
uwinhelper.pas
Hilfsroutinen um mit Fremden Programm zu kommunizieren
(6.85 KiB) 40-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 143
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Windows 10 Lazarus 2.2.2 FPC 3.2.2

Re: Lazarus und Fremdprogramm

Beitrag von Niesi »

Das ist jedenfalls sehr interessant und könnte eine Möglichkeit sein, die Aufgabenstellung gut zu lösen ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Socke
Lazarusforum e. V.
Beiträge: 3054
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lazarus und Fremdprogramm

Beitrag von Socke »

Wenn deine ERP Software von einem großen Softwareanbieter aus Walldorf kommt, hast du noch die Möglichkeit des SAP GUI Scriptings. Das läuft über OLE bzw. COM Automatisierung und kann prinzipiell auch von Lazarus aus genutzt werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5177
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Lazarus und Fremdprogramm

Beitrag von af0815 »

Mit Hilfe der Routinen kann man untersuchen ob vielleicht die im fremden Programm verwendeten Felder (besonders die Eingabefelder) Komponentenamen haben. Dann wird es etwas einfacher. Dann kann man die direkt adressieren und gezielt schreiben.

Ich habe mich da mit dem Titel und Classennamen des Fensters beschäftigt. ListWinComp('Titel Fenster', 'Namen der Classe', AStringList) hat mir da geholfen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

thhz
Beiträge: 3
Registriert: So 27. Feb 2022, 21:55

Re: Lazarus und Fremdprogramm

Beitrag von thhz »

Guten Abend,

vielen Dank,
da habt ihr mir aber viel aufgegeben
werde mich damit beschäftigen
ein Problem ist schon aufgetreten, wenn ich
die Unit uwinhelper einbinden und das Projekt kompiliere kommt
diese Meldung: uwinhelper.pas(121,51) Error: Illegal type conversion: "TStringList" to "LongInt"
habe diese Zeilen testweise auskommentiert, dann läuft die Kompilierung durch.
Arbeite mit Lazarus 2.0.12

nochmals vielen Dank

Gruß
Thomas

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5177
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Lazarus und Fremdprogramm

Beitrag von af0815 »

Den Fehler sehe ich mir an, kann sein, das der fpc strenger geworden ist. Die Unit ist etwas älter, da kann sowas schon vorkommen. :shock:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 9163
Registriert: Mo 11. Sep 2006, 19:01

Re: Lazarus und Fremdprogramm

Beitrag von theo »

thhz hat geschrieben:
Di 1. Mär 2022, 20:36
diese Meldung: uwinhelper.pas(121,51) Error: Illegal type conversion: "TStringList" to "LongInt"
Hab's nicht auf Windows getestet, aber Longint ist da für 64bit nicht gut.
Geht das besser?

Code: Alles auswählen

 EnumChildWindows(hWindow, @EnumWindowChildProc, LPARAM(aList));

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5177
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Lazarus und Fremdprogramm

Beitrag von af0815 »

theo hat geschrieben:
Mi 2. Mär 2022, 11:13
thhz hat geschrieben:
Di 1. Mär 2022, 20:36
diese Meldung: uwinhelper.pas(121,51) Error: Illegal type conversion: "TStringList" to "LongInt"
Hab's nicht auf Windows getestet, aber Longint ist da für 64bit nicht gut.
Geht das besser?

Code: Alles auswählen

 EnumChildWindows(hWindow, @EnumWindowChildProc, LPARAM(aList));
Ich würde sagen ja, der Code ist nur unter 32Bit gelaufen, wie gesagt schon älter. Es hier darum, das der Callback das richtige Objekt verwendet. Die Routinen sind dafür das man eventuell einen Zugriff auf Komponenten in Fremdprogrammen unter Windows bekommt. Auch damit amn erkennen kann, in welchen Zustand sich ein Fremdprogramm befindet. Ich habe es verwendet um bei einem Messprogramm herauszufinden ob es gestartet ist, ob irgendwelche Abfragen offen sind. Dazu habe ich mir angeshen, welcher Dialog gerade offen ist und dann die entsprechenden Tasten gesendet um das Programm zum Messen zu bewegen. Das wird dann wieder über die Messuhren selbst gesteuert. Nur die Software verwendet eine proprietäres Bluetooth Protokoll, sonst hätte ich mir das ganze nicht auf Windows angetan. Da sind die Routinen entstanden, sie sind nur ein Beispiel wie man zu ein paar Infos von Fremdprogrammen kommen kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

thhz
Beiträge: 3
Registriert: So 27. Feb 2022, 21:55

Re: Lazarus und Fremdprogramm

Beitrag von thhz »

Hallo,

habe die Unit entsprechend angepasst, es funktioniert,
die Kompilierung läuft durch.

Vielen Dank

Gruß
Thomas

Antworten