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. Bitnugger

Beiträge von Bitnugger

  • RegExp: Verschachtelte Block-Kommentare entfernen - Char nicht-in-String ersetzen

    • Bitnugger
    • 2. Juli 2020 um 00:08
    Zitat von Professor Bernd

    Genau so soll es sein, alles richtig! Innerhalb von Quotes soll NICHT ersetzt werden.

    Jeep, habe mein Post bereits korrigiert, weil ich es selbst schon bemerkt hatte... aber du bist ja schneller als die Polizei erlaubt... 8o

  • Logout in AutoIt abfangen?

    • Bitnugger
    • 2. Juli 2020 um 00:05
    Zitat von HansJ54

    Danke, jetzt fehlt mir noch eine Idee, wie ich bei einer GUI unterscheiden kann, ob der User Esc oder das X oben rechts gedrückt hat, da $GUI_EVENT_CLOSE bei beiden = True ist.

    ESC kannst du evtl. mit @HotKeyPressed oder mit Execute('@HotKeyPressed') ermitteln.

    Wenn oben rechts das X gedrückt wurde, bekommst du die Message $GUI_EVENT_CLOSE, und dann kommt es darauf an, wie du darauf reagierst:

    • ExitLoop ? dann ist der Exit-Mode = $EXITCLOSE_NORMAL
    • Exit ? dann ist der Exit-Mode = $EXITCLOSE_BYEXIT

    glaube ich zumindest... 8o

  • RegExp: Verschachtelte Block-Kommentare entfernen - Char nicht-in-String ersetzen

    • Bitnugger
    • 1. Juli 2020 um 23:35
    Zitat von Professor Bernd

    Heißes Teil! Funktioniert soweit. Mal sehen, wie es sich Performance-mäßig schlägt.

    Ja, ist in der Tat ein heißes Teil... könnte man ja noch etwas perverser... so dass alle Keywords von AutoIt... :rofl:

    Zitat von Mars

    Wenn du mit den vielen RegExen fertig bist, kannst du dann eine Art "Sammlung von RegExen zum parsen von AutoIt" veröffentlichen?

    Das kann man sicher für irgendetwas gebrauchen

    Ja, gute Idee... und evtl. auch alle in einem Pack als Zip-Archiv. ;)

  • Logout in AutoIt abfangen?

    • Bitnugger
    • 1. Juli 2020 um 11:45
    Zitat von HansJ54

    Da ich aber sowohl bei normalem Beenden wie auch bei Logoff in die gleiche Terminate-Funktion springe und dort @exitMethod abfrage, bekomme ich bei "normalem" Ende einen Fehler wegen der nicht existierenden @exitMethod (genau verstanden habe ich das allerdings nicht).

    Das Makro @exitMethod in der Terminate-Funktion ist nur dann verfügbar, wenn die Funktion von OnAutoItExitRegister aufgerufen wird und dies passiert nur dann, wenn eine der Exit-Mode-Bedingungen erfüllt ist.

    Springst du von anderer Stelle in diese Funktion, dann gibt es das Makro nicht, weil dann keine der Exit-Mode-Bedingungen erfüllt ist. Anstatt also die Terminate-Funktion direkt aufzurufen, könntest du einfach ein Exit machen, wodurch die Funktion dann auch aufgerufen wird und dann auch das Makro verfügbar ist.

    Testen ob das Makro existiert könnte man z.B. so:

    AutoIt
    OnAutoItExitRegister('_Exit')
    _Exit()
    Exit
    
    Func _Exit()
        Local $vExit = Execute('@exitMethod')
        ConsoleWrite('- $vExit = "' & $vExit & '"' & @CRLF)
        Select
            Case $vExit == ''
                ConsoleWrite('! Das Makro @exitMethod existiert nicht!' & @CRLF)
            Case $vExit = $EXITCLOSE_NORMAL
                ConsoleWrite('> @exitMethod = $EXITCLOSE_NORMAL' & @CRLF)
            Case $vExit = $EXITCLOSE_BYEXIT
                ConsoleWrite('> @exitMethod = $EXITCLOSE_BYEXIT' & @CRLF)
            Case $vExit = $EXITCLOSE_BYCLICK
                ConsoleWrite('> @exitMethod = $EXITCLOSE_BYCLICK' & @CRLF)
            Case $vExit = $EXITCLOSE_BYLOGOFF
                ConsoleWrite('> @exitMethod = $EXITCLOSE_BYLOGOFF' & @CRLF)
            Case $vExit = $EXITCLOSE_BYSHUTDOWN
                ConsoleWrite('> @exitMethod = $EXITCLOSE_BYSHUTDOWN' & @CRLF)
        EndSelect
    EndFunc
    Alles anzeigen

    Das ist mbMn. aber kein guter Programmierstil...

  • GUI am Bildschirm Rand immer sichtbar

    • Bitnugger
    • 29. Juni 2020 um 19:54

    Was du suchst nennt sich AppBar.

    Hier ein kleines Example:

    AutoIt
    ;-- TIME_STAMP   2020-06-29 19:51:01   v 0.1
    
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    Opt("MustDeclareVars", 1)
    
    Global Const $ABE_RIGHT = 2, $ABM_NEW = 0, $ABM_REMOVE = 1, $ABM_SETPOS = 3
    Global $hWnd, $tAppBarData
    
    _Main()
    
    Func _Main()
        ; Create the GUI
        Local $title = StringTrimRight(@ScriptName, 4)
        Local $toolbarWidth = 40
        Local $height = @DesktopHeight-40
        Local $left = @DesktopWidth-$toolbarWidth
        Local $top = 0
        Local $right = @DesktopWidth
        Local $bottom = $height
        $hWnd = GUICreate($title, $toolbarWidth, $height, $left, $top, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW)
        Local $idBtn_1 = GUICtrlCreateButton('Test', 0, 0, 40, 25)
        Local $idBtn_2 = GUICtrlCreateButton('Exit', 0, 25, 40, 25)
        GUISetState()
    
        ; Register the AppBar
        $tAppBarData = DllStructCreate("dword;int;uint;uint;int;int;int;int;int")
        DllStructSetData($tAppBarData, 1, DllStructGetSize($tAppBarData))
        DllStructSetData($tAppBarData, 2, $hWnd)
        DllStructSetData($tAppBarData, 4, $ABE_RIGHT)
        DllStructSetData($tAppBarData, 5, $left)
        DllStructSetData($tAppBarData, 6, $top)
        DllStructSetData($tAppBarData, 7, $right)
        DllStructSetData($tAppBarData, 8, $bottom)
        _SHAppBarMessage($ABM_NEW, $tAppBarData)
        _SHAppBarMessage($ABM_SETPOS, $tAppbarData)
    
        OnAutoItExitRegister('_Exit')
        ; Idle around
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE, $idBtn_2
                    Exit
                Case $idBtn_1
                    GUISetBkColor(Random(0, 0xFFFFFF, 1), $hWnd)
            EndSwitch
        WEnd
    EndFunc
    
    Func _ShAppBarMessage($dwMessage, ByRef $tAppBarData)
        DllCall("shell32.dll", "int", "SHAppBarMessage", "int", $dwMessage, "ptr", DllStructGetPtr($tAppBarData))
    EndFunc
    
    Func _Exit()
        ; Unregister the AppBar
        _SHAppBarMessage($ABM_REMOVE, $tAppBarData)
    
        ; Delete the GUI
        GUIDelete($hWnd)
    EndFunc
    Alles anzeigen
  • Logout in AutoIt abfangen?

    • Bitnugger
    • 29. Juni 2020 um 19:16

    Das kannst du mit OnAutoItExitRegister machen.

  • shell.dll streikt, wenn die Gesamtlänge der Befehlszeile > 270 Zeichen ist.​

    • Bitnugger
    • 29. Juni 2020 um 19:05
    Zitat von Oscar

    Versuch's mal als UNC-Pfad:

    Gute Idee, aber leider nein.

  • shell.dll streikt, wenn die Gesamtlänge der Befehlszeile > 270 Zeichen ist.​

    • Bitnugger
    • 28. Juni 2020 um 22:09

    Da ich mein SciTE auf UTF-8 umgestellt habe, rufe ich via Ownhotkeys ein Script auf, dass mir das Script, das in SciTE im aktuellen Tab angezeigt wird, nach UTF-8 konvertiert.

    Gestern ist mir aufgefallen, dass die shell.dll (File/Product version : 1.5.0.0 / 1.5.0.0), die ich zum Starten des Scripts benutze, das Script nicht findet, wenn der Pfadname länger als 141 Zeichen ist, bzw. die Gesamtlänge der Befehlszeile > 270 Zeichen ist.

    sCmd = "C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /AutoIt3ExecuteScript "f:\AutoIt\AutoIt3_Tools\_ConvertFileToUTF8.au3" "M:\Temp\Test_01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234.au3"

    shell.exec(sCmd) -- funktioniert nicht, weil sCmd > 270 Zeichen!

    sCmd = "C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /AutoIt3ExecuteScript "f:\AutoIt\AutoIt3_Tools\_ConvertFileToUTF8.au3" "M:\Temp\Test_0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123.au3"

    shell.exec(sCmd) -- funktioniert, weil sCmd <= 270 Zeichen!


    Ich habe zwei Versionen der shell.dll, die allerdings beide File/Product version : 1.5.0.0 / 1.5.0.0 haben:

    shell_1.zip 133.120 KB

    shell_2.zip 35.328 KB

    Leider ist der Link zur shell.dll und auch zum Quellcode nicht mehr aktuell... und hier wird auch nur die Version 1.2 angezeigt: https://scite-ru.bitbucket.io/pack/tools/LuaLib/shell.html

    Hat evtl. jemand den Quellcode der shell.dll?

    Dateien

    shell_1.zip 54,48 kB – 637 Downloads shell_2.zip 33,24 kB – 623 Downloads
  • Auslesen, welche geräte sich im WLan befinden

    • Bitnugger
    • 28. Juni 2020 um 19:01

    Ich habe hier zwei Scripts für euch...

    ScanArpCache.au3 - ist von mir und erfordert erhöhte Rechte für das Löschen des Arp-Cache!

    Examples:

    ScanArpCache.exe <MAC-Address>|<HostName>|<IP-Address> [<Wait>]

    ScanArpCache.exe <SubNet> [<Start>] [<End>] [<Wait>]


    arpscan.au3 - erste Version ist von SoulA, hier aber die von mir geänderte Version von dexto und diese erfordert keine erhöhten Rechte!

    Zusätzlich benötigt wird (ist aber alles im Archiv arpscan.zip enthalten):

    winpcapau3.zip - Hiervon wird die winpcap.au3 von arpscan.au3 als include geladen.

    npcap-0.9994.exe - Packet capture library for Windows - um (ARP-)Pakete mitlesen zu können, muss installiert werden, damit arpscan.au3 funktioniert.

    Alle nötigen Links sind in arpscan.au3 enthalten.

    PS: Habe winpcap.au3 entpackt und ein paar Zeilen geändert, das Archiv winpcapau3.zip ist aber original.

    Examples:

    arpscan.exe 192.168.1.1

    arpscan.exe 192.168.1.1-192.168.1.10

    Zitat von AspirinJunkie

    Und so ne Schleife über alle IPs ist auch in AutoIt schnell gebastelt - nur halt unheimlich langsam.

    In ScanArpCache.au3 habe ich das so gelöst:

    AutoIt
    ; Sorgt dafür, dass die angepingten IPs inkl. MAC im ARP-Cache landen, wenn das Gerät erreichbar ist.
    Func _PingSubNet($sSubNet, $iStart = 1, $iEnd = 254, $iWait = 0)
        RunWait(@ComSpec & StringFormat(' /C FOR /L %%L IN (%i,1,%i) DO @ping >nul -4 -n 1 -w %i %s.%%L', $iStart, $iEnd, $iWait, $sSubNet), '', @SW_HIDE)
    EndFunc   ;==>_PingSubNet

    Dateien

    ScanArpCache.zip 455,83 kB – 585 Downloads arpscan.zip 1,26 MB – 521 Downloads
  • Auslesen, welche geräte sich im WLan befinden

    • Bitnugger
    • 26. Juni 2020 um 16:27
    Zitat von AspirinJunkie

    Bist du sicher?

    Ziemlich...

    arp -a Zeigt aktuelle ARP-Einträge durch Abfrage der Protokoll-Daten an.

    Zitat von AspirinJunkie

    Arp-Cache löschen: arp -d

    arp -d funktioniert nicht ohne einen zweiten Parameter.

    So...

    arp -d Inet-Adr.

    oder so...

    arp -d *


    Aktuelle Einträge (arp -a) zu löschen macht wenig Sinn, da sich diese bei der nächsten Abfrage mit arp -a (ohne vorheriges Ping) wieder im Cache befinden.

    Zitat von AspirinJunkie

    Ein Ping auf die Broadcast-Adresse des Subnetzes

    Das wäre natürlich sehr bequem, doch leider mit hoher Wahrscheinlichkeit nicht erfolgreich... ein Ping an jeden Host im Subnetz zu senden, ist sicherer.

  • Quellcode und Links aus dem Chrome Browser auslesen

    • Bitnugger
    • 21. Juni 2020 um 04:40
    Zitat von Faultier_1982

    Ich hatte ja das Gefühl, dass "_WD_Loadwait($sSession)" nicht funktioniert...

    Kontrolliere doch einfach, was _WD_Loadwait zurückgibt:

    AutoIt
    Local $hTimer = TimerInit()
    Local $iLoadWait = _WD_Loadwait($sSession)
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $iLoadWait --> " & $iLoadWait & @LF & "!@ " & @TAB & "#Error: " & @error & @LF) ; 1 (Success)
    ConsoleWrite('! ********************************************************* DiffTime --> ' & TimerDiff($hTimer) & @CRLF) ; 16.6406 ms
  • If-Abfrage mit mehreren OR funktioniert nicht

    • Bitnugger
    • 20. Juni 2020 um 15:32
    Zitat von Musashi

    Ob And aber (in AutoIt) eine höhere Priorität als Or besitzt, da bin ich mir nicht so sicher.

    Laut Operatoren liegen sie auf der gleichen Prioritätsebene.

    Code
    Wenn mehr als ein Operator in einem Ausdruck verwendet werden, bestimmt die Operatorpriorität die Reihenfolge der Verwendung. Die Priorität, die in AutoIt verwendet wird, ist weiter unten aufgelistet. Wenn zwei Operatoren die gleiche Priorität besitzen, wird der Ausdruck von links nach rechts ausgewertet.
    
    Von der höchsten zur niedrigsten Priorität:
    
    NOT
        ^
        * /
        + -
        &
        < > <= >= = <> ==
        And Or
    Alles anzeigen

    And und Or haben also dieselbe Priorität...

    Zitat von Faultier_1982

    ist es also zu betrachten wie in der Mathematik Punkt vor Strich Klammer zuerst? In diesem Fall And vor Or Klammer zuerst?

    Ja, genau wie in der Mathematik... nur musst du in AutoIt die Regeln beachten, die für die Operatoren festgelegt wurden und mit runden Klammern kannst du erzwingen, dass die darin enthaltenen Ausdrücke vorrangig ausgewertet werden.

  • Diskussionen etc. zu Snippets

    • Bitnugger
    • 20. Juni 2020 um 15:09

    Und proc GetProcessByPID wird nicht verwendet...

    Sehr schön!

  • IE.au3- Internet Explorer - _IEAction: Spreadshirt.de/designs: Klick auf Button ohne bekannten Namen oder ID

    • Bitnugger
    • 19. Juni 2020 um 09:54
    Zitat von Bernd Albrecht

    Mein akteuelles Problem dabei ist, das ich gerade nicht wirklich weis, wie ich auf die Buttons auf der Seite: spreadshirt.de/designs klicken soll, da mir die "Element untersuchen" keinen Namen oder keine ID ausgibt.

    Dann solltest du dir evtl. mal das web developer addon für Firefox oder Chrome installieren..

    spreadshirt_de.png  spreadshirt_de2.png

  • Java Script aus autoit

    • Bitnugger
    • 19. Juni 2020 um 09:26
    Zitat von doja121

    Local $iRc = Run( $javarun )

    Versuche es mal so:

    AutoIt
    Local $Bildchen       = 'Bildchen.jpg'
    Local $Gesamt         = 'Gesamt.txt'
    
    Local $javarun
    $javarun = "java -jar \\nas2\bs\Netzteam\RSASofttoken\TokenConverter.jar \\nas2\bs\Netzteam\RSASofttoken\SDTID\" & $Gesamt & " -ios -qr -o \\nas2\bs\Netzteam\RSASofttoken\QRCode\" & $Bildchen
    ConsoleWrite("$javarun --> " & $javarun & @LF)
    ; $javarun --> java -jar \\nas2\bs\Netzteam\RSASofttoken\TokenConverter.jar \\nas2\bs\Netzteam\RSASofttoken\SDTID\Gesamt.txt -ios -qr -o \\nas2\bs\Netzteam\RSASofttoken\QRCode\Bildchen.jpg
    
    ; Bei sehr langen Befehlszeilen mache ich es auch gerne so...
    Local $TokenConverter = '\\nas2\bs\Netzteam\RSASofttoken\TokenConverter.jar'
    Local $SDTID          = '\\nas2\bs\Netzteam\RSASofttoken\SDTID\' & $Gesamt
    Local $QRCode         = '\\nas2\bs\Netzteam\RSASofttoken\QRCode\' & $Bildchen
    $javarun       = StringFormat('java -jar "%s" "%s" -ios -qr -o "%s"', $TokenConverter, $SDTID, $QRCode)
    ConsoleWrite("$javarun --> " & $javarun & @LF)
    ; $javarun --> java -jar "\\nas2\bs\Netzteam\RSASofttoken\TokenConverter.jar" "\\nas2\bs\Netzteam\RSASofttoken\SDTID\Gesamt.txt" -ios -qr -o "\\nas2\bs\Netzteam\RSASofttoken\QRCode\Bildchen.jpg"
    
    ; Local $iPID = Run(@ComSpec & " /c " & $javarun) ; /C  Führt den Befehl in der Zeichenfolge aus und endet dann.
    Local $iPID = Run(@ComSpec & " /k " & $javarun)   ; /K  Führt den Befehl in der Zeichenfolge aus und endet dann nicht.
    Alles anzeigen
  • GetWindowRect liefert Fehler: Ungültiges Window Handle

    • Bitnugger
    • 17. Juni 2020 um 16:06
    Zitat von Oscar

    Und obwohl es quasi der gleiche Datentyp ist, musst Du immer hin- und her casten.

    Und wenn du dann eine Kleinigkeit am Script änderst, noch ein include oder import machst, kannst du dann evtl. auch wieder an zig Stellen Hand anlegen...hatte ich bei deinem BassTest.

    Musste QWORD zu bass.QWORD ändern, weil die Bezeichnung nicht mehr eindeutig war.

    Also das mit der Benutzung der Farben hier mit dem Forumseditor ist ja mega-ätzend... wieso behält der die zuletzt gewählte Farbe krampfhaft bei, obwohl ich sie im Menü abgewählt habe?

  • GetWindowRect liefert Fehler: Ungültiges Window Handle

    • Bitnugger
    • 17. Juni 2020 um 15:32
    Zitat von Oscar

    So geht's:

    Guter Mann! 8o:thumbup:

  • GetWindowRect liefert Fehler: Ungültiges Window Handle

    • Bitnugger
    • 17. Juni 2020 um 15:29
    Zitat von BugFix

    Passiert das bei euch ebenso?

    Jeep... bei mir auch. ;)

    Code
    include winim/[inc\winuser]
    
    var
      h = GetForegroundWindow() 
      lpr: LPRECT
    
    h = sEnumWnd[29].hwnd
    echo "type(h)   = ", type(h)
    echo "type(lpr) = ", type(lpr)
    if IsWindow(h) == windef.TRUE:
      echo "Is Window! -> ", h
      if GetWindowRect(h, lpr) == windef.TRUE:
        echo "Success RECT!"
      else:
        echo "Failure RECT!"
        if GetLastError() == 1400: echo "ERROR_INVALID_WINDOW_HANDLE"
    else:
      echo "Is not a Window!"
    Alles anzeigen
  • Function in einer Schleife laufen lassen, wobei bei jeder Wiederholung die jeweilige Variable sich um einen Wert erhöht

    • Bitnugger
    • 17. Juni 2020 um 15:12
    Zitat von Moombas

    Ihm fehlt sicherlich das "a" und meint spreadshirt.de

    Etwas weiter rechts hat er es richtig geschrieben: Meines Wissens nach wird dieses nicht explicit in den AGB´s von Spreadshirt verboten.

  • Fenster aktivieren

    • Bitnugger
    • 17. Juni 2020 um 14:41
    Zitat von BugFix

    Hier mal meine Variante mit EnumDesktopWindows() - aber ich vertraue den Werten nicht.

    So bekommst du nur die Windows vom primären Desktop/Monitor. Veschiebe ich Notepad++ auf einen anderen Monitor, taucht es nicht mehr in der Liste auf.

    Womöglich sind die Windows von Firefox aber auch Marke Eigenbau...

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™