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

  • markierte Dateien mit der Maus bewegen ?

    • Bitnugger
    • 15. Mai 2020 um 20:15
    Zitat von mm4040

    Also Gut das Programm heißt Tiny Pic und man kann ganz einfach Jpg Bilder in das Fenster von tiny Pic ziehen - dann werden sie gleich komprimiert.

    Ich habe mir das Teil mal angeschaut... und nein, es komprimiert die Bilder nicht, sondern verkleinert sie lediglich! Das kannst du aber locker auch mit GDIPlus machen, womit du dann noch viel mehr Kontrolle darüber hast, wie und was gemacht werden soll. Denn damit kannst du dann nicht nur die Größe selbst bestimmen, sondern auch die Qualität (Anzahl der Farben), und auch diverse Filter (aufhellen, abdunkeln, Farbpalette korrigieren, usw.) auf die Bilder anwenden, und zudem auch den Typ (JPG, PNG, ...) bestimmen, mit dem die Bilder gespeichert werden sollen.

    Zitat von mm4040

    Aber wenn ich lese , das Bitnugger als Poweruser selbt stundenland an so einer Funktion sich probiert hat, dann bin ich ja erleichtert.

    Hehe... ja, wir sind eben alle nicht perfekt... zudem kenne ich aber auch keinen AutoIt-Coder, der sich in allen Bereichen gleichermaßen gut auskennt. Das was ich in Sachen AutoIt weiß und kann, ist quasi eine Schnittmenge von dem, was die Top-Gurus hier und im blauen im Forum zum Besten geben. Da ich aber auch schon ziemlich lange mit AutoIt hantiere (10+ Jahre) und insgesamt 30+ Jahre programmiere (Basic, Assembler, Python und Lua, seit kurzem auch noch Nim), bin ich m.E. doch schon recht gut und schnell darin, mich in unbekannte Themen einzuarbeiten. Was Grafik mit AutoIt angeht, müsste ich aber wohl 96 Jahre alt werden, um UEZ einholen zu können, bei Oscar sind es evtl. 7-22 Jahre weniger. :rofl:

  • PDF Tabellen als Excel/csv exportieren

    • Bitnugger
    • 15. Mai 2020 um 16:02
    Zitat von GerhardSchr

    Wäre es daher möglich mit Autoit das PDF in einer GUI anzuzeigen und den User mittels Linien (Horizontal / Vertikal) den Rahmen der Tabelle einzuzeichnen, und aus diesen Coordinaten dann mittels OCR den Text zu erkennen und als csv/excel zu exportieren?

    Prinzipell ja, mit GDIPlus und Tesseract, aber diese Arbeit würde ich nur jemandem aufdrücken, der Vater und Mutter erschlagen hat. 8o

    https://www.heise.de/download/product/tesseract-ocr

    https://www.autoitscript.com/forum/topic/89…screen-ocr-udf/

    https://tesseract-ocr.github.io/tessdoc/4.0-wi…pha-for-windows

  • Excel Unterschied .xlsx und .csv

    • Bitnugger
    • 15. Mai 2020 um 15:12
    Zitat von BugFix

    Etwas sehr kompliziert, finde ich. Warum so ein String-Konstrukt? Wie wäre es stattdessen mit z.B. Chr(5), kommt im Text zu 100% nicht vor.

    Ja, damit wird es sicher auch keine Probleme geben.

    AutoIt
    Func _CsvTrans($sString)
        Local Static $sChr5 = Chr(5)
        Return StringReplace(StringRegExpReplace(StringStripWS(StringReplace($sString, '""', $sChr5), 3), '^"(.+)"$', '\1'), $sChr5, '"')
    EndFunc
    Zitat von HansJ54

    Macht diese Zeile auch die "klammernden" Anführungszeichen weg, wenn welche da sind? Und Leerzeichen davor und dahinter?

    Ja und ja...

    0.) Return StringReplace(StringRegExpReplace(StringStripWS(StringReplace($sString, '""', $sChr5), 3), '^"(.+)"$', '\1'), $sChr5, '"') 

    1.) .......................................................^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^..................................... ; doppelte Anführungszeichen "" maskieren

    2.) .........................................^^^^^^^^^^^^^^                                     ^^^^................................. ; entfernt Leerzeichen davor und dahinter

    3.) .....................^^^^^^^^^^^^^^^^^^^^                                                       ^^^^^^^^^^^^^^^^^^^.............. ; entfernt "klammernde" Anführungszeichen

    4.) .......^^^^^^^^^^^^^^                                                                                              ^^^^^^^^^^^^^^ ; Maskierung in einfaches Anführungszeichen " wandeln

  • markierte Dateien mit der Maus bewegen ?

    • Bitnugger
    • 15. Mai 2020 um 14:10
    Zitat von mm4040

    Jetzt muss ich diese markierten Dateien aber mit dem Mauszeiger auf ein anderes Fenster ziehen.

    Wieso sendest du die Liste der Dateien nicht direkt aus deinem Script heraus an dieses Fenster?

    Denn die Liste hast du ja eh selbst erstellen müssen, um sie an _WinAPI_ShellOpenFolderAndSelectItems zu übergeben.

    Zitat von mm4040

    Du hat natürlich recht, aber das andere Programm / Fenster erwartet die Daten per Maus / Drag &Drop.

    Wir sind dir garantiert kein bisschen böse, wenn du ein paar Gramm genauer wirst... welches Programm, welches Fenster bzw. Control soll die Liste erhalten?

    Zitat von BugFix

    Ansonsten schau dir mal die _FileDragDrop.au3 an.

    Es ist allerdings sehr empfehlenswert, die Bemerkung zu _MemGlobalFree($pDropFiles) am Ende der Funktion zu beachten.

    Vor einigen Monaten hatte ich mir in stundenlanger Arbeit mühevoll in etwa dieselbe Funktion erstellt, und stolpere dann ein paar Tage später in meinen Archiven über _FileDragDrop... boar, was hab ich mich geärgert! 8o

  • Excel Unterschied .xlsx und .csv

    • Bitnugger
    • 15. Mai 2020 um 03:12
    Zitat von HansJ54

    Return = StringReplace($sRes, '!&=$/&%', '"')

    Hinter Return muss das = weg...

    Hier noch etwas kürzer:

    AutoIt
    Local $Csv = '"fgfgfg""kklk""jjj"'
    ConsoleWrite('-     Original: ' & $Csv & @CRLF)
    ConsoleWrite('> Transcodiert: ' & _CsvTrans($Csv) & @CRLF)
    
    Func _CsvTrans($sString)
        ; doppelte "" ersetzen durch einen String, der sicher nicht vorkommt, hier !&=$/&%
        Local $sRes = StringStripWS(StringReplace($sString, '""', '!&=$/&%'), 3)
        ; falls vorne und hinten " sind - entfernen und !&=$/&% durch " ersetzen
        Return StringReplace(StringRegExpReplace($sRes, '^"(.+)"$', '\1'), '!&=$/&%', '"')
    EndFunc

    Oder als Einzeiler:

    AutoIt
    ; ...
    Func _CsvTrans($sString)
        Return StringReplace(StringRegExpReplace(StringStripWS(StringReplace($sString, '""', '!&=$/&%'), 3), '^"(.+)"$', '\1'), '!&=$/&%', '"')
    EndFunc
  • Name eines Arrays über eine Textvariable an _ArrayDisplay() übergeben

    • Bitnugger
    • 15. Mai 2020 um 02:32

    So geht das...

    AutoIt
    #include <Array.au3>
    
    Local $aArray = [1,2,3]
    Local $sText = "$aArray"
    _ArrayDisplay(Execute($sText), $sText)

    Execute sollte mit äußerster Vorsicht benutzen werden, und auch nur wenn es wirklich gar nicht anders geht... denn damit kann viel Schindluder getrieben werden!

  • Verbindung zum WLAN prüfen

    • Bitnugger
    • 14. Mai 2020 um 23:08

    Einen Thread unter/über deinem findest du die Lösung: Tomtom Navi prüfen ob Netzwerk aktiv ist

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 14. Mai 2020 um 23:02
    Zitat von water

    Den NetConnectioNStatus habe ich nicht im Select -Statement eingebaut, damit er ans Hauptskript zurück gegeben wird und dann dort für die Fehleranalyse verwendet werden kann.

    Ja, ok, das macht Sinn... aber die Prüfung auf ein Objekt vor dem For $objItem In $colItems kannst du dir sparen, denn wenn es kein Objekt ist, wird die Schleife eh nicht durchlaufen...

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 14. Mai 2020 um 22:48
    Zitat von water

    Return & $objItem.NetConnectionStatus

    Jeep, voll erwischt! 8o

    Ähhh, ja, da kannst du es auch so machen:

    AutoIt
    If _TomTomConnected() Then ConsoleWrite("... TomTom ist verbunden ..." & @CRLF)
    
    Func _TomTomConnected()
        Local Static $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20
        Local $colItems = "", $strComputer = "."
        Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\")
        If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter Where Name="TomTom" AND NetConnectionStatus=2', "WQL", _
                $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        For $objItem In $colItems
            Return $objItem.NetConnectionStatus
        Next
        Return SetError(2, 0, 0)
    EndFunc   ;==>_TomTomConnected
    Alles anzeigen
  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 14. Mai 2020 um 20:57
    Zitat von Windi

    Auf C:\Temp ist nichts.

    Habe nur diese Datei in den Editor bekommen.

    Ja, da hat water sich wohl vertan, denn @TempDir liegt in deinem Profilverzeichnis... die Datei findest du ergo hier: C:\Users\Windi\AppData\Local\Temp\Win32_NetworkAdapter.TXT

    Hm, wenn ich mir den Inhalt dieser Datei anschaue, dann sollte der aber so gefunden werden, denn er wird ja darin gelistet:

    Code
    Global $aAdapter
    $aAdapter = _CI_GetNetworkAdapter('.', '2', 'TomTom')

    Hier der relevante Teil:

    TomTom

    AdapterType:

    AdapterTypeId:

    AutoSense:

    Availability: 3

    Caption: [00000013] TomTom

    ConfigManagerErrorCode:

    ConfigManagerUserConfig:

    CreationClassName: Win32_NetworkAdapter

    Description: TomTom

    DeviceID: 13

    ErrorCleared:

    ErrorDescription:

    GUID:

    Index: 13

    InstallDate: // ::

    Installed: True

    InterfaceIndex: 15

    LastErrorCode:

    MACAddress:

    Manufacturer:

    MaxNumberControlled: 0

    MaxSpeed:

    Name: TomTom

    NetConnectionID:

    NetConnectionStatus:

    NetEnabled:

    NetworkAddresses:

    PermanentAddress:

    PhysicalAdapter: False

    PNPDeviceID:

    PowerManagementCapabilities:

    PowerManagementSupported: False

    ProductName: TomTom

    ServiceName:

    Speed:

    Status:

    StatusInfo:

    SystemCreationClassName: Win32_ComputerSystem

    SystemName: DESKTOP-0CN454E

    TimeOfLastReset: 05/14/2020 13:19:08

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 14. Mai 2020 um 17:55
    Zitat von Windi

    Hab da noch was gefunden im Gerätemanager -> Netzwerkadapter wird TomTom angezeigt.

    Dann kannst du ihn mit dieser Funktion finden:

    AutoIt: _CI_GetNetworkAdapter.au3
    ;-- TIME_STAMP   2020-05-14 17:45:33   v 0.1
    
    #include-once
    #include <Debug.au3> ; _DebugArrayDisplay
    
    #cs    Firewall-Regeln für WMI aktivieren, um Anfragen von anderen Rechnern durchzulassen.
        Dafür kann die vordefinierte Regelgruppe in der Windows-Firewall aktivieren werden.
        Sehr einfach geht das mit Hilfe von netsh:
        netsh advfirewall firewall set rule group="Windows-Verwaltungsinstrumentation (WMI)" new enable=yes
    #ce
    
    ; Hier ein paar Bsp.:
    Global $aAdapter
    $aAdapter = _CI_GetNetworkAdapter('.', '2', 'TomTom') ; IP = ?
    
    ;~ $aAdapter = _CI_GetNetworkAdapter()
    ;~ $aAdapter = _CI_GetNetworkAdapter('.', '2', 'Realtek PCIe GbE Family Controller') ; IP = 192.168.178.26
    ;~ $aAdapter = _CI_GetNetworkAdapter('.', '> 0') ; IP = 192.168.178.26
    ;~ $aAdapter = _CI_GetNetworkAdapter('ILLUMINATI') ; IP = 192.168.178.26
    ;~ $aAdapter = _CI_GetNetworkAdapter('Server') ; IP = 192.168.178.31
    ;~ $aAdapter = _CI_GetNetworkAdapter('TRECKSTOR') ; IP = 192.168.178.34
    If @error Or Not UBound($aAdapter) Then Exit ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $aAdapter --> " & $aAdapter & @CRLF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
    _DebugArrayDisplay($aAdapter, '$aAdapter - #Error = ' & @error)
    ;~     ClipPut(_ArrayToString($aAdapter))
    ;~     ShellExecute('mailto:Windi@googlemail.com?subject=_CI_GetNetworkAdapter()&body=' & _ArrayToString($aAdapter))
    
    #cs NetConnectionStatus - UInt16
    
        Qualifiers: CIMTYPE, Description, read, ValueMap, Values
    
        Die Zeichenfolge "NetConnectionStatus" zeigt den Verbindungsstatus des Netzwerkadapters und dem Netzwerk an. Der Wert der Eigenschaft hat die folgenden Bedeutungen:
         0 - Verbindung getrennt
         1 - Verbindung wird hergestellt
         2 - Verbunden
         3 - Verbindung wird getrennt
         4 - Hardware nicht vorhanden
         5 - Hardware deaktiviert
         6 - Hardwarefehler
         7 - Medien ausgeworfen
         8 - Authentifizieren
         9 - Authentifizierung erfolgreich
        10 - Authentifizierung fehlgeschlagen
        11 - Ungültige Adresse
        12 - Anmeldeinformationen erforderlich
    #ce
    Func _CI_GetNetworkAdapter($strComputer = '.', $vNetConnectionStatus = '2', $strName = '') ; oder z.B. '> 0'
        Local $aRet = [['HostName', 'Hersteller', 'Name', 'Adapter-Typ', 'Kennung', 'MAC-Adresse', 'IP-Adresse', 'Subnetzmaske', 'Adresstyp', 'DHCP-Server', 'Lease erhalten', 'Lease läuft ab', 'Speed', 'MaxSpeed', 'Standardgateway', 'NetConnectionStatus']]
        Local Const $aNetConnectionStatus = ['Verbindung getrennt', 'Verbindung wird hergestellt', 'Verbunden', 'Verbindung wird getrennt', 'Hardware nicht vorhanden', 'Hardware deaktiviert', 'Hardwarefehler', 'Medien ausgeworfen', 'Authentifizieren', 'Authentifizierung erfolgreich', 'Authentifizierung fehlgeschlagen', 'Ungültige Adresse', 'Anmeldeinformationen erforderlich']
    ;~     Return
        Local $sComputer = ($strComputer = '.' ? 'localhost' : $strComputer)
        Ping($sComputer, 500)
        If @error Then Return SetError(@error, 1, 'Rechner ' & $sComputer & ' ist nicht erreichbar!')
        Local $x = 0, $objWMIService, $colItems, $colItems2, $iIPAddressCount = 0, $iGatewayCount = 0
        $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
        If Not IsObj($objWMIService) Then Return SetError(@error, 2, 'Fehler bei $objWMIService()!')
        $vNetConnectionStatus = StringRegExpReplace($vNetConnectionStatus, '^(\d{1,2})', ' = \1')
        $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus ' & $vNetConnectionStatus, 'WQL', 0x30)
        If Not IsObj($colItems) Then Return SetError(@error, 3, 'Fehler bei $objWMIService.ExecQuery()')
        For $objItem In $colItems
            If $strName And $strName <> $objItem.Name Then ContinueLoop
            $x += 1
            ReDim $aRet[$x + 1][UBound($aRet, 2)]
            $aRet[$x][1] = $objItem.Manufacturer
            $aRet[$x][2] = $objItem.Name
            $aRet[$x][3] = $objItem.AdapterType
            $aRet[$x][4] = $objItem.NetConnectionID
            $aRet[$x][5] = $objItem.MACAddress
            $aRet[$x][12] = $objItem.Speed ; 1000000000 Bits/s / 1e+6 = 1000 Mbit/s
            $aRet[$x][13] = $objItem.MaxSpeed
            $aRet[$x][15] = $aNetConnectionStatus[$objItem.NetConnectionStatus]
            $colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
            If IsObj($colItems2) Then
                For $objItem2 In $colItems2
                    If $objItem.Caption = $objItem2.Caption Then
                        If $objItem2.IPEnabled = -1 Then
                            $aRet[$x][0] = $objItem2.DNSHostName(0)
                            $aRet[$x][6] = $objItem2.IPAddress(0)
                            If $aRet[$x][6] Then $iIPAddressCount += 1
                            $aRet[$x][7] = $objItem2.IPSubnet(0)
                            If $objItem2.DHCPEnabled = -1 Then
                                $aRet[$x][8] = 'von DHCP zugewiesen'
                                $aRet[$x][9] = $objItem2.DHCPServer
                                $aRet[$x][10] = _WMIDateStringToDate($objItem2.DHCPLeaseObtained)
                                $aRet[$x][11] = _WMIDateStringToDate($objItem2.DHCPLeaseExpires)
                            Else
                                $aRet[$x][7] = 'Manuell konfiguriert'
                            EndIf
                            $aRet[$x][14] = $objItem2.DefaultIPGateway(0)
                            If $aRet[$x][14] Then $iGatewayCount += 1
                        EndIf
                    EndIf
                Next
            EndIf
        Next
        If UBound($aRet) < 2 Or Not $iIPAddressCount Or Not $iGatewayCount Then
            If $strName Then
                Return SetError(-1, 4, 'Kein Adapter mit dem Namen "' & $strName & '" und NetConnectionStatus "' & $vNetConnectionStatus & '" gefunden! $iIPAddressCount = ' & $iIPAddressCount & ' $iGatewayCount = ' & $iGatewayCount)
            Else
                Return SetError(-1, 4, 'Kein Adapter mit NetConnectionStatus "' & $vNetConnectionStatus & '" gefunden! $iIPAddressCount = ' & $iIPAddressCount & ' $iGatewayCount = ' & $iGatewayCount)
            EndIf
        EndIf
        Return $aRet
    EndFunc   ;==>_CI_GetNetworkAdapter
    
    Func _WMIDateStringToDate($dtmDate)
        ; 2019/01/29 15:07:44
        ; $dtmDate = 20190129085216.000000+060
        ; $dtmDate = 20190208085216.000000+060
        Return StringRegExpReplace($dtmDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).+', '\1/\3/\2 \4:\5:\6')
    EndFunc   ;==>_WMIDateStringToDate    
    Alles anzeigen

    _CI_GetNetworkAdapter.jpg

  • RegWrite liefert @error = 1, obwohl RegRead den Wert lesen kann. (Mit Adminrechten)

    • Bitnugger
    • 14. Mai 2020 um 04:21
    Zitat von ProgrammingDonkey

    Wenn ich auf normales HKLM ohne 64-Suffix gehe, kann ich schreiben und danach das dann dort auch lesen, aber das ist nicht der Wert den ich in der Registry sehe, also wird der neu angelegt und hat keine Auswirkung.

    Diesen Wert findest du (in regedit) dann unter HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{ff079292-973b-4628-ad10-b82ebb8c7f80}.

    In regedit kann ich in beiden Zweigen die Werte ändern... mit AutoIt und auch in der Console mit reg add funktioniert es nur in einem Zweig.

    Guckst du hier: https://support.microsoft.com/de-de/help/305…ions-of-windows

    Guckst du hier: https://www.wintotal.de/tipp/wow6432no…betriebssystem/

    Guckst du hier: http://www.planet3dnow.de/artikel/diverses/wow64/2.shtml

  • Signatur von Word nach Outlook übertragen

    • Bitnugger
    • 13. Mai 2020 um 22:53
    Zitat von Musashi

    Es wäre ggf. sinnvoll, diesen Thread nach Hilfe & Unterstützung zu verschieben

    Viel sinnvoller wäre es, den Whisky zu mir zu verschieben...8o

  • Excel.au3 _Excel_RangeRead maximale Textlänge?

    • Bitnugger
    • 13. Mai 2020 um 21:37

    Hier noch ein evtl. brauchbarer Link: Excel Memory Limits

  • AutoIt Script für Multi-Bildschirm Betrieb

    • Bitnugger
    • 13. Mai 2020 um 20:01

    Als Denkanstoß hier noch ein bisschen unzensierten Senf von mir... ;)

    Zitat von PapaPeter

    UDF-Version

    Dann solltest du auch einen originalen UDF-Header benutzen, oder zumindest eine abgespeckte bzw. leicht modifizierte Version.

    Dies hat den Vorteil, dass der CallTip Manager (SciTE Menu Extras -> SciTE Config -> Other Tools -> CallTip Manager) die für den CallTip benötigten Daten dem Header entnehmen kann.

    In SciTE kannst du mit Ctrl+Alt+U einen UDF-Header einfügen, wenn das Caret auf einer Func Zeile steht.

    Zitat von PapaPeter

    MoveToActiveDisplay($ParmWindowTitle [,$ParmWindowText] )

    Anhand der Parameter lässt sich zwar ableiten, was die Funktion macht, schöner wäre aber, wenn sich dies bereits anhand des Funktionsnamen ableiten lassen würde.

    MoveWindowToActiveDisplay($ParmWindowTitle [,$ParmWindowText]) ; Besser, aber nicht wirklich korrekt.

    MoveWindowToDisplayFromMousePos($ParmWindowTitle [,$ParmWindowText]) ; Treffender, weil das Display, auf dem sich die Maus befindet, nicht in-/aktiv, sondern lediglich vorhanden ist.

    Das nur der Titel eines Fenster als Parameter akzeptiert wird, ist auch nicht so schön... ein Window-Handle sollte man schon übergeben können und das kannst du auch sehr einfach lösen. Zudem sollte die Überprüfung der Parameter als erstes abgehandelt werden... und wenn alle ok sind, geht es weiter, anderfalls mit Error zurück.

    AutoIt
    Local $hWnd = 'AutoIt Help (v3.3.14.5)'
    If Not IsHWnd($hWnd) Then $hWnd = WinGetHandle($hWnd)
    If Not IsHWnd($hWnd) Then Return SetError(1, 0, False)
    Zitat von PapaPeter

    WinActivate($ParmWindowTitle, $ParmWindowText) ; Kombination WinActivate/WinWaitActive um sicherzustellen das Fenster schon aufgebaut ist,
    WinWaitActive($ParmWindowTitle, $ParmWindowText, 3) ; und dabei aber maximal 3 Sekunden auf Fenster warten muss

    Gar nicht schön!

    Die Funktion soll das Fenster verschieben, falls nötig, es aber nicht aktivieren oder sonstwie andere Dinge machen! Und was spielt es für eine Rolle, wenn das Fenster noch nicht fertig aufgebaut ist?

    Jetzt könnte man noch fragen, was passiert wenn...

    - das Fenster minimiert ist?

    - der Monitor, auf dem das Fenster verschoben werden soll, kleiner ist und das Fenster nicht darauf passt?

    Variablennamen... schöner wäre, wenn du sie entsprechend des Typs deklarierst... z.B. so:

    $ParmWindowTitle ==>> $sParmWindowTitle ; für Strings ($s... für lokale Variablen (die gibt es nur innerhalb von Funktionen!), $g_s... für globale Variablen

    $MousePos ==>> $aMousePos bzw. $g_aMousePos ; für Arrays

    Hier findest du das Wiki dazu: https://www.autoitscript.com/wiki/Best_coding_practices

    So, wenn du mich jetzt noch mags, bist du es selbst schuld! :rofl:

  • AutoIt Script für Multi-Bildschirm Betrieb

    • Bitnugger
    • 13. Mai 2020 um 16:00
    Zitat von PapaPeter

    If $Debug=1 Then ConsoleWrite(...)

    So kannst du dir das If $Debug=1 Then an zig Stellen sparen:

    AutoIt
    _ConsoleWrite('Dadurch ist der Quellcode nicht nur angenehmer zu lesen, es macht ihn auch deutlich kürzer.' & @CRLF)
    
    Func _ConsoleWrite($sText)
        If $Debug = 1 Then ConsoleWrite($sText)
    EndFunc
  • Kann mein eigenes Programm nicht löschen - von Avira keine Unterstützung...

    • Bitnugger
    • 13. Mai 2020 um 01:52

    Hier noch ein Link, der zum Thema passt: https://www.autoitscript.com/wiki/AutoIt_and_Malware

  • Excel.au3 _Excel_RangeRead maximale Textlänge?

    • Bitnugger
    • 12. Mai 2020 um 23:58

    Hier noch ein Link zu den Spezifikationen und Beschränkungen in Excel

  • Excel.au3 _Excel_RangeRead maximale Textlänge?

    • Bitnugger
    • 12. Mai 2020 um 23:05

    Ich habe das jetzt mal getestet...

    _Excel_RangeWrite kann Strings schreiben, die sogar deutlich länger als 32767 Zeichen sind, _Excel_RangeRead liefert zwar auch ein Ergebnis, wenn der String länger als 32767 Zeichen lang ist, dann werden jedoch nur die ersten 32767 Zeichen gelesen!

    So funktioniert es bei mir:

    _Excel_RangeRead - read a long string (MAX_STRINGLEN = 32767)
    AutoIt
    ;-- TIME_STAMP   2020-05-12 22:52:49   v 0.1
    
    #include <Excel.au3>
    #include <String.au3>
    #include <MsgBoxConstants.au3>
    
    Global $__g_oTemplateCOMErrorHandler = 0
    
    _Example()
    
    ; AutoIT: MAX_STRINGLEN 2,147,483,647 Maximum string length.
    ; Excel: 32767 Maximum string length (_Excel_RangeRead).
    Func _Example()
        ; Entweder diesen... dann auch die letzte Zeile in dieser Funktion aktivieren...
        ;~ Template_COMErrorRegister()
    
        ; ...oder diesen... dann die erste und letzte Zeile in dieser Funktion deaktivieren.
        Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
    
        ; Create application object and create a new workbook
        Local $oExcel = _Excel_Open()
        If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
        Local $oWorkbook = _Excel_BookNew($oExcel)
        If @error Then
            MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the new workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
            _Excel_Close($oExcel)
            Exit
        EndIf
    
        ; Fill a cell in the active sheet in the active workbook with a long string
        Local $sLongString = _StringRepeat('0123456789', Floor(32767 / 10)) & 01234567 ; max. Länge eine Zelle in Excel, die mit _Excel_RangeRead ausgelesen werden kann.
        ConsoleWrite('! StringLen($sLongString) = ' & StringLen($sLongString) & @CRLF)
        _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sLongString, "A1", False)
        If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite A1", "Error writing to worksheet." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    
        _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, 'ShortString', "B1", False)
        If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite B1", "Error writing to worksheet." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
        MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example 4", "Cell successfully filled with a long string.")
    
        ; Read data (a long string) from a single cell on the active sheet of the specified workbook
        ; ******************************************************************************************
    ;~     Local $sResult = _Excel_RangeRead($oWorkbook, Default, "A1") ; So funktioniert es nicht!
        ; ******************************************************************************************
        Local $sResult = _Excel_RangeRead($oWorkbook, Default, "A1", 1, True) ; So funktioniert es!
        If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead A1", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
        ConsoleWrite('> StringLen($sResult) = ' & StringLen($sResult) & @CRLF & $sResult & @CRLF)
        MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead StringLen = 32767", "Data successfully read." & @CRLF & "Value of cell A1: " & $sResult)
    
        $sResult = _Excel_RangeRead($oWorkbook, Default, "B1")
        If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead B1", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
        ConsoleWrite('> $sResult = ' & @CRLF & $sResult & @CRLF)
        MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead StringLen = 11", "Data successfully read." & @CRLF & "Value of cell B1: " & $sResult)
    
        _Excel_Close($oExcel, False)
    
    ;~     Template_COMErrorUnregister()
    EndFunc
    
    Func Template_COMErrorRegister()
        $__g_oTemplateCOMErrorHandler = ObjEvent("AutoIt.Error", "Template_COMErrFunc")
    EndFunc   ;==>Template_COMErrorRegister
    
    Func Template_COMErrorUnregister()
        $__g_oTemplateCOMErrorHandler = 0
    EndFunc   ;==>Template_COMErrorUnregister
    
    Func Template_COMErrFunc()
        ; Do nothing special, just check @error after suspect functions.
    EndFunc   ;==>Template_COMErrFunc
    
    ; User's COM error function. Will be called if COM error occurs
    Func _ErrFunc($oError)
        ; Do anything here.
        ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
                @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
                @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
                @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
                @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
                @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
                @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
                @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
                @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
                @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
    EndFunc   ;==>_ErrFunc
    Alles anzeigen

    Wie hoch das Limit der Stringlänge für _Excel_RangeRead ist, hängt einerseits von der Excel-Version ab und anderseits auch von dem verfügbaren Speicher.

  • Excel.au3 _Excel_RangeRead maximale Textlänge?

    • Bitnugger
    • 12. Mai 2020 um 21:16
    Zitat von HansJ54

    Problem ist nur, dass in meiner Excel-Tabelle ein Eintrag mit 352 Zeichen war und _Excel_RangeRead abgestürzt ist - musste den Wert auf unter 256 kürzen (langen XPath durch kurzen ersetzt) .

    Du meinst sicher, dein Script ist beim Ausführen der Funktion _Excel_RangeRead abgestürzt - dann vermute ich mal, dass du in deinem Script keinen COM-Error-Handler benutzt, der solche Fehler abfängt, denn dann könntest du den Fehlercode abfragen und wärs zumindest einen Schritt weiter. Beispiele dazu, wie man das macht, findest du in der AutoIt-Hilfe bei ObjEvent im Bsp. 1 und Bsp. 2.

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™