Schön, das du deinen Fehler selber gefunden hast ![]()
Beiträge von Moombas
-
-
Japp, habe aber auch gedacht, das ich nicht so schnell eine so einfache Lösung für die Umsetzung der Parameterübergabe in PS finde

-
Kurze Recherche über Google: https://www.krausmueller.de/2015/11/26/powershell-parameter/
-
Ja, du kannst auch an PS-Scripte Parameter übergeben, sofern das PS-Script das auch unterstützt.
Wie das im PS-Skript umgesetzt wird, weiß ich aktuell nicht und soweit ich weiß gibt es da mehrere wege, wie der Übergabe-Parameter dann aussehen muss.
Evtl. ist es einfacher deine Funktion vom PS-Skript in autoit direkt zu bauen!?
-
Die Verwendung von Class/Instance ist auch immer der ID vorzuziehen, da diese bei vielen Programmen dynamisch generiert wird und dadurch bei jedem Programmstart differiert.
Auch wieder etwas gelernt

-
Meine
lag also richtig.Also 2 Möglichkeiten:
1. API ansteuern (https://www.sagecity.com/us/sage100_erp…tion---sage-100), hierbei aber schauen wegen der richtigen Version!
API-Ansteuerung ist nicht gerade mein Steckenpferd aber eigentlich der beste Weg andere Programme zu steuern, wenn sie es bereit stellen.
2. Die Controls per ControlID ansprechen. Diese kannst du z.B. mit der Au3Info.exe bzw. Au3Info_x64.exe die im AutoIt Ordner liegen herausfinden, sofern Sage 100 keine Java-Applikation ist.
Ansteuern lassen diese sich dann mit ControlClick()
Aber ob das dann definitiv funktioniert, wenn du abgemeldet bist, bin ich mir nicht 100%ig sicher.
Edit: Das andere Thema dazu war hier: Autoit läuft Fehlerhaft bei Remote Verbindung über Windows auf einen Windows Root Server; aber fehlerlos über den Browserzugang
Evtl. hilft dir das etwas.
-
Wir haten so ein Thema hier schon einmal.
Es gibt ein Problem mit dem Beenden der aktiven Remote-sitzung, das dann solche Befehle nicht mehr funktionieren.
Da du keinen Code gepostet hast, werfe ich mal einen Blick in meine

Du sprichst die Buttons per MouseClick() an und nicht über die ControlID, richtig?
Hast du die Möglichkeit das zu ändern bzw. hat das Programm ggf. eine API, die man nutzen könnte?
-
Stimmt.
Also hier passt aus meiner Sicht irgendetwas nicht, entweder fehlt etwas beim erstellen oder das Ding ist buggy.
Probier mal, was passiert, wenn du es als Datei liegen hast und dann in ein Obekt umwandelst: https://www.autoitscript.com/forum/topic/14…t-to-an-object/
-
Und was sagt uns, dass dieses "htmlfile"-Objekt der dort dokumentierten API entspricht?
Ich habe bisher keine Schnittstellenbeschreibung zum Objekt selbst gefunden.Wenn man ein Error-Event mit implementiert bekommt man als Fehlermeldung 0x80020006-"Unbekannter Name" - deutet für mich darauf hin, dass das Objekt gar keine Methode querySelector enthält.
Richtig, zumindest nicht an dieser Stelle. Diese Vermutung habe ich bereits in Post #4 geäußert.
Die Doku passt mit meinen Tests zusammen und dort hin gelangt bin ich über Recherche über einen Link von MS.
-
Mit folgendem bekommst du immerhin die einzelnen Zeilen:
$oHtmlDoc.body.innerText bzw. $oHtmlDoc.body.innerHTML
Wie du das dann aber wiederum genauer "Filtern" kannst, weißt du evtl. besser.
Edit:
Ich würde den Elemente, die von dir angesprochen werden müssen eine ID zuweisen. Beispiel: '<H3><EM id="test">Contents lol</EM></H3>'
Dann kannst du sie hiermit direkt ansprechen: $oHtmlDoc.getElementById('test').innerText
Velted und AspirinJunkie
Und zur Doku geht es hierlang: https://www.w3.org/TR/selectors-api/#queryselector
Anbei eine Vermutung:
Wennn ich richtig bin gibt es den "main" tag erst mit html5, evtl. kann das autoit objekt damit nicht umkommen, denn das der main-start-tag im header vor dem schließenden head-tag und vor dem body-tag eingefügt wird, sieht für mich falsch aus (<HEAD><META http-equiv=X-UA-Compatible content=IE=9><MAIN></HEAD>).
Auch wenn man den main-tag später einfügt,landet dieser immer im header.
Verwende daher mal Testweise anstatt dem main tag '<div id="main">'.
Der div tag wird nämlich korrekterweise in den bodytag geschrieben. Eventuell kommst du dann mit dem querySelector weiter.
-
Velted : Zumindest änder es nichts am Ergebnis, wenn auch ich diese Schreibweise verwirrend finde

Also ich erhalte keine Fehlermeldung wenn ich deinen query an das innerHTML hinten dran packe ($oHtmlDoc.documentElement.innerHTML.querySelector), bekomme allerdings immer nur eine leere Ausgabe.
Ich weiß nicht ob dir das hilft aber probieren kann man es ja mal.
-
Wenn die eingesetzten Daten nicht passen, kann es nicht funktionieren.
Zusätzlich zu dem fehlenden schließenden Main Tag (siehe meinen Post #2) ist dein meta tag auch falsch:
Code;deins: $sMeta = "<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">" $sMeta = '<meta http-equiv="X-UA-Compatible" content="IE=9">'zudem scheint das HTML Objekt den queryselector nicht zu kennen. Da ist Aspirins Frage sehr berechtigt.
-
Müsste das zweite Main nicht </Main> sein?
-
Velted: du hast recht. Da merkt man wieder, das ich in Autoit mit GUI nicht ganz so viel mache.
Wichtig ist ggf. einfach immer nur zu wissen wo es steht und die Hilfe zu lesen


casi4712: Du solltest die Daten nur setzen, wenn du keinen Fehler hast, also im "Else" deiner @error Abfrage und stattdessen die Msgbox dort weg lassen.
-
Ich habe dich durchaus verstanden (hoffe ich^^).
Das Prinzip ist das Gleiche wie bei TrayItemSetState:
AutoIt;TrayItemSetState($settings,$TRAY_UNCHECKED) - nur für dich zum Vergleich GUICtrlSetData($idInputPath1, $sFileSelectFolder)https://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm
-
-
So, wie du es bei anderen Sachen auch schon gemacht hast: TrayItemSetState
-
Jopp, sorry war auch ein kleiner Fehler in meiner Vorlage, XD
-
Dateien und auch Dll's, die vom System bereitgestellt werden, liegen ja üblicherweise im Suchpfad (%Path%)... dann gebe ich keinen Pfad an und brauche mir somit keine Gedanken darüber zu machen, wo sie tatsächlich liegt, egal ob x86 oder x64.
Richtig, ich wollte nur Möglichkeiten aufzeigen (besonders 1.) um den Fehler zu finden bzw. wie man ggf. so etwas handhaben kann, wenn %Path% nicht möglich ist bzw. aus diversen Gründen ein absoluter Pfad verwendet werden soll/muss.
-
Die hast du ja schon definiert.
Vorschlag:
Code
Alles anzeigenGlobal $Break = False HotKeySet("{Pause}", "Break") ;... Func Break() $Break = True EndFunc ;... Func Intervall() Global $Timer = TimerInit(), $Diff = 0 While 1 $Diff = TimerDiff($Timer) If $Diff >= $min * 60000 Then ConsoleWrite($Diff / 1000 & @CRLF) $Timer = TimerInit() shot1() shot2() EndIf if $Break then $Break = False ExitLoop Endif Sleep(10) ; so you don't burn up your CPU or use too much of it WEnd EndFunc