Möglich oder nicht? Zeitwert aus einem Programm im Hintergrund auslesen und in ein neues Script schreiben

  • Das Problem ist, dass die Antwort auf einem anderen Port erfolgt und ich auf diesen nicht zugreifen kann. Der wird nämlich nur geöffnet, wenn ich auch das Modellbahnsteuerungsprogramm dieses Anbieters nutze.

    Zugreifen kannst du jederzeit auf jeden Port... die Frage ist nur, ob du eine Antwort bekommst... gibt es von dem Modellbahnsteuerungsprogramm eine Demo-Version?


    Deshalb ja mein Anliegen die Uhrzeit im Programmfenster abzufragen oder aus dem öffentlichen Datenstrom zu lesen.

    Was in aller Welt ist ein öffentlicher Datenstrom? :/8)

  • Zitat

    Zugreifen kannst du jederzeit auf jeden Port... die Frage ist nur, ob du eine Antwort bekommst...

    Ja aber der Port ist nicht offen

    Zitat

    gibt es von dem Modellbahnsteuerungsprogramm eine Demo-Version?

    Ja, Hier

    Zitat


    Was in aller Welt ist ein öffentlicher Datenstrom? :/

    Die Ausdrucksweise eines Laien für den Datenverkehr auf den dokumentierten offenen Ports;)^^


    Gruß Jörg

  • Hallo zusammen


    Nach langer Zeit mal wieder ein Lebenszeichen von mir. Nein, die versprochene Spende habe ich nicht vergessen. Aber ich bin seit damals krankgeschrieben (keine Corona ;) ) und das Einkommen reicht im Moment hinten und vorne nicht. Aber versprochen ist versprochen. Sobald es geht.


    Zum Projekt:


    Ich habe es aufgegeben, krampfhaft nach einer Softwarelösung zu suchen. Ich habe mir mit dem Output des Lichtprogramms einen binären Zähler gebaut der die Uhrzeiten synchronisiert. Das funktioniert zufriedenstellend.


    Jetzt habe ich aber den Entschluss gefasst, dass das Lichsteuerprogramm auf einen anderen Rechner zieht, da es die Lichteffekte softwareseitig gestaltet, was eine gewisse Rechenlast erzeugt. Der Rechner ist nicht langsam aber zusammen mit dem Steuerprogramm einer Modellbahn entsteht doch eine gewisse Latenz die ich nicht brauchen kann.


    Für dieses neue Projekt bräuchte ich mal wieder eure Hilfe. Und zwar hatte ich das Lichtsteuerprogramm und QLC+ per Autohotkey mit Mausklicks und Tastenbefehlen lokal bedient. Die einzelnen Lichtpunkte oder Gruppen oder die gewünschte Zeit/Zeitfaktor per UDP zu schalten ist kein Problem. Dafür brauche ich nur die IP des neuen Rechners in die vielen Scripte schreiben. Leider ist das Lichtsteuerprogramm nicht sauber programmiert, so dass die UDP-Befehle für Start/Stop oder Edit nicht zuverlässig ausgeführt werden. Dafür nehme ich die Hotkey-Scripte. QLC+ lässt sich zwar über eine Web-API steuern aber hier habe ich über Details (Kommandos) leider keine Kenntnis. Im dortigen Forum konnte mir auch keiner helfen. Deshalb auch hier simulierte Mausklicks und Hotkeys für die Presets.


    So, jetzt mein Anliegen: Ich hatte erst vor, mit lokalen Scripts Remote-Mausklicks und Tastaturaufrufe durchzuführen. Nach meinen bisherigen Recherchen dürfte das schwierig werden, besonders bei den Mausklicks. Daher dachte ich mir, dass ich meine Autohotkey-Scripte erst mal in AutoIt-Sripte umwandle und diese auch compiliere und damit auf den anderen Rechner ziehen. Dann bräuchte ich nur noch per lokalem Script die auf dem Remoterechner liegenden Scripte aufrufen.

    Die Betonung liegt auf "Nur". Ich habe nämlich keine Ahnung wie man das macht. Könnt ihr mir helfen?

    Einfach ausgedrückt, ich suche einen Remote Programmaufruf. Mir würde schon ein Link auf Lesestoff reichen. Leider finde ich über die Suche keine entsprechenden Beispiele oder UDF`s.


    Danke und Gruß

    Jörg

  • Ok, danke. Ich hätte vielleicht noch schreiben sollen, dass ich den Programmaufruf mit Hilfe eines AutoIt-Scripts durchführen möchte. Noch ein Programm in der Kette will ich eigentlich vermeiden.

    Ein einfaches Beispiel würde mir schon reichen. Bitte nicht falsch verstehen, ich möchte hier nichts serviert bekommen aber immer, wenn ich versuche mich irgendwo einzulesen, werde ich von den vielen Sonderzeichen ganz kirre und verstehe am Ende nur Bahnhof. Ich bin eher der Techniker und leider auch schon lange keine Zwanzig mehr aber das Enkelchen freut sich immer über die vielen Lichter :klatschen: . Aber wenn ich das alles händisch steuern soll, würde ich nur am Computer sitzen. Jetzt versteht er noch nicht, wie das alles wie von Zauberhand funktioniert aber wer weiß, in vielleicht 8 Jahren programmiert er mir was vor ^^ .

  • Noch ein Programm in der Kette will ich eigentlich vermeiden.

    Verstehe dich... und auch ich bin mittlerweile 3x 20... aber mit AutoIt wüßte ich nicht, wie man das lösen kann, ohne dass auf dem Zielrechner ein Script ständig im Hintergrund läuft, dass man dann z.B. via UDP/TCP ansprechen kann, damit es ein Script startet - psexec ist dafür wirklich die optimale Lösung.

  • Verdammt, das war's mit dem Altersbonus ;( . Du bist echt schon sechzig? Respekt! Ich hätte die Community auf Mitte 30 geschätzt. So kann man sich irren 8| !

    Zum Thema: Wenn das Script auf dem Zielrechner nicht allzu viel Last erzeugt wäre ein Dauerlauf kein Problem. Kann man den wenigstens psexec über ein Script starten oder müsste ich dann Batchdateien erstellen?

    Ich werde mich mal mit dem Programm befassen um schonmal die Remotegeschichte auszuprobieren. Vielleicht bekomme ich es ja hin. Danke schon mal.

  • Verdammt, das war's mit dem Altersbonus ;( .

    Den gibt es hier eh erst ab 80 und auch nur in Begleitung der Eltern. 8o Der Durchschnitt mag wohl bei 30 liegen, aber wir haben hier auch User, die schon über 80 sind!


    Wenn das Script auf dem Zielrechner nicht allzu viel Last erzeugt wäre ein Dauerlauf kein Problem.

    Das würde keine spürbare Last erzeugen, aber so musst du immer an zwei Stellen ein Auge haben und bei Anpassungen evtl. an beiden Scripten Änderungen vornehmen. psexec muss nicht auf den Zielrechnern installiert sein und ja, psexec kannst du wie auch alle anderen Programme via AutoIt mit Run(...) oder RunWait(...) starten.


    Hier ein Bsp.:

  • Den gibt es hier eh erst ab 80 und auch nur in Begleitung der Eltern. 8o Der Durchschnitt mag wohl bei 30 liegen, aber wir haben hier auch User, die schon über 80 sind!

    Jetzt bin ich aber echt Baff. =O

    Das würde keine spürbare Last erzeugen, aber so musst du immer an zwei Stellen ein Auge haben und bei Anpassungen evtl. an beiden Scripten Änderungen vornehmen. psexec muss nicht auf den Zielrechnern installiert sein und ja, psexec kannst du wie auch alle anderen Programme via AutoIt mit Run(...) oder RunWait(...) starten.

    Ok, das klingt vielversprechend. Danke, dass Du Dir mit dem Script soviel Mühe gegeben hast. Nun muß ich ja wohl auf das Pferd setzen :) . Allerdings bereitet mir psexec echt Kopfzerbrechen. Ich habe heute stundenlang probiert, bin aber zu keinem Ergebnis gekommen. Selbst die Beispiele funtionieren nicht. Ich habe Zugriff auf den Rechner und die Kommandozeile läuft ohne Fehlermeldung durch. Es wird auch kurz Traffic angezeigt aber das Programm auf dem Zweitrechner (ein kompiliertes Autoit-Script) startet nicht. Lokal funktioniert es aber (mit Administratorrechten). Ich nutze auf beiden Rechnern das selbe Konto. Ich habe es sowohl mit der 32bit als auch der 64bit Version versucht, als Administrator ausgeführt, aber es tut sich nichts. Muß ich, außer Freigaben am Zielrechner noch irgendetwas konfigurieren? Oder liegt es daran, daß ich nur die Home-Version von Windows 10 habe? Die soll ja mächtig beschnitten sein, gegenüber den vorherigen Home Premium Varianten die ich hatte (Vista, Win7). Firewall hatte ich testweise auch mal aus. Verbunden sind die Rechner im LAN mit fester IP über einen Switch.

    Hast Du noch einen Tip für mich?

  • mikush

    Ich hatte mal in einem Netzwerk irgendwelche Rechteprobleme und es war mir zu blöd da meine Zeit zu verschwenden. Ich habe eine recht simple Lösung gefunden, da der Zugriff auf Freigaben funktionierte:

    Auf dem PC, wo ein Programm gestartet werden soll, dümpelt ein AutoIt Skript und prüft jede Sekunde ob eine Datei "start.txt" in der Freigabe existiert. Wenn ja - lokal das gewünschte Programm starten und die Datei wieder löschen. Du musst also vom Remote PC nur diese Datei in die Freigabe schreiben.

    Das erspart das Gefrickel mit Client-Server Konstrukten und funktioniert problemlos.


    [OT]

    Dieses Jahr trete ich auch dem Club der "60" bei. 8o

    [/OT]

  • Selbst die Beispiele funtionieren nicht.

    Wenn du die an den entsprechenden Stellen nicht angepasst hast, kann es das auch nicht: Benutzername, Passwort und die zu startende Anwendung (inkl. Pfad).

    Was bekommst du denn an Ausgabe von den Beispielen?


    Lokal funktioniert es aber (mit Administratorrechten).

    Ohne Administratorrechte funktioniert es nicht? Dann muss du das AutoIt-Script natürlich auch mit administrativen Rechten starten oder RunAs(...) benutzen.


    Wenn ich nicht weiß, welcher Fehler aufgetreten ist, kann ich dir auch nicht sagen, was da falsch läuft... du lieferst ja keine brauchbaren Infos und auch kein Script. Zumindest die Zeile mit dem Run() solltest du uns zeigen...


    Oder liegt es daran, daß ich nur die Home-Version von Windows 10 habe?

    Das heißt nicht Home-Version, sondern Home-Edition... und nein, damit hat es nichts zu tun.


    Das ist oftmals der Fehler:

    Resolve "Access is Denied" using PSExec with a Local Admin Account

    • Open RegEdit on your remote server.
    • Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System.
    • Add a new DWORD value called LocalAccountTokenFilterPolicy.
    • Set its value to 1.
    • Reboot your remove server.
  • Oh Mann, noch so'n alter Knacker :D Jetzt kann ich meine Wissenslosigkeit nicht mehr auf's Alter schieben :/ Da habt ihr mich eiskalt erwischt. Nun denn, Deinen Tip werde ich im Hinterkopf behalten. Danke

    Wenn du die an den entsprechenden Stellen nicht angepasst hast, kann es das auch nicht: Benutzername, Passwort und die zu startende Anwendung (inkl. Pfad).

    Was bekommst du denn an Ausgabe von den Beispielen?

    Natürlich habe ich alle Stellen an meine Vorgaben angepasst. Ausgaben bekomme ich nur, wenn ich die Konsole als Administrator öffne: "Zugriff verweigert". Als normaler Benutzer bekomme ich keine Meldungen, es sei denn ich gebe bewusst einen falschen Pfad ein, dann schreibt er "Datei nicht gefunden" Also scheine ich ja zum Zielrechner durchzukommen.

    Ohne Administratorrechte funktioniert es nicht? Dann muss du das AutoIt-Script natürlich auch mit administrativen Rechten starten oder RunAs(...) benutzen.


    Wenn ich nicht weiß, welcher Fehler aufgetreten ist, kann ich dir auch nicht sagen, was da falsch läuft... du lieferst ja keine brauchbaren Infos und auch kein Script. Zumindest die Zeile mit dem Run() solltest du uns zeigen...

    Soweit bin ich doch noch gar nicht. Ich versuche immer noch ein Programm über psexec zu starten. Aber selbst die Beispiele von der Programmseite funktionieren nicht und auch ohne Meldungen. Ich denke mal, Dein Hinweis auf den Registrierungseintrag könnte hier helfen. Schau'n mer mal. Jetzt sage ich erstmal, Gute Nacht ,euch allen.

  • Hallo Leute, musste erst mal Möbel aufbauen, das kann ich wenigstens :)

    Zitat von Bitnugger

    Das ist oftmals der Fehler:

    Resolve "Access is Denied" using PSExec with a Local Admin Account

    • Open RegEdit on your remote server.
    • Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System.
    • Add a new DWORD value called LocalAccountTokenFilterPolicy.
    • Set its value to 1.
    • Reboot your remove server.

    Das war schon mal der Schlüssel zum Eintritt, danke. Also ich kann jetzt per psexec auf den Rechner zugreifen und das Skript wird gestartet. Allerdings hebt es nur das Programm in den Vordergrund und führt aber die Mausklicks nicht aus. Lokal funktioniert es. Was ich mit psexec tun kann, ist den Firewallport zur Harware zu öffnen oder zu schließen. Das haut hin. Aber ist es normal, dass der psexecsvc jedesmal neu eingerichtet werden muß? Dadurch dauert die Ausführung der Befehle ziemlich lange. Das ist nicht das, was ich wollte. Ich bräuchte die Ausführung schon fast in Echtzeit. Wenn sich das nicht ändern lässt, wäre psexec damit raus. Dein Script funktioniert eigentlich auch, allerdings musste ich die Syntax zum Programmaufruf ändern und zwar so, wie es auf der Microsoftseite beschrieben ist. Vorher gings nicht.


    mikush

    Ich hatte mal in einem Netzwerk irgendwelche Rechteprobleme und es war mir zu blöd da meine Zeit zu verschwenden. Ich habe eine recht simple Lösung gefunden, da der Zugriff auf Freigaben funktionierte:

    Auf dem PC, wo ein Programm gestartet werden soll, dümpelt ein AutoIt Skript und prüft jede Sekunde ob eine Datei "start.txt" in der Freigabe existiert. Wenn ja - lokal das gewünschte Programm starten und die Datei wieder löschen. Du musst also vom Remote PC nur diese Datei in die Freigabe schreiben.

    Das erspart das Gefrickel mit Client-Server Konstrukten und funktioniert problemlos.

    Könntest Du mir ein Beispiel schreiben mit allgemeinen Parametern, welches ich mir dann apassen kann? Vielleicht für 2 Programmstarts, damit ich sehe, wie die Hirarchie aufgebaut sein muss. Ich brauche noch mehr Programmstarts. Wie es gesteuert wird verstehe ich schon aber ich habe keine Ahnung, wie das Script aufgebaut sein muß. Aber nur, wenn Du möchtest. Das Script, um die Datei in die Freigabe zu schreiben, versuche ich mal selbst aufzubauen. Danke euch.

  • Könntest Du mir ein Beispiel schreiben mit allgemeinen Parametern, welches ich mir dann apassen kann? Vielleicht für 2 Programmstarts, damit ich sehe, wie die Hirarchie aufgebaut sein muss.

    Ist wirklich einfach:

    AutoIt
    ;===================================================================
    ; vom Remote-PC 
    ; zum Start P1
    FileWrite("\\PC1\Run\P1.txt")
    
    ; zum Start P2
    FileWrite("\\PC1\Run\P2.txt")
  • Zitat von Bugfix

    Ist wirklich einfach:

    Wenn man es kann, ja :D


    Ich danke Dir vielmals, ich werde es morgen anpassen und ausprobieren. Die Funktion habe ich schon mal verstanden. Aber so etwas zu schreiben ist, für mich, zu hoch. Du hast ja sogar schon ein Script für die lokale Seite geschrieben. Herzlichen Dank dafür. Wie gesagt, ich kann es nur mit einer Spende für's Forum wieder gut machen, sobald ich kann. Aber sie kommt - versprochen.

  • So Leute, es funktioniert perfekt :klatschen: . Genauso hatte ich es mir vorgestellt :party: . Vielen, vielen Dank. <3 <3 <3


    BugFix


    Das Script zum Schreiben der Textdateien hat leider nicht funktioniert. SciTE meckerte immer beim zweiten Apostroph irgendwas von falscher Anzahl von Args an. Das soll aber nicht als Kritik verstanden werden, nur als Hinweis.

    Ich habe mir dann so geholfen, indem ich eine Start.txt in einem Unterordner der Freigabe erstellt habe, welche ich dann, mit Hilfe von Batchdateien, in die Freigabe mit dem entsprechenden Namen der *.txt kopiere. Dann startet das jeweilige Programm. Die Batches habe ich nach dem jeweils zu startenden Programm benannt, so behalte ich den Überblick. Diese Dateien lassen sich direkt aus meinem Modellbahnprogramm starten. So habe ich eine direkte Steuerung der Lichttechnik zusammen mit den anderen Scripts, welche die Uhrzeit steuern und synchronisieren (per UDP) und

    das Lichtprogramm kann jetzt den Prozessor auf dem anderen Rechner für sich allein verschwenden, ohne dass man es beim Fahrbetrieb mit der Bahn merkt. Keine Latenzen mehr. Perfekt :klatschen: .


    Bei den UDP-Scripts musste ich ja (nur 8| ) in 240 Dateien die IP-Adresse anpassen. Geholfen hat mir dabei der Batch Text Replacer, damit konnte ich mehrere Dateien gleichzeitig, per "Suchen und Ersetzen", abändern. War eine enorme Arbeitserleichterung. Leider hat mir die Testversion die Scripte wegen des Wasserzeichens versaut, weshalb ich die Vollversion erwerben musste, aber die 40,-€ waren es mir wert.

    Falls es jemand nicht kennt und so eine Funktion sucht, dachte ich, ich schreib's mal an.


    Mein Dank geht auch an Bitnugger, auch wenn PsExec, in diesem Fall, nicht zielführend war. Die Ausführung dauert einfach zu lang. Trotzdem danke, vielleicht kann man es für spätere Aufgaben nutzen.


    So long.

  • Das Script zum Schreiben der Textdateien hat leider nicht funktioniert. SciTE meckerte immer beim zweiten Apostroph irgendwas von falscher Anzahl von Args an.

    Oops, na klar. Habe das "On The Fly" runtergeschrieben ohne Syntaxtest. Es fehlt natürlich das WAS zu schreiben ist, ist hier dann wumpe und kann ein Leerstring sein. ;)

  • Bei den UDP-Scripts musste ich ja (nur 8| ) in 240 Dateien die IP-Adresse anpassen. Geholfen hat mir dabei der Batch Text Replacer, damit konnte ich mehrere Dateien gleichzeitig, per "Suchen und Ersetzen", abändern. War eine enorme Arbeitserleichterung. Leider hat mir die Testversion die Scripte wegen des Wasserzeichens versaut, weshalb ich die Vollversion erwerben musste, aber die 40,-€ waren es mir wert.

    Falls es jemand nicht kennt und so eine Funktion sucht, dachte ich, ich schreib's mal an.

    Das geht aber auch rel. einfach mit AutoIt...


    Hier mal ein Bsp. ($sFilePath musst du anpassen!):