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

Beiträge von Andy

  • Dateipfad per StringRegExpReplace verändern

    • Andy
    • 22. September 2014 um 20:20
    Zitat

    Alternativ kann man auch einfache Anführungszeichen verwenden - dort wird Backslash-Anführungszeichen nicht als Sonderfunktion behandelt. (= Verhalten von PHP)

    AspirinJunkie, erstmal danke für die Info, und dann ein fettes FU an die Programmierer, die einen derartigen Schwachsinn in eine FORENSOFTWARE einbauen!
    Jede Wette, wäre dieser Bug in der Software, die denen das monatliche Gehalt aufgrund dessen NICHT überweist, wäre das gequieke nicht mehr auszuhalten, und der Fix innerhalb von MINUTEN draußen! Aber so lange es nur um blöde Forianer geht... ;(

  • Pixelsearch - von unten nach oben?

    • Andy
    • 22. September 2014 um 19:23

    Um übrigens noch etwas zur Frage nach der "Rückwärtssuche" (v. unten n. oben) beizutragen: In der Funktion CreateNewBmp32() wird die BITMAPINFOHEADER-Struct mit der Höhe der Bitmap belegt. Standardmäßig werden Bitmaps "bottom up" (also von unten nach oben) dargestellt!

    [autoit]

    DllStructSetData($tBMI, 3, -$iheight) ;minus =standard = bottomup

    [/autoit]


    Um nun also die Bitmap von unten nach oben zu durchsuchen, muss man nur die Bitmap mit der positiven Höhe erstellen :D

    [autoit]

    DllStructSetData($tBMI, 3, $iheight) ;positiv = top down

    [/autoit]
  • Dateipfad per StringRegExpReplace verändern

    • Andy
    • 22. September 2014 um 18:37
    [autoit]

    $string = 'D:\Schule\DSC\testordner\testdatei.txt'
    $ret=stringtrimleft($string,stringinstr($string,"\DSC"))
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]


    hinter dem DSC ist natürlich auch ein Backslash, welcher von der Forensoftware wieder gefressen wird :cursing:

    Kanashius, was hast du gemacht, dass in deinem Post der Backslash nicht "gefressen" wird, so wie bei den anderen und u.a. auch dem Quote?

  • Doppelter Prozess - Programm startet zwei mal?

    • Andy
    • 21. September 2014 um 17:40

    Hi,

    Zitat

    Andy, zum einen werden die Fenster schneller aufgebaut, aber was noch deutlicher zu sehen ist, ist das Blinken des Cursors im Eingabefeld in meinem Programm. Es ist deutlich langsamer in der 32-Bit-Variante. Das führe ich auf erhöhte I/O zurück.

    Ich kann weder bestätigen, dass die Fenster schneller aufgebaut werden, noch dass die I/O-Rate anders ist!
    Ganz im Gegenteil, I/O ist in beiden Fällen gleich ( nach starten 2.5MB ), während des Progammlaufs ist I/O natürlich Null, da weder etwas geschrieben noch gelesen wird!

  • Doppelter Prozess - Programm startet zwei mal?

    • Andy
    • 20. September 2014 um 20:04
    Zitat von Magma

    Ich möchte die x64-Version benutzen, wegen der besten Performance benutzen.

    Wie kommst du darauf, dass Scripe als x64 compiliert schneller sind?
    Bezieht sich das auf die AutoIt-internen, gewrapperten API-Funktionen? DAS würde ich dann gerne mal sehen!

  • EMail Programm funktioniert seit Scite4Autoit3 nichtmehr

    • Andy
    • 20. September 2014 um 13:28

    Ich denke du hast den Thread im blauen Forum gelesen?

    http://www.autoitscript.com/forum/topic/16…t/#entry1191685

  • EMail Programm funktioniert seit Scite4Autoit3 nichtmehr

    • Andy
    • 20. September 2014 um 13:23

    Wieder mal ein Grund, niemals eine "neue" Version aufzuspielen.
    Bananaware ftl...

  • EMail Programm funktioniert seit Scite4Autoit3 nichtmehr

    • Andy
    • 20. September 2014 um 13:19

    Du scheinst es immer noch nicht zu kapieren^^

    "Alte_was_auch_immer_Scite_Version" Script läuft.
    "Neue_was_auch_immer_Scite_Version" Script läuft nicht.

    Und DU suchst den "Fehler" in AutoIt?
    Das Script ist sowas von uninteressant, SCITE bzw. eines der beim zusammenstellen dazugehörigen Programme wie Tidy o.a. funken dazwischen!
    Poste die 2-3 Zeilen VOR deiner Fehlermeldung, da sollte dann auch stehen, welches Programm den "Fehler" verursacht...

    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\test.au3" /UserParams    
    +>12:58:29 Starting AutoIt3Wrapper v.2.1.4.0 SciTE v.3.3.7.0 ;  Keyboard:00000407  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64    Environment(Language:0407  Keyboard:00000407  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64)
    >Running AU3Check (3.3.10.2)  from:C:\Program Files (x86)\AutoIt3
    +>12:58:29 AU3Check ended.rc:0
    >Running:(3.3.10.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "E:\test.au3"    
    --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
    +>12:58:33 AutoIt3.exe ended.rc:0
    >Exit code: 0    Time: 3.409

    DAS ist die Ausgabe der Console, und nicht nur 2-3 Zeilen davon^^

  • EMail Programm funktioniert seit Scite4Autoit3 nichtmehr

    • Andy
    • 20. September 2014 um 13:02

    Und jetzt?
    Sollen wir uns Gedanken darüber machen, wieso und warum du deine Scite-Version geändert hast?

    Frag die Leute, die dafür verantwortlich sind!

  • drei mal CASE

    • Andy
    • 20. September 2014 um 12:59
    [autoit]

    case 3,10,11

    [/autoit]
  • Pixelsearch - von unten nach oben?

    • Andy
    • 20. September 2014 um 11:15

    Wenn es um einfaches Pixelsuchen auf dem gesamtem Monitorinhalt geht, gibt es ca. doppelt bis 4x so schnelle Varianten im Vergleich zu Pixelsearch.
    Je kleiner die Suchfläche, bspw. ein Fenster, desto schneller die Suche.

    Btw. bei Win7 AERO ausschalten bringt ca. Faktor 3-4 beim Pixelsearch!

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <StructureConstants.au3>
    #AutoIt3Wrapper_UseX64=n

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

    local $ptr,$hbmp
    $DC=_CreateNewBmp32(@DesktopWidth, @DesktopHeight, $ptr, $hbmp)

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

    $t=timerinit()
    $hDC = _WinAPI_GetDC(0)
    _WinAPI_BitBlt($DC,0,0,@DesktopWidth,@DesktopHeight,$hdc,0,0,0xCC0020) ;desktop nach bitmap blitten
    $col=0xFFBAD27C
    $ret=PixelSuchen32($ptr, $col, @DesktopHeight*@DesktopWidth,@DesktopWidth)
    msgbox(0,timerdiff($t),$ret[0] & @crlf & $ret[1])

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

    $col=0xBAD27C
    $t=timerinit()
    $ret=PixelSearch(0,0,@DesktopWidth,@DesktopHeight,$col)
    msgbox(0,timerdiff($t),$ret[0] & @crlf & $ret[1])

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

    Func PixelSuchen32($ptr, $col, $Breite_x_Hoehe,$Breite) ;pointer auf die Bitmap, Farbe und Größe der Bitmap
    $bytecode = "0x8B7C24048B4424088B54240C8B5C241089D1F2AFB80000000083F900741383C10129CA89D0BA00000000F7F3C1E21001D0C3"
    $tCodebuffer = DllStructCreate("byte[" & StringLen($bytecode) / 2 - 1 & "]") ;Speicher für den Bytecode reservieren
    DllStructSetData($tCodebuffer, 1, $bytecode) ;Bytecode in den Speicher schreiben
    $Ret = DllCalladdress( "dword:cdecl", DllStructGetPtr($tCodebuffer), "ptr", $ptr, "int", $col, "int", $Breite_x_Hoehe, "int", $Breite);bytecode aufrufen, rückgabe in a[0], Aufruf IMMER mit 4 Parametern!
    if $ret[0]=0 or @error then return 0 ;Pixel wurde nicht gefunden
    dim $koord[2]
    ;die oberen 16 Bit von EAX enthalten die x-Koordinate, die unteren 16 Bit enthalten die y-koordinate
    $koord[0]=BitShift($ret[0],16) ;x-Koordinate
    $koord[1]=Bitand($ret[0],0x0000FFFF);y-Koordinate
    return $koord
    EndFunc ;==>PixelSuchen32

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

    Func _CreateNewBmp32($iwidth, $iheight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe $HDC und $ptr und handle auf die Bitmapdaten
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $tagBITMAPINFO = ' & $tagBITMAPINFO & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    DllStructSetData($tBMI, 1, DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, 2, $iwidth)
    DllStructSetData($tBMI, 3, -$iheight) ;minus =standard = bottomup
    DllStructSetData($tBMI, 4, 1)
    DllStructSetData($tBMI, 5, 32) ;32 Bit = 4 Bytes => AABBGGRR
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 1, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    ;_arraydisplay($adib)
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

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


    Der ASM-code ist übrigens HIER vorgestellt

    Wenn man den Code näher untersucht stellt man fest, dass 90% der Zeit für das "blitten" des Desktops in die Bitmap drauf geht, das eigentliche suchen des Pixels dauert nur ca. 2-3ms.

    //Edit durch Verwendung von SSE gelingt die Suche unter 1ms!
    "0x8B7C24048B4424088B54240C8B5C241089D1660F6ED8660F62DB660F62DB9090660F6F07660F76C30F50C083C71083E904741D83F80074E80FBCC029CA89D183E90401C189C831D2F7F3C1E21001D0C331C0C3"

  • Alles Gute Gun-Food, Kev & Co.

    • Andy
    • 19. September 2014 um 21:55

    Glücklichen Herzwunsch und alles Gute!
    Haut rein und lasst es richtig krachen!

  • Numerik: Integrale einer eindimensionalen Funktion

    • Andy
    • 19. September 2014 um 18:37

    [Blockierte Grafik: http://gifwelt.info/wp-content/uploads/s-reaktionen-huldigung.gif]
    Sehr fein! Im Zweifelsfall kann man mehrere Funktionen verwenden, um sich genau die "passende" auszusuchen!

  • Ganz einfacher Tonerzeuger

    • Andy
    • 18. September 2014 um 07:18

    Die Links zum Sinuswellengenerator sind HIERund HIER:D

  • Überprüfen ob die Calc-Datei vollständig geladen wurde

    • Andy
    • 17. September 2014 um 13:16

    Aus Gründen der nicht mehr benötigten und auch Seitens Entwicklern nicht beachteten Abwärtskompatibilität wurde _ArrayCreate() aus den neueren AutoItversionen ersatzlos entfernt.....ohne Worte!

    [autoit]

    Func _ArrayCreate($v_0, $v_1 = 0, $v_2 = 0, $v_3 = 0, $v_4 = 0, $v_5 = 0, $v_6 = 0, $v_7 = 0, $v_8 = 0, $v_9 = 0, $v_10 = 0, $v_11 = 0, $v_12 = 0, $v_13 = 0, $v_14 = 0, $v_15 = 0, $v_16 = 0, $v_17 = 0, $v_18 = 0, $v_19 = 0, $v_20 = 0)
    Local $av_Array[21] = [$v_0, $v_1, $v_2, $v_3, $v_4, $v_5, $v_6, $v_7, $v_8, $v_9, $v_10, $v_11, $v_12, $v_13, $v_14, $v_15, $v_16, $v_17, $v_18, $v_19, $v_20]
    ReDim $av_Array[@NumParams]
    Return $av_Array
    EndFunc ;==>_ArrayCreate

    [/autoit]
  • Überprüfen ob die Calc-Datei vollständig geladen wurde

    • Andy
    • 15. September 2014 um 20:43

    Hi,
    Du kannst OpenOffice komplett automatisieren!
    Damit kannst du dir das gesamte Warte- und Send-Gedöns sparen!

    Durch den "Fehler" im Board, wird die Zeile 181 ohne Backslash angezeigt

    [autoit]

    $fname = "file:///" & StringReplace($fname, "", "/")

    [/autoit]


    Daher als Fix sollte man also mit

    [autoit]

    $fname = "file:///" & StringReplace($fname, chr(92), "/")

    [/autoit]

    arbeiten :rolleyes:

  • Tausche Komplettrechner gegen PCIe GraKa

    • Andy
    • 14. September 2014 um 19:18

    Hi,
    habe Bedarf an einem AM2-Board (µatx) incl. nicht allzu großem Gehäuse für einen Zuspieler für einen Fernseher.
    Habe leider keine Info zum Formfaktor deiner Boards gefunden, was soll denn solch eine Kiste kosten?

    Prozessor und RAM habe ich noch, die Graka AMD 6750 brauche ich selbst :D

  • RegEx-Pattern in VBA mit anderer "Logik"?

    • Andy
    • 14. September 2014 um 16:18

    Ja, das verstehe ich, allerdings nicht, wieso ich aus dem Match die Buchstaben als Gruppe selektieren muss um danach diese Gruppe aus dem Match zu entfernen.
    Das ist sicherlich eine "unglückliche" Beschreibung, welche funktioniert.

    Wenn ich nur die Ziffern als Gruppe haben möchte, dann klammere ich diese Ziffern ein und damit ist die Gruppe der ausgewählten Ergebnisse selektiert.

    Natürlich kann ich auch den gesamten Text auswählen und alles per (?= a "ausklammern" , was ich NICHT haben möchte...."logisch" klingt für mich aber anders.

    Zitat

    Dieses "(?<=[a-z])" existiert aber leider nicht in VBS.

    irgendwo habe ich gelesen, dass das VB(A) RegEx kein lookahead (oder wars lookbehind) unterstützt.

  • RegEx-Pattern in VBA mit anderer "Logik"?

    • Andy
    • 14. September 2014 um 15:15
    Zitat von Schumi

    Lt Hilfe:
    (?:Muster) = Entspricht Muster, speichert die Entsprechung jedoch nicht, ...

    ja, damit hatte ich auch schon meine Probleme..."logisch" ist in dem Fall nicht, die Gruppe als nicht matchende Gruppe auszuschließen....di e Beispiele dazu sind derart krude, ich blicke da nicht durch. Wenn ich den Match nicht haben möchte bzw. nicht in einer Gruppe haben möchte, dann suche ich ihn erst garnicht...

    Zitat von AspirinJunkie

    Der einzige wirkliche Unterschied den ich sehe ist, dass man dieses Verhalten in AutoIt über die flag einfacher ändern kann.

    Mit dem Unterschied, dass es keine "offizielle" Funktion RegExp_in_VBA(text,pattern,flags) gibt!
    Lt. Hilfe ist ein Objekt zu erzeugen (nachdem vorher auch die RegEx-"Engine" 5.1 in den Extras ausgewählt und eingebunden wurde), dann die Flags bzw. Parameter nach Gusto und Anforderung zu setzen und dann die Pattern per Execute() auf den Text anzuwenden. So weit auch ok,
    Die Rückgabe erfolgt in einem weiteren Objekt, aus welchem dann, wenn man weiß wonach man sucht, das eigentliche Ergebnis weiter auseinanderklabustert bzw. zusammengesucht werden muss.
    Wenn man die Treffer bzw. Ergebnisse gerne in einem Array hätte, dann muss man diese per FOR ... IN und einem fortgesetzten REDIM dort hinein verfrachten.
    Du hast Recht, "im Prinzip" wie in AutoIt :D

  • RegEx-Pattern in VBA mit anderer "Logik"?

    • Andy
    • 14. September 2014 um 12:20

    Schumi, das ist ja sehr nett, ein RegEx-Generator^^

    Bringt mir nur nichts, denn wie ich die pattern erstelle weiss ich ja. Das Problem waren lediglich die Items in den Submatches, sobald ich nach den Gruppen suche.

    Code
    If m.Item(0).SubMatches.Count > 0 Then
          Dim int1
          int1=m.Item(0).SubMatches.Item(0)
          MsgBox("("+int1+")"+"")
      End If

    jedes Mal die komplette Abfrage zu erstellen ist die Methode, die dafür wohl vorgesehen ist...imho kompletter Schwachsinn, wenn man 99% in einer Funktion RegExp(text,pattern,[parameter]) unterbringen kann!
    Denn wenn ich sowieso 15 Zeilen Code schreiben muss, kann ich das RegEx mit einer Handvoll Stringfunktionen ersetzen, welche wesentlich einfacher zu "verstehen" sind^^

    Wenn es keine Submatches gibt, dann sollen auch keine ins Ergebnis, gibt es welche, dann gehören die dort auch hin! Und nicht etwa "irgendwelche im Pattern enthaltene Matches".
    Ich werde also meine RegEx()-Funktionen so umschreiben müssen, dass wenigstens für die einfachen Pattern auch bei VBA die Ergebnisse ermittelt werden wie im PCRE & Co.

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™