PID finden vom Prozess, gestartet durch Autoit

  • Hallo AutoItler,

    1. gibt es eine andere Moeglichkeit als ProzessList um an die PID eines Prozesses zu gelangen ?
    2. und dann an die Speichergroesse ueber PID im RAM ermitteln ?

    Anmerkung: Programm starte ich ueber ObjCreate im Modus visible = false, habe aber nebenbei noch andere Instanzen von dem Programm am laufen.

    MfG

    - MfG OpaEd

  • Hallo @ApirinJunkie,
    Ich habe Problem mit der Objekterstellung durch ObjCreate, manchmal laeuft mir das Skript weg, also eigentlich aber nur beim ersten Aufruf nach dem Hochfahren.
    Meine Idee ist, das Skript solange zu pausieren, bis das Programm fast ganz im Speicher geladen ist und erst dann anfangen die Methode aufzurufen.

    Das hier hilft mir nicht weiter....
    IsObj kann True sein, aber es koennen Fehler passieren, weil das instanzierte Programm wegen dem Nachladen von Plugins nicht vollstaendig geladen ist.

    Keine Ahnung ob die Idee jetzt sooo sinvoll ist. Andere Idee hatte ich nicht.

    Dein Tip mit ProcessgetStats (PID, 0) ist richtig, danke

    MfG

    - MfG OpaEd

  • Dein Tip mit ProcessgetStats (PID, 0) ist richtig, danke

    Wenn du aber, wie du schriebst, mehrere Instanzen des Programmes hast nützt dir das nicht viel - wie kommst du dann an die Prozeee-ID?
    Eine Möglichkeit wäre per ProcessList() und _WinAPI_GetParentProcess() die Instanz zu finden welche vom AutoIt-Skript gestartet wurde.

    Aber auch so finde ich das bisschen skurril.
    Du rufst es per ObjCreate auf und es öffnet sich mal und mal nicht?

    Um welches Programm handelt es sich denn?

  • An Prozesslist habe ich bereits gedacht und im esten Beitrag erwaehnt.
    Ohjee, nicht das ich mich wieder falsch ausgedruckt habe.
    Also ich habe, so als Beispiel, zwei Prozesse von dem Programm am laufen, da arbeite ich in der Gui, aber ueber Autoit starte ich weitere Instanzen im stillen Modus, hier lauft dann alles automatisiert ueber Autoit ohne Gui.
    Das Programm (Rhino McNeel) wird ohne Probleme ueber den Comaufruf gestartet, nur kommt es halt mal zu Kommunikationsfehlern und eigentlich nur beim ersten Aufruf Edit: und dann nur bei etwas komplexen Dateien.
    Wenn ich eine Objektreferenz zu dem laufenden Prozess erstelle, passiert das nicht !!!

    Und nebenbei, ProcessgetStats gibt mir aber nicht den Wert, der im Taskmanager angezeigt wird.
    ca. 59... K im Taskmanager = ca. 61860000 byte
    ProcessgetStats = ca. 96661000 byte

    - MfG OpaEd

    2 Mal editiert, zuletzt von opaed (30. Juni 2015 um 21:51)

  • Das Programm (Rhino McNeel) wird ohne Probleme ueber den Comaufruf gestartet, nur kommt es halt mal zu Kommunikationsfehlern und eigentlich nur beim ersten Aufruf Edit: und dann nur bei etwas komplexen Dateien.

    Das scheint ein Problem des Programmes zu sein.
    Wenn es dort innerhalb der Com-Schnittstelle keine Methoden gibt den Status abzufragen sehe ich spontan auch nicht viel Möglichkeiten.

    Wenn ich eine Objektreferenz zu dem laufenden Prozess erstelle, passiert das nicht !!!

    Du meinst per ObjGet()?
    Na dann mach es doch stattdessen so.

    Und nebenbei, ProcessgetStats gibt mir aber nicht den Wert, der im Taskmanager angezeigt wird.
    ca. 59... K im Taskmanager = ca. 61860000 byte
    ProcessgetStats = ca. 96661000 byte

    Kommt halt darauf an welchen Wert du haben möchtest.
    Der Taskmanager zeigt den Private Working Set an - den bekommst du z.B. über die _WinAPI_GetProcessMemoryInfo() heraus.

    An Prozesslist habe ich bereits gedacht und im esten Beitrag erwaehnt.

    Aber ebenfalls erwähnt das mehrere Instanzen des Programmes existieren. Aufgrund der knappen Beschreibung musste davon ausgegangen werden, dass das Problem darin besteht die externen und die von AutoIt gestarteten Instanzen auseinander zu halten. Deswegen mein Hinweis ProcessList mit _WinAPI_GetParentProcess() zu kombinieren.

  • Zitat


    Das scheint ein Problem des Programmes zu sein.
    Wenn es dort innerhalb der Com-Schnittstelle keine Methoden gibt den Status abzufragen sehe ich spontan auch nicht viel Möglichkeiten.

    Naja, wie man es sieht, die Methodenaufrufe durch Autoit sind nicht die schnellsten, wenn da nicht alles zu 100% initialisiert ist, gibt es ein Problem.
    Oder rede ich Sc....? Ich bin halt nur ein Laie.

    Zitat

    Du meinst per ObjGet()?
    Na dann mach es doch stattdessen so.

    Anstatt ObjGet gibt es ein anderen Aufrufparameter ueber ObjCreate, dann wird eine Referenz zum laufenden Prozess erzeugt.
    Selbst wenn ich das Programm ueber run starte und dann referenziere, kann das gleiche passieren, oder ?
    Ich moechte es unbedingt ueber die RAM-Groesse probieren ( bin halt ein Dickkopf)

    Zitat


    Kommt halt darauf an welchen Wert du haben möchtest.
    Der Taskmanager zeigt den Private Working Set an - den bekommst du z.B. über die _WinAPI_GetProcessMemoryInfo() heraus.

    Ok wird getestet

    Zitat


    Deswegen mein Hinweis ProcessList mit _WinAPI_GetParentProcess() zu kombinieren.

    Das wusste ich nicht, danke.\
    Na dann habe ich was zu probieren.

    MfG

    - MfG OpaEd

  • Naja, wie man es sieht, die Methodenaufrufe durch Autoit sind nicht die schnellsten, wenn da nicht alles zu 100% initialisiert ist, gibt es ein Problem.

    AutoIt hat hierbei doch so gut wie nichts zu tun.
    Alles was es macht ist eine Instanz des COM-Objektes zu erzeugen. ObjCreate macht da nichts weiter als ein paar Windows-API-Funktionen aufzurufen (ich glaube CoCreateInstance()).

    So wie du es beschreibst stellt aber das Programm jedoch ein Interface schon für externe Prozesse bereit obwohl es selbst noch gar nicht zu voll einsatzbereit ist.
    Da kann AutoIt nicht viel dafür.

    Anstatt ObjGet gibt es ein anderen Aufrufparameter ueber ObjCreate, dann wird eine Referenz zum laufenden Prozess erzeugt.

    Welcher Aufrufparameter?
    War mir bisher unbekannt.
    Mit ObjCreate wird meines Wissens nach immer eine neue Instanz erzeugt.
    Da genau diese Initialisierung jedoch anscheinend dein Problem darstellt wäre ein ObjGet zu einem bereits bestehenden Prozess ein eventueller Ausweg.

  • Zitat

    AutoIt hat hierbei doch so gut wie nichts zu tun.

    Yeep, du hast Recht, habe mir mal was dazu durchgelesen.
    Die Problematik tritt auf auf durch das Laden von Plugin.
    Also ich denke immer noch, es kann doch was bringen darauf zu warten, bis das Programm vollstaendig geladen ist,
    zumal ich noch ein Paar zusaetzliche Plugins installiert habe und da dauert der Start.
    Warum das Problem nicht bei der Refenzierung auftritt ist selbsklaerend, da muss nichts mehr geladen werden.

    Zitat

    Welcher Aufrufparameter?
    War mir bisher unbekannt.
    Mit ObjCreate wird meines Wissens nach immer eine neue Instanz erzeugt.

    Habe dir eine PN mit einer kurzen Info geschickt.


    And CLOSED: Die Idee(meine) war es nicht, hat nichts gebracht, ohne Fehler gehts nur bei einem Sleep(4000 oder 5000) nach ObjCreate.

    - MfG OpaEd

    Einmal editiert, zuletzt von opaed (1. Juli 2015 um 20:54) aus folgendem Grund: Endkommentar