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

Beiträge von BugFix

  • Textersetzer Script fertigstellen mit Gegenleistung

    • BugFix
    • 15. Mai 2014 um 09:31

    Kanashius:

    Das Hochzählen und Überwachen der Variable $UnZipTime mittels AdlibRegister kannst du dir ersparen. Das geht eleganter mit einer Static-Variablen:

    Spoiler anzeigen
    [autoit]

    ;~ global $UnZipTime=0

    [/autoit] [autoit][/autoit] [autoit]

    Func Unzip($path,$tempPath=@TempDir)
    Local Static $UnZipTime = 0
    $UnZipTime += 1
    If $UnZipTime = 30 Then
    $UnZipTime = 0
    ProcessClose("7zG.exe")
    Return SetError(1,0,-1)
    EndIf
    ;~ AdlibRegister(observateZip(),1000)
    _7ZipProgress("7zG.exe", $path, $tempPath, false)
    If @error Then Return SetError(2,@error,0) ; Fehler von _7ZipProgress() als @extended-value
    ;~ AdlibUnRegister(observateZip())
    Return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func zip($path,$OutPath)
    $ar=StringSplit($OutPath,".")
    _7ZipProgress($s7ZipEXE, $path, $OutPath, True, $ar[UBound($ar)-1])
    return 1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Func observateZip()
    ;~ $UnZipTime+=1
    ;~ if $UnZipTime=30 then
    ;~ ProcessClose("7zG.exe")
    ;~ endif
    ;~ EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; .....

    [/autoit]


    In der Funktion _7ZipProgress() machst du eine Fehlerbehandlung aber ohne Return ;) - ich nehme an, einfach vergessen.

    Spoiler anzeigen
    [autoit]

    While ProcessExists($iPID)
    $aProcessStats = ProcessGetStats($iPID, 1)
    If $aProcessStats = 0 Then
    ;~ SetError(3, Default, 0) <<<<== so passiert nix ;)
    Return SetError(3, Default, 0) ;<<<<== sicher so gemeint
    EndIf
    Sleep($iUpdateRate)
    WEnd

    [/autoit]
  • Datenbank für Aktenstruktur

    • BugFix
    • 14. Mai 2014 um 21:21

    Vielleicht erfüllt das hier schon deinen Zweck: Listview-Datenbank-Beispiel
    Wenn es richtige DB-Funktionalität haben soll, würde ich aber auf SQLite zurückgreifen.

  • Fenster mit sich ändernden Namen auf zweiten Monitor schieben

    • BugFix
    • 13. Mai 2014 um 16:43

    Schau dir mal mit dem AutoIt-Window-InfoTool das Fenster genau an. Ist evtl. die CLASS auslesbar? Dann kannst du dir den Zugriff über den Titel schenken und die CLASS verwenden. Ansonsten kannst du mit der Option "WinTitleMatchMode" festlegen, dass auch Teile des Fenstertitels zur Erkennung genügen. Ich vermute ein Teil des Fensternamens wird immer identisch sein.

  • Dictionary übergeben ByRef Problem

    • BugFix
    • 13. Mai 2014 um 16:36

    Ich kann das Problem nicht reproduzieren. Ein Kopieren eines Dictionary in eine andere Variable funktioniert tadellos:

    [autoit]


    $oDict = ObjCreate("Scripting.Dictionary")

    [/autoit][autoit][/autoit][autoit]

    $oDict.Add('A',1)
    $oDict.Add('B',2)
    $oDict.Add('C',3)
    $oDict.Add('D',4)

    [/autoit][autoit][/autoit][autoit]

    $oDictCopy = $oDict

    [/autoit][autoit][/autoit][autoit]

    For $k in $oDictCopy.Keys
    ConsoleWrite($k & @TAB & $oDictCopy.Item($k) & @LF)
    Next

    [/autoit][autoit][/autoit][autoit]

    #cs -- OUTPUT
    A 1
    B 2
    C 3
    D 4
    #ce

    [/autoit]
  • Indoor Beamer Kühlung

    • BugFix
    • 12. Mai 2014 um 14:36

    Ich würde kalte Luft ansaugen lassen. Wenn du die Lüftung in ein geschlossenes System bekommst, kannst du die warme Luft zusätzlich auch ausblasen.
    Nur warme Luft rausblasen ist wenig effektiv, wenn das System offen ist. Dann würdest du die gesamte Raumluft bewegen (müssen), sind etliche Kubikmeter.
    Besser über einen dezidierten Querschnitt kalte Luft ansaugen und direkt dem Gerät zuführen. Die anschließend erwärmte Luft eignet sich im Winter gut als Zusatzheizung :D -- im Sommer schwitzt du dann halt etwas mehr :)

  • MSSQL 2008 Abfrage = keine Ergebnisse, bzw. kein Update

    • BugFix
    • 12. Mai 2014 um 10:58
    Zitat von Kanashius

    Ich bin mir nicht sicher, aber versuchs mal ohne das ; am Ende. Bei Sqlite wird das auch nicht benötigt.


    Es ist niemals verkehrt, eine Sequenz mit dem Semikolon zu terminieren. Zu einem Fehler führt das nicht. Unerheblich ob es "gebraucht" wird (wenn mehr als ein Befehl ausgeführt wird, ist es sowieso zwingend), ist es einfach auch guter Stil Befehlsfolgen immer zu terminieren.

  • Indoor Beamer Kühlung

    • BugFix
    • 12. Mai 2014 um 10:27

    Kennst du die Abluftkanäle für Küchen/Bad/WC? Sind aus Plastik meist rechteckiger Querschnitt (ca. 6x10 cm), gibt es aber auch in Schlauchform.
    Holt euch sowas als Frischluftzufuhr. Eine Seite direkt an die Gebäudeaussenwand/-Tür mit 'nem groben Staubfilter vor (den ihr dann aber auch regelmäßig säubert ;)) und an der anderen Seite steht der Beamer und saugt seine Luft, evtl. noch einen Lüfter zum besseren Ansaugen in den Kanal.
    Dann sollten Überhitzungen passé sein.

  • Word Löschen bestimmter Zeilen

    • BugFix
    • 12. Mai 2014 um 10:18

    Wie ich das sehe, verwendest du als variable Daten Adressen. Da ist es doch günstiger, wenn du dein Dokument auch mit entsprechenden Datenfeldern ausstattest. Dann kannst du die Datenfelder direkt setzen ohne Suchen & Ersetzen.
    Wenn du sowas noch nicht gemacht hast - schau dir in Word die Serienbrief-Funktion an und lass das mal mit dem Wizzard ausführen. Das sollte beim Verständnis helfen.

  • SQLite db auslesen

    • BugFix
    • 11. Mai 2014 um 20:22

    Wäre mir neu, dass SQL-Datenbanken (egal welcher Dialekt) numerische Datenfelder in Stringsortierung ausgeben.

  • SQLiteMore.au3

    • BugFix
    • 11. Mai 2014 um 10:55

    Neue Funktionen, INSERT überarbeitet.
    s. Startpost

  • Excel Höhe und Breite Text Box bestimmen

    • BugFix
    • 2. Mai 2014 um 21:19

    Kleiner Nachtrag:

    Wenn du deine Objekte elegant an den Zellen ausrichten möchtest, kannst du das so tun:

    Spoiler anzeigen
    [autoit]

    $oForm = $oExcel.ActiveSheet.OLEObjects.Add("Forms.TextBox.1")
    With $oForm
    .Left=$oExcel.ActiveSheet.Range("D10").Left ; Ausrichtung an linkem Rand von "D10"
    .Top=$oExcel.ActiveSheet.Range("D10").Top ; Ausrichtung an oberem Rand von "D10"
    .Width=90.75
    .Height=15.75
    .Link=False
    .DisplayAsIcon=False
    .Select
    EndWith

    [/autoit]
  • Excel Höhe und Breite Text Box bestimmen

    • BugFix
    • 2. Mai 2014 um 18:13

    Wenn du mehrere OLE-Objekte hinzufügst, musst du diese aber dann direkt ansprechen:

    Spoiler anzeigen
    [autoit]

    $oForm = $oExcel.ActiveSheet.OLEObjects.Add("Forms.TextBox.1")
    With $oForm
    .Left=399.75
    .Top=259.5
    .Width=90.75
    .Height=15.75
    .Link=False
    .DisplayAsIcon=False
    .Select
    EndWith

    [/autoit]
  • Excel Höhe und Breite Text Box bestimmen

    • BugFix
    • 2. Mai 2014 um 18:00

    Du mußt die Parameter auf die erstellte Box anwenden.
    Die Zellauswahl ist übrigens ohne Nutzen, die Box wird an der übergebenen Position fixiert, völlig egal ob da E10 oder A5 ist. ;)

    [autoit]

    $oExcel.ActiveSheet.OLEObjects.Add("Forms.TextBox.1")
    With $oExcel.ActiveSheet.OLEObjects
    .Left=399.75
    .Top=259.5
    .Width=90.75
    .Height=15.75
    .Link=False
    .DisplayAsIcon=False
    .Select
    EndWith

    [/autoit]
  • Word - Inhalt der Kopfzeile bearbeiten

    • BugFix
    • 2. Mai 2014 um 10:16

    Suchen & Ersetzen geht mit Standardfunktion ausschließlich im Body.
    Um im gesamten Dokument (Header, Footer, Textfeld, etc. pp.) zu Suchen & Ersetzen mußt du durch alle Bestandteile des Dokuments iterieren und darauf Suchen&Ersetzen anwenden.
    Wie es geht, ist hier beschrieben.

    Der Einfachheit halber würde ich das auch als Makro erstellen und nur das Makro aus AutoIt heraus aufrufen (mit Übergabe Such-/ Ersetztext). Denn dieser VBA-Code enthält in der Sub "SearchAndReplaceInStory" die Zeile
    .Execute Replace:=wdReplaceAll
    Das blaue ist der Problemteil. Die MSDN-Beschreibung zu Range.Find.Execute läßt offen, welches die Defaultwerte sind. Wenn ich in AutoIt diese Methode aufrufe, muß ich alle Parameter übergeben (VBA braucht nur den/die gewünschten angeben). Deshalb brauche ich die Standardwerte.
    Aber das könnte man sicher auch hinfrickeln. Probier einfach mal.

  • Word - Inhalt der Kopfzeile bearbeiten

    • BugFix
    • 1. Mai 2014 um 19:05

    Ja klar ersetzt du die kpl. Kopfzeile, ist doch der einfachste Weg:
    - Kopfzeile alt auslesen
    - wie gewollt zu neuer Kopfzeile ändern
    - Kopfzeile neu schreiben

  • AuPDF - PDF Dateien direkt aus AutoIt erstellen

    • BugFix
    • 30. April 2014 um 23:10

    Gefällt mir. 8o

    Ließe sich auch eine tabellenartige Struktur generieren?
    Hintergrund: Ich habe eine Rechnungs-Software geschrieben, die Daten zum Druck aus einer SQLite-DB bezieht. Bisher schreibe ich diese Daten aus der DB in eine formatierte Excel-Tabelle, und drucke diese über einen PDF-Printer in eine PDF-Datei. Wenn ich mir den Schritt mit dem Excel sparen könnte, wäre das natürlich viel eleganter.
    Der Rechnungsaufbau ist wie üblich (Firmenkopf; Adressfeld; Feld mit Datum/Sachbearbeiter etc.; Zeile mit RE-Nr.; tabellarisch: Lieferungen/Leistungen, Anzahl, Netto, Brutto; Zahlungsinformationen; Fußzeile mit Konto- u. Steuerinfo).
    Es sind also etwas fixer Text und fest positionierte Felder, die mit wechselnden Inhalten versorgt werden müssen. Könnte AuPDF das stemmen?

  • Website-Check - Ein kleines Tool für Windows

    • BugFix
    • 30. April 2014 um 19:44
    Zitat von chesstiger

    Naja. Mein PC ist auch online, und per Ping erreichbar... Trotzdem läuft nicht zwangsläufig ein HTTP-Server.


    Das ist Haarspalterei. Du wirst ja wohl nicht versuchen dich mit einem Host zu verbinden, auf dem gar kein http-Server läuft. (..obwohl, chess - dir traue ich so manches zu :whistling: )

  • Website-Check - Ein kleines Tool für Windows

    • BugFix
    • 30. April 2014 um 19:19

    Bischen viel Aufwand um die Verfügbarkeit einer Website zu prüfen - und zu umständlich. Kennst du den Befehl Ping?
    Kannst den Host per Inputbox eingeben, braucht keine extra GUI.

    Spoiler anzeigen
    [autoit]

    $host = 'http://www.autoit.de'
    $ping = Ping($host)
    If @error Then
    $sError = 'unbekannter Fehler'
    Switch @error
    Case 1
    $sError = 'Host ist offline'
    Case 2
    $sError = 'Host nicht erreichbar'
    Case 3
    $sError = 'Falsche Adresse'
    EndSwitch
    MsgBox(0, 'Fehler', $sError)
    Else
    MsgBox(0, 'OK', 'Website ist online')
    EndIf

    [/autoit]
  • CSV (Zeilen) parsen mit korrektem Handling von escaping

    • BugFix
    • 28. April 2014 um 22:24
    Zitat von hausl78

    - in der Zeile fehlte das local vorher

    ..schreib es rein :whistling:

    Leere Felder matchen - das muß ich mal anschauen. Aber heute nicht mehr.

  • CSV (Zeilen) parsen mit korrektem Handling von escaping

    • BugFix
    • 28. April 2014 um 21:06

    Das ist kein Problem, dazu muß man halt das Ergebnisarray einmal durchlaufen. Ich habe das gleich mal integriert.

    _CSV_SplitLine()
    [autoit]

    $string = 'Peter;[Paul; the Best];Mary;Coca-Cola;[Beer; dark];Lemon'

    [/autoit] [autoit][/autoit] [autoit]

    $aSplit = _CSV_SplitLine($string, '[]')
    For $i = 1 To $aSplit[0]
    ConsoleWrite($aSplit[$i] & @CRLF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;===================================================================================================
    ; Function Name....: _CSV_SplitLine
    ; Description......: Splits a csv-line into field values
    ; Parameter(s).....: $_sLine The line from csv-file
    ; .....optional....: $_sEdge Characters are enclosed with the fields that contain a delimiter. Default: '"'
    ; .................: By using two chars (opening and closing, i.e. <..>) commit them in a string without any other char (i.e. "<>")
    ; .....optional....: $_fDeleteEdge Deletes after parsing the the edging characters if any. Default: True (delete them)
    ; .....optional....: $_sSeparator The csv-separator character. Default: ';'
    ; Return Value(s)..: Success: Array with one field value in each item, count of item at $a[0]
    ; .................: Failure: 0 set @error=1 (no match)
    ; Author...........: BugFix ([email='AutoIt@bug-fix.info'][/email])
    ;===================================================================================================
    Func _CSV_SplitLine($_sLine, $_sEdge='"', $_fDeleteEdge=True, $_sSeparator=';')
    Local $sEdgePre = $_sEdge, $sEdgePost = $_sEdge, $iMatches
    If StringLen($_sEdge) = 2 Then
    $sEdgePre = StringLeft($_sEdge, 1)
    $sEdgePost = StringRight($_sEdge, 1)
    EndIf
    If StringInStr('\.^$|[({*+?#', $sEdgePre) Then $sEdgePre = '\' & $sEdgePre
    If StringInStr('\.^$|[({*+?#', $sEdgePost) Then $sEdgePost = '\' & $sEdgePost
    If StringInStr('\.^$|[({*+?#', $_sSeparator) Then $_sSeparator = '\' & $_sSeparator
    Local $sPattern = $sEdgePre & '[^' & $_sSeparator & ']*' & $_sSeparator & '[^' & $_sSeparator & ']*' & $sEdgePost & '|[^' & $_sSeparator & ']+'
    $aMatch = StringRegExp($_sLine, $sPattern, 3)
    If @error Then Return SetError(1,0,0)
    $iMatches = UBound($aMatch)
    Local $aRet[$iMatches+1] = [$iMatches]
    For $i = 0 To $iMatches -1
    If $_fDeleteEdge Then
    $aRet[$i+1] = StringRegExpReplace($aMatch[$i], $sEdgePre & '([^' & $_sSeparator & ']*' & $_sSeparator & '[^' & $_sSeparator & ']*)' & $sEdgePost, '$1')
    Else
    $aRet[$i+1] = $aMatch[$i]
    EndIf
    Next
    Return $aRet
    EndFunc ;==>_CSV_SplitLine

    [/autoit]

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™