1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. JensSchwartz

Beiträge von JensSchwartz

  • WMI Objekt Methode ausführen (hier: Volume.Dismount)

    • JensSchwartz
    • 10. Februar 2019 um 20:07

    Ah super!

    Vielen Dank!

    Bin eben hierher zurückgekehrt, um den Thread abzuschließen: Hab nämlich ausgiebig direkt in der CMD getestet und die gleichen Ergebnisse erhalten. :)

    Nun weiß ich wenigstens, wo ich das Defizit hab. :)

  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • JensSchwartz
    • 10. Februar 2019 um 19:15

    Voilà - und schon läuft's :)

  • AutoIt Windows Screenshooter v1.84 Build 2019-08-18

    • JensSchwartz
    • 10. Februar 2019 um 18:09

    Hi UEZ,

    eben habe ich mir den Screenshooter heruntergeladen - die Beschreibung hat mich angelockt. :)


    Leider war ich nicht erfolgreich beim Ausführen:

    Erst konnte ein include nicht ausgeführt werden:

    In Zeile 77 wird _GDIPlus_GIFAnim.au3 mit einem absoluten Pfad aufgerufen ;)

    Das konnte ich ja leicht ändern...

    Dann aber registrierte Windows offenbar (einen) Fehler beim gdiplus.dll Aufruf. (s.u.)

    Nachdem Werfault.exe den Fehler "abgefrühstückt" hat, stoppt die Ausführung des Scripts.

    Das Script selbst hat keinen Fehler ausgegeben.

    Getestet unter Windows10 Pro 64bit 10.0.17134 mittels

    AutoIt3_x64.exe, Version: 3.3.14.5 und auch

    compiliert mit der zugehörigen Aut2exe_x64.exe (ohne UPX).

    Für mich ist das gerade nicht tragisch - hab ganz andere Probleme zu lösen. ^^

    Für Dich ist es aber vielleicht interessant, zu wissen?


    Best Regards

    Jens


    Hier die Eventlog-Einträge...

    ===.au3===

    Spoiler anzeigen

    Name der fehlerhaften Anwendung: AutoIt3_x64.exe, Version: 3.3.14.5, Zeitstempel: 0x5aaa71d3

    Name des fehlerhaften Moduls: gdiplus.dll, Version: 10.0.17134.523, Zeitstempel: 0xe1b52ff9

    Ausnahmecode: 0xc0000005

    Fehleroffset: 0x00000000000789b2

    ID des fehlerhaften Prozesses: 0x4a04

    Startzeit der fehlerhaften Anwendung: 0x01d4c15f4e40df6a

    Pfad der fehlerhaften Anwendung: C:\PortableApps\Autoit-v3.3.14.5\AutoIt3_x64.exe

    Pfad des fehlerhaften Moduls: C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.17134.523_none_2c2b90be8af9a424\gdiplus.dll

    Berichtskennung: 9d8c4afd-7616-475d-8024-d8eac8c64ff5

    Vollständiger Name des fehlerhaften Pakets: <leer>

    Anwendungs-ID, die relativ zum fehlerhaften Paket ist: <leer>


    ===.exe===

    Spoiler anzeigen

    Name der fehlerhaften Anwendung: Windows Screenshooter.exe, Version: 1.8.2.0, Zeitstempel: 0x5c6056c1

    Name des fehlerhaften Moduls: gdiplus.dll, Version: 10.0.17134.523, Zeitstempel: 0xe1b52ff9

    Ausnahmecode: 0xc0000005

    Fehleroffset: 0x00000000000789b2

    ID des fehlerhaften Prozesses: 0x170c

    Startzeit der fehlerhaften Anwendung: 0x01d4c161002c7848

    Pfad der fehlerhaften Anwendung: D:\Development\Res\AutoIt Windows Screenshooter v1.82 Build 2018-12-13\Windows Screenshooter.exe

    Pfad des fehlerhaften Moduls: C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.17134.523_none_2c2b90be8af9a424\gdiplus.dll

    Berichtskennung: 2490f8fb-a543-49b4-9d66-8355ad945cd3

    Vollständiger Name des fehlerhaften Pakets: <leer>

    Anwendungs-ID, die relativ zum fehlerhaften Paket ist: <leer>

  • WMI Objekt Methode ausführen (hier: Volume.Dismount)

    • JensSchwartz
    • 10. Februar 2019 um 14:15

    Hallo an Alle,

    momentan versuche ich mich am Ansprechen der WMI via AutoIt.

    Das Auslesen von Informationen klappt schon, nur beim Aufruf von Methoden scheitert es...

    Mein eigentl. Ziel (TriggerSchedule aus \\root\.\ccm PATH sms_client) kann ich gerade mangels Rechner mit SMS Client nicht testen.

    Da hab ich mir einfach eine andere Methode zum Lernen herausgesucht: "Dismount" aus \\.\root\cimv2 Win32_Volume

    Meine Annahme: Wenn ich erst mal das richtige Objekt herausgefischt habe, kann ich mit <Objekt>.<Methode> ( Parameter ) den eigentlichen Call ausführen.

    Mit Dismount klappt das schon mal nicht: Im Log landet der Returnwert "0" was laut Microsoft für diese Methode "success" bedeutet. Nur wird der Datenträger nicht dismounted.

    Das Ganze mit DefragAnalysis durchexerziert ==> hier bekomme ich "3" zurück - also kann der Code nicht total falsch sein, weil er zumindest eine Rückgabe <>0 ins Log schreibt. :) Nur sehe ich keine Aktivität am USB-Stick.

    Also Defrag versucht - spätestens das müsste dann ja zu sehen sein (Blinken am Stick) ==> wieder "3" zurückerhalten ("Volume Dirty Bit Is Set") aber keine Aktivität.

    Auch das Setzen von #RequireAdmin brachte keine Änderung.

    Ich vermute, dass ich etwas grundsätzlich falsch mache/nicht verstanden hab und habe auch nach vielen Stunden keine Erleuchtung beim Studium des Forums oder anderer Netzseiten erlebt.

    Wäret Ihr so nett, mir den nötigen Klapps auf den Hinterkopf zu geben?

    (Ich habe mal ein paar Kommentar-Zeilen drin gelassen, die zeigen, mit was ich so der Reihe nach experimentiert hab...)

    Gruß

    Jens


    Code: wmi_test.au3
    ;#RequireAdmin
    Global $s_LogFile = @ScriptDir & '\' & @ScriptName & '.log'
    
    Local $WMIService = ObjGet('winmgmts:\\.\root\cimv2')
    ;Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume WHERE DriveLetter = "E:\\"')
    ;Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume WHERE Label = "TEST"')
    Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume WHERE Label = "CORSAIR1"')
    ;Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume')
    _WriteLog ('---')
    
    If IsObj($WMIVolumes) Then
        For $Volume In $WMIVolumes
          _WriteLog( '$Volume.Label  ' & $Volume.Label)
          _WriteLog( '    $Volume.DriveLetter  ' & $Volume.DriveLetter)
          _WriteLog( '    $Volume.DriveType    ' & $Volume.DriveType)
          _WriteLog( '    $Volume.DeviceID     ' & $Volume.DeviceID)
          ;#cs
            ;If $Volume.Label = 'TEST' Then              ;  <  SD Card
            If $Volume.Label = 'CORSAIR1' Then           ;  <  USB Stick
                _WriteLog ('---')
                ;Local $Dismount = $Volume.Dismount ( FALSE , FALSE )   ;  <  Force , Persistent
                ;Local $Dismount = $Volume.Dismount ( TRUE , FALSE )    ;  <  Force , Persistent
                ;Local $Dismount = $Volume.Dismount ()
                ;Local $DefragAnalysis = $Volume.DefragAnalysis ()
                ;Local $Defrag = $Volume.Defrag ()
                Local $Defrag = $Volume.Defrag ( TRUE )    ;  <  Force
                ;_WriteLog ( '$Dismount = ' & $Dismount)
                ;_WriteLog ( '$DefragAnalysis = ' & $DefragAnalysis)
                _WriteLog ( '$Defrag = ' & $Defrag)
                _WriteLog ('---')
            EndIf          
          ;#ce
        Next
    _WriteLog ('---')
    EndIf
    
        
        
    ; SECTION: Supporting Functions
    
    
    Func _DateTimeString()
        Local $sDateTimeString = @YEAR & '-' & @MON & '-' & @MDAY & '_' & @HOUR & '-' & @MIN & '-' & @SEC & '_' & @MSEC
        Return ($sDateTimeString)
    EndFunc  ;==>_DateTimeString
    
    
    Func _WriteLog ($s_Entry)
        Local $h_LogFile = FileOpen ( $s_LogFile , 1 )
    
        if $s_Entry = '' Then
            Local $i_Write = FileWriteLine ($h_LogFile , '' )
        ElseIf $s_Entry = '---' Then
            Local $i_Write = FileWriteLine ($h_LogFile , '------------------------------------------------------------------------' )
        ElseIf $s_Entry = '===' Then
            Local $i_Write = FileWriteLine ($h_LogFile , '========================================================================' )
        Else
            Local $i_Write = FileWriteLine ($h_LogFile , _DateTimeString() & '    ' & $s_Entry )
        EndIf
        FileClose($h_LogFile)
    EndFunc  ;==>_WriteLog
    Alles anzeigen
  • Mit IE.au3 auf bereits geöffnete Instanz zugreifen

    • JensSchwartz
    • 20. September 2018 um 22:59

    Vielen Dank schon mal - dann werde ich mich in _IEAttach noch tiefer reinarbeiten und melde mich ggf. mit Detailfragen noch mal. :)


    "Aber warum rufst du den IE nicht direkt aus deinem Skript auf?"

    Der Plan war eigentlich, zu jeder Zeit während man manuell auf der Seite schon hantiert hat, das Script zu starten und dann mit genau der Instanz (also genau dem Object, auch kein neuer Tab mit gleicher URL) automatisiert weiter zu interagieren. Das Script soll also nicht am Anfang des Handlings stehen und z.B. nicht stundenlang unnütz herum-idlen bevor es mal Arbeit bekommt. Außerdem müsste dann ja wohl auch die Browserinstanz offen gehalten werden: Manuelles Schließen und neu Öffnen wäre dann ja auch ein Showstopper, soweit ich es verstehe. :)

    Eines der Anwendungsgebiete, die ich im Auge habe: In einem web-basierten Ticketsystem in einem Rutsch mehrere Änderungen an einem Ticket vorzunehmen - und zwar in dem, dessen Nummer gerade in der Windows Zwischenablage liegt und das in irgend einem Tab bereits geöffnet ist.

    Da dort auch u.a. noch zu speichernder Inhalt in Textfeldern nicht verloren gehen darf, muss ich zwingend genau diesen Browsertap verwenden.

    Und: Ich möchte mehrere "Aktionen" definieren (Script mit GUI & Buttons) - weiß also beim Start des Scripts weder, mit welcher Instanz es arbeiten wird, noch, was es tun wird.

    Ein anderes: Nachdem in einem Spiel eine Aktion bereits läuft, die zum Abschluss später noch ein paar Klicks braucht, soll bei Bedarf das Script diese ausführen.

  • Mit IE.au3 auf bereits geöffnete Instanz zugreifen

    • JensSchwartz
    • 20. September 2018 um 21:40

    Hallo zusammen,

    bin nicht mehr so ganz neu mit AutoIt und trotzdem hab ich folgende Frage nicht selbst beantworten können:

    (Wie) Kann ich IE.au3 auf eine bereits geöffnete Site anwenden.

    Also ohne, dass mit _IECreate('<URL>') erst eine Browser-Instanz erzeugt wird.

    Soweit ich das verstehe, wird mit _IECreate das DOM Objekt "Browser" erzeugt und eben mit der Zuweisung zu einer Variablen nutzbar gemacht.

    Die anderen Funktionen nutzen dan den Objektbaum. Das ist genau, was ich brauche.

    Aber wie - falls überhaupt - kann ich auf das Browser-Ojekt einer bereits geöffneten Instanz zugreifen?

    Mein laienhafter Versuch über WinGetHandle war erfolglos (klar - ein WinHandle ist nun mal kein DOM Objekt).

    Gibt es irgend einen Weg vom einen zum anderen zu kommen, den ich einfach nur noch nicht gefunden habe?

    Mit _IEAttach habe ich es erfolglos versucht:

    _IEAttach( '<TEXT>' , 'windowtitle' ) liefert genauso kein Objekt zurück wie der Weg über den 'url' modus.

    Autoit-v3.3.14.5

    IE 11.285.171340


    Vielen Dank für Euren Rat :)

    der Jens

    P.S.: _IECreate('<URL>') funktioniert zwar, kreiert aber eben eine neue Instanz - unelegant. ^^

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™