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

  • Arrays begrenzt?

    • Andy
    • 8. September 2009 um 17:02

    Hallo,
    ich hatte mit dem Script keine Probleme...allerdings verstehe ich deinen Ansatz nicht?! Wenn man irgendetwas komplexes grafisches machen möchte, dann verwendet man idR auch die dafür vorgesehenen Werkzeuge. Die sind extra dafür gemacht und auch dementsprechend optimiert seitens Geschwindigkeit (dein Script ist eher "schwerfällig" um das mal sehr wohlwollend auszudrücken^^)
    Mit den GDI und GDI+ Befehlen wirst du wesentlich mehr Spass und auch mehr Möglichkeiten haben!
    Dann wirds auch was mit dem "PaintClone"
    ciao
    Andy

  • MouseClick hilfe

    • Andy
    • 8. September 2009 um 15:32

    Hi,
    wenn du auf ein Control "klicken" möchtest, ohne die Maus zu bewegen, bietet sich

    [autoit]

    controlclick()

    [/autoit]

    an.

  • Memory reading (bitte mal rein schauen)

    • Andy
    • 8. September 2009 um 15:07

    Hi,

    Zitat

    Ihr geht zu streng mit um find ich

    Falls du irgendwann mal in der Lage bist, dir mit "ehrlicher Arbeit" ordentlich Geld zu verdienen, und dann kommt jemand und nimmt es dir einfach ab, dann wünsch ich dir jemanden der dir ins Gesicht lacht und auch meint: "Seh das doch nicht so eng! Geh doch einfach den nächsten Monat arbeiten, dann hast du doch wieder welches...."
    Es geht ums Prinzip. Regeln sind dazu da um eingehalten zu werden....sonst bräuchten wir keine!
    ciao
    Andy

  • Umgebungsvariable übergeben

    • Andy
    • 8. September 2009 um 15:00
    Zitat

    wie kann ich ein Top als erledigt abzeichnen?

    im ersten Post editieren

  • Drucken

    • Andy
    • 7. September 2009 um 20:49
    Zitat

    Wie wärs wenn du ein Bsp. mit deiner OpenOffice UDF machst und ich quäle html noch ein bisschen

    Gute Idee^^

  • Drucken

    • Andy
    • 7. September 2009 um 20:18
    Zitat

    Keine Tabellenkalkulation auf dem Pc, keine Druckfunktion.

    Andersrum wird ein Schuh draus, WENN Tabellenkalkulation auf dem PC, DANN sind nahezu alle Möglickeiten der Darstellung der Tabelle möglich, incl Drucken, Diagramme, PDF, XML, und auch ggf HTML^^

    Ich glaube kaum, daß man über eine "einfache" HTML-Tabelle auch nur annähernd die Ausgabemöglichkeiten hat.
    Wäre mal eine Anwendung für meine OpenOffice-UDF :D schöne Idee!

  • Drucken

    • Andy
    • 7. September 2009 um 19:13

    Hi,
    wäre es nicht einfacher die Liste in eine Tabellenkalkulation zu kopieren und von dort aus auszudrucken ?

  • cursor bzw steuerelement, das dem mauszeiger folgt blinkt

    • Andy
    • 7. September 2009 um 18:56

    flackerfrei^^

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GuiOnEventMode", 1)
    TraySetState(2)

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

    $air = GUICreate("test", 301, 401, 344, 203)
    GUISetOnEvent($GUI_EVENT_CLOSE, "exit_")
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\back.bmp", 0, 0, 300, 400)
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\cursor.bmp", 300, 400, 30, 30)
    GUISetState(@SW_SHOW)
    Local $mausaltx = 0, $mausalty = 0

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

    While 1
    If WinActive("test") = 1 Then
    $mausneu = GUIGetCursorInfo() ;mausposition holen
    If $mausaltx <> $mausneu[0] Or $mausalty <> $mausneu[1] Then ;nur wenn maus bewegt wurde
    $mausaltx = $mausneu[0]
    $mausalty = $mausneu[1]
    cursor_()
    EndIf
    EndIf
    WEnd

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

    Func cursor_()
    GUICtrlSetPos($Pic2, $mausneu[0] - 15, $mausneu[1] - 15)
    EndFunc ;==>cursor_

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

    Func exit_()
    Exit
    EndFunc ;==>exit_

    [/autoit]
  • etwas auf einer liste ausgeben

    • Andy
    • 6. September 2009 um 00:42
    [autoit]

    #include <Array.au3>
    $array=stringsplit(inputbox("Passwort","Passwort eingeben:"),"",2)
    $perm=_arraypermute($array)
    _arraydisplay($perm)

    [/autoit]

    gehts kürzer? Wenn es auch nicht genau den Vorgaben entspricht...^^ Aber die eine zusätzliche Zeile sollte er dann doch alleine hinbekommen^^

  • etwas auf einer liste ausgeben

    • Andy
    • 5. September 2009 um 23:09

    Kurzversion

    [autoit]

    #include <Array.au3>
    DIM $array[6]
    for $i=65 to 70
    $array[$i-65]=chr($i)
    next

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

    $perm=_arraypermute($array)
    _arraydisplay($perm)

    [/autoit]
  • etwas auf einer liste ausgeben

    • Andy
    • 5. September 2009 um 22:57
    Zitat

    sag, dass das keine Brute-Force-Attacke wird

    keine Angst ^^, spätestens als ich

    Zitat

    eine grafische liste in der dann alle ausgaben ausgegeben werden

    gelesen habe war mir klar, daß der ultimative Passwortcracker noch etwas auf sich warten lässt....

  • Windows 7 + Makros : laufen nicht !

    • Andy
    • 5. September 2009 um 22:42

    Hi,
    Win7 nutzt ein seltsames System mit virtuellen Ordnern. D.h. es gibt Ordner mit Pfaden, die es so real garnicht gibt. Bin grade am Suchen nach einem Artikel....
    ciao
    Andy

  • Combobox-Inhalt auswählen

    • Andy
    • 5. September 2009 um 19:16

    Hi,
    kein Thema, an dieser Combobox habe ich mir auch die Zähne ausgebissen, nichtmal das hier hat Ergebnisse gebracht...

    [autoit]

    $hwnd = ControlGethandle("Medien öffnen","","QWidget51")
    ;ControlGethandle("title", "text", "classnameNN")
    Global $CB_FINDSTRING = 0x014C
    $i = dllcall("user32.dll","int","SendMessage","hWnd",$hwnd,"int",$CB_FINDSTRING,"int", -1,"str", "DVB")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $i = ' & $i[0] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ControlCommand ("Medien öffnen","", "QWidget51","SetCurrentSelection",$i[0])

    [/autoit]
  • On Error Goto....gibt es so etwas auch in AutoIt?

    • Andy
    • 5. September 2009 um 04:06

    Schnuffel,
    vielen Dank, ich hatte das Script übersehen, solltest du auch mal testen, genau das habe ich gesucht!^^

    BugFix

    Zitat

    Es ist leider so, das ein Skript zu 1/3 aus Programm und zu 2/3 aus Errorhandling besteht, wenn du alle Usergemeinheiten abfangen willst.

    hehe, das bringt mich auf eine Idee für ein µ-It.
    Man schreibt ein Script mit bestimmten Vorgaben an Funktionen und alle anderen "gemeinen" User müssen so viele "Fehler" wie möglich produzieren. Das Script mit den wenigsten "Abstürzen" gewinnt.... :D
    Aber Ernst beiseite, du hast ja völlig Recht. Das Problem ist nur, daß eigentlich jeder Programmierer die "dunklen Stellen" in seinem Code kennt, und nur weil er zu faul ist, stundenlang

    Zitat

    ein mögliches Fehlerszenario zu berücksichtigen

    **wer ist schon so blöd und macht dasunddas?!**, steht nachher irgend ein DAU wie der Ochs vorm Berg und quält die Mädels von der Hotline....

    Alina
    auch sehr schön, aber die Meldung mit der Tastatur gab es bis vor einigen Jahren schon beim Rechnerstart vom BIOS. Damit sich die BIOS-Programmierer nicht dem Gelächter der gesamten Szene aussetzen mussten, haben sie die Meldung entfernt und den Betriebssystemprogrammierern überlassen. Die haben die Meldung dann in ein Fenster gebracht, toller Fortschritt!
    Ganz modern lässt man die Meldung komplett weg und überlässt es dem User herauszufinden, warum die Tastatur nicht oder nur teilweise funktioniert. Ich hätte Batterie-Hersteller werden sollen...für Tastaturen...DAS ist ein Markt mit Zukunft^^

    ciao
    Andy

  • Combobox-Inhalt auswählen

    • Andy
    • 5. September 2009 um 02:52

    Hi,
    das VLC-Script:

    Spoiler anzeigen
    [autoit]

    #include <PtB_ClickBMP.au3>

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

    Opt("WinTitleMatchMode", 2)
    Opt("MouseCoordMode", 0) ;aktives fenster-koordinaten

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

    Run("C:\Programme\VideoLAN\VLC\vlc.exe")
    WinWaitActive("VLC media player")
    WinActivate("VLC media player")
    Sleep(100)
    Send("^c") ;Aufnahmegerät öffnen
    WinWaitActive("Medien öffnen") ;
    MouseClick("left", 400, 80) ;combobox öffnen
    Sleep(100)

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

    ;*************************************************************************************
    ;ab hier wird per Bitmapsuche der Schriftzug in der Dropdownliste der Combobox gesucht
    ;man muss die einzelnen Zeilen durchsuchen, weil
    $bitmap = "searcharea.bmp" ;dateiname suchbild, z.B mit PushTheButton zu erstellen, also die Zeile der Combobox
    $koord = _PtB_clickbmp($bitmap,"Medien öffnen") ;sucht die Koordinaten des Hotspots der Bitmap, d.h. den Schriftzug
    If @error Then MsgBox(0, 0, "Aufnahmemodus konnte nicht eingestellt werden")
    ;ab hier gehts ganz normal weiter
    ;*************************************************************************************

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


    dazu musst du noch meine UDF in deinem AutoIt-INCLUDE-Ordner abspeichern

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GDIPlus.au3>
    #include <GDIPlusConstants.au3>
    #include <ScreenCapture.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include-once

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _PtB_clickBMP
    ; Description ...: searches a Bitmap in the full Screen or in a Window and clicks at the found position of the Bitmap
    ; It is recommended to use the PushTheButton-Program for the creation of the Bitmap
    ; Syntax.........: _PtB_clickBMP($bitmapfile[, $hWin = "FULLSCREEN"])
    ; Parameters ....: $bitmapfile - Name of the Bitmap-File to search for
    ; $hWin - Title/Handle of the window to search in, or "FULLSCREEN"
    ;
    ; Return values .: Success - Array with coordinates of the Mouseclick x=array[0] y=array[1]
    ; - if "FULLSCREEN" then coordinates are absolute screen coordinates
    ; - otherwise relative coords to the active window
    ; Failure - @error is set
    ; Author ........: Andy @ http://www.autoit.de
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......; Yes
    ; ===============================================================================================================================

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

    ;_PtB_findbmp_click klickt mit der linken Maustaste auf eine auf dem Bildschirm oder in einem Fenster gefundene Bitmap
    ;Das Bitmapfile ist eine z.B. von PushTheButton gelieferte Bitmap
    ;Das Windowshandle sollte entweder der Titel oder die ID des Fensters sein bzw Classname, alternativ "FULLSCREEN"
    ;
    ;TODO: wenn vertikale scrollbalken im fenster/fullscreen sind, scrollen erlauben und nur scrollbalken auf bewegung checken

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

    Func _PtB_ClickBMP($bitmapfile, $hWin = "FULLSCREEN") ;rückgabe x- und y-position des gefundenen hotspots in einem array [0]und[1]

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

    Dim $aresult[2] ;return array x- and y-coords
    Local $gefunden = 0, $maxanzahlpixel = 50, $exitflag = 0
    $opt_m=Opt("MouseCoordMode") ;sichern der Optionen, werden am ende der Funktion wieder hergestellt
    $opt_p=Opt("PixelCoordMode")
    $ptbfile = StringTrimRight($bitmapfile, StringLen($bitmapfile) - StringInStr($bitmapfile, ".") + 1) & ".ptb"
    ;im ptbfile sind Parameter für das Suchen der Bitmaps abgelegt
    FileOpen($ptbfile, 1) ;daten lesen
    If @error Then ;fehler beim datenlesen, oder ptb-Datei nicht vorhanden
    If FileExists($bitmapfile) Then ;wenn es aber eine Bitmap gibt, dann kann man auch nur mit der
    $anzahl_bestpixel = 500 ;bitmapsuche suchen
    Else ;wenn es weder Bitmap noch *.ptb-file gibt, fällt die Suche aus^^
    MsgBox(262144+1, "Fehler in Funktion _PtB_ClickBMP()", "Keine Bitmap und keine *.ptb-Datei mit Informationen zur Suche gefunden!" & @CRLF & "Bitte benutzen Sie das Programm PushTheButton, um eine Bitmap zu erzeugen!")
    SetError(1, 0, 1)
    Return -1
    EndIf
    Else ;ansonsten daten aus der *.ptb-Datei einlesen
    $check = FileReadLine($ptbfile, 1) ;pixelchecksum
    $pixel = FileReadLine($ptbfile, 2) ;pixelfarbe in hex RGB
    $anzahl_bestpixel = Number(FileReadLine($ptbfile, 3)) ;niedrigste Anzahl der gesuchten Pixel
    $px = FileReadLine($ptbfile, 4) ;x-Versatz des Hotspots innerhalb des pics
    $py = FileReadLine($ptbfile, 5) ;y-Versatz des Hotspots innerhalb des pics
    $dx = FileReadLine($ptbfile, 6) ;breite in pixel
    $dy = FileReadLine($ptbfile, 7) ;hoehe in pixel
    FileClose($ptbfile)
    EndIf
    If $hwin = "FULLSCREEN" Then
    Opt("PixelCoordmode", 1) ; für Fullscreen setzen
    Opt("MouseCoordMode", 1) ;gesamter screen
    $window_width = @DesktopWidth
    $window_height = @DesktopHeight
    Else
    Opt("PixelCoordmode", 0) ;für lokales Fenster setzen
    Opt("MouseCoordMode", 0) ;aktives Fenster
    $xy = WinGetPos($hwin) ;breite und höhe des Fensters
    $window_width = $xy[2]
    $window_height = $xy[3]
    EndIf

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

    If $anzahl_bestpixel > $maxanzahlpixel Then ;wenn wenige passende farbige pixel auf dem Bildschirm sind...
    ConsoleWrite("Verfahren mit Bitmapsuche gewählt" & @CRLF) ;dann strings suchen (Bitmap2 in Bitmap1 suchen)
    ;If $windowshandle = "FULLSCREEN" Then

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

    $start = TimerInit()
    ;~ Do
    ;~ If $exitflag Then ExitLoop ;esc gedrückt
    ;~ $alt = PixelChecksum(0, 0, $window_width, $window_height) ;bildschirminhalt sichern
    $aresult = _findbmp($hwin, $bitmapfile) ;suchen per stringfunktion in der Bitmap
    ;~ If Not IsArray($aresult) Then ;nicht gefunden
    ;~ Send("{PGDN}");runterscrollen
    ;~ $tooltip = ToolTip("Suche läuft: Scollen...", $window_width / 2, $window_height / 2 + 50)
    ;~ Sleep(200) ;wartezeit, bis gescrollt wurde
    ;~ $neu = PixelChecksum(0, 0, $window_width, $window_height) ;bildschirminhalt nach dem scrollen
    ;~ EndIf
    ;~ Until IsArray($aresult); Or $alt = $neu ;solange bis true oder nicht mehr weiter zu scrollen
    ;~ ToolTip("") ;tooltip löschen
    If IsArray($aresult) Then $gefunden = 1
    Else ;wenn es nur wenige Pixel in der angegebenen Farbe gibt, ist diese Variante mit pixelsearxch schneller
    ConsoleWrite("Verfahren mit Pixelsuche gewählt" & @CRLF)
    ;~ Do
    ;~ $alt = PixelChecksum(0, 0, $window_width, $window_height) ;bildschirminhalt sichern
    Local $x = 0, $y = 0
    While 1
    $pix = PixelSearch($x, $y, $window_width, $window_height, Dec($pixel)) ;pixelfarbe suchen
    If @error Or $exitflag Then ExitLoop ;nicht gefunden oder esc gedrückt, dann pagedown
    ;msgbox(0,"pix gefunden an",$pix[0]&" "&$pix[1])
    While 1
    $x = $pix[0] ;x- und y-koordinaten des gefundenen pixels (hotspot)
    $y = $pix[1]
    $prozent = ($y * $window_width + $x) * 100 / $window_width / $window_height
    $tooltip = ToolTip(StringFormat("Suche läuft : %.0f%%", $prozent), $window_width / 2, $window_height / 2)
    Local $p1x = $x - $px, $p1y = $y - $py ;umrechnen der hotspotkoordinaten für checksum
    Local $p2x = $p1x + $dx - 1, $p2y = $p1y + $dy - 1
    ; msgbox(0,"pixel mit farbe "&$pixel,$p1x&" "&$p1y&@crlf&$p2x&" "&$p2y&@crlf&PixelChecksum($p1x,$p1y,$p2x,$p2y))
    If PixelChecksum($p1x, $p1y, $p2x, $p2y) = $check Then ;wenn pixelchecksum gleich der gespeicherten pixelchecksum ist, dann gefunden
    $gefunden = 1
    $aresult[0] = $x
    $aresult[1] = $y
    ExitLoop
    EndIf
    $x += 1 ;ein pixel weiter in der zeile
    $pix = PixelSearch($x, $y, $window_width, $y, Dec($pixel)) ;pixel suchen
    If @error Or $exitflag Then ExitLoop ;wenn in der zeile kein pixel mehr, dann raus
    WEnd
    If $gefunden = 1 Then ExitLoop
    $x = 0 ;neue spalte
    ;msgbox(0,"nächste zeile",0)
    $y += 1 ;neue zeile
    WEnd
    ;~ If $exitflag Or $gefunden = 1 Then ExitLoop ;esc gedrückt oder gefunden
    ;~ Send("{PGDN}") ;runterscrollen
    ;~ $tooltip = ToolTip("Suche läuft: Scollen...", $window_width / 2, $window_height / 2)
    ;~ Sleep(200)
    ;~ $neu = PixelChecksum(200, 200, $window_width, $window_height)
    ;~ Until $alt = $neu ;solange, bis nicht mehr gescrollt werden kann
    EndIf
    $exitflag = 0
    ToolTip("")
    If $gefunden = 0 Then ;gesuchte Pixel nicht gefunden
    SetError(1, 0, 1)
    Return -1
    Else ;gefunden
    MouseClick("left", $aresult[0], $aresult[1]) ;auf die koordinaten klicken
    ;_arraydisplay($aresult)
    SetError(0, 0, 0)
    Opt("MouseCoordMode",$opt_m)
    Opt("PixelCoordMode",$opt_p)
    Return $aresult ;array mit den hotspot-koordinaten zurückgeben
    EndIf
    EndFunc ;==>_PtB_findbmp

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

    ;untersucht, ob Bitmap2 in Bitmap1 enthalten ist
    ;Originalfunc by JunkEW , modified by Andy@ http://www.autoit.de, finds the exact match
    Func _FindBMP($BMP1, $BMP2)
    Dim $BMP1Data = "", $BMP1Width = 0, $BMP1Height = 0, $BMP1LineWidth = 0;
    Dim $BMP2Data = "", $BMP2Width = 0, $BMP2Height = 0, $BMP2LineWidth = 0
    Dim $koord[2]
    Local $searchFor, $line, $iPos = 1, $imgBytes = 3
    ; Load the bitmap to search in
    _GetImage($BMP1, $BMP1Data, $BMP1Width, $BMP1Height, $BMP1LineWidth)
    $BMP1Data = BinaryToString($BMP1Data)
    _GetImage($BMP2, $BMP2Data, $BMP2Width, $BMP2Height, $BMP2LineWidth)
    $BMP2Data = BinaryToString($BMP2Data)
    $fillbyte=mod($BMP1LineWidth,3); aufgefüllte nullen am ende der bitmapzeile

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

    If $BMP2Height = 0 Then
    SetError(1, 0, 0)
    Return False
    EndIf
    Local $searchFor1 = StringMid($BMP2Data, 1, ($BMP2Width * $imgBytes)) ;1. pixel-zeile in der bitmap2 (string)
    $iPos = StringInStr($BMP1Data, $searchFor1, 2, 1) ;1. fundstelle des strings in Bitmap2

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

    ;zeilenweises vergleichen der beiden bitmaps, ist bitmap2 in bitmap1 enthalten?
    While 1
    Local $flag = 0
    If $iPos <> 0 Then ;nur, wenn es eine übereinstimmung gibt weitermachen
    $koord[0] = Mod(($iPos - 1) , $BMP1lineWidth) ;position innerhalb des Strings
    If $koord[0] / $imgBytes = Int($koord[0] / $imgBytes) Then ;prüfen ob ipos am anfang eines farbbits steht
    $prozent = $iPos / 3 * 100 / $BMP1Width / $BMP1Height
    $tooltip = ToolTip(StringFormat("Suche läuft : %.0f%%", $prozent) & @CRLF & "Zeile " & Int($iPos / $imgBytes / $BMP1Width), $BMP1Width / 2, $BMP1Height / 2)
    For $s = 2 To $BMP2Height ;zeilenweise das suchbild mit dem screen vergleichen
    $searchFor = StringMid($BMP2Data, 1 + (($s - 1) * $BMP2LineWidth), $BMP2Width * $imgBytes) ; s-te zeile aus dem ausschnitt
    $line = StringMid($BMP1Data, $iPos + (($s - 1) * $BMP1LineWidth), $BMP2Width * $imgBytes) ;zeile "unter" der gefundenen zeile im screen
    If $searchFor <> $line Then ;zeilen nicht gleich,
    $flag = 1
    ExitLoop ;exit for/next
    EndIf
    Next
    If $flag = 0 Then ;alle Zeilen haben übereingestimmt, Bitmap gefunden
    $koord[0] = Mod(($iPos - 1), $BMP1lineWidth) / $imgBytes
    $koord[1] = Int(($iPos - 1) / $BMP1lineWidth)
    Return $koord
    EndIf
    $iPos = StringInStr($BMP1Data, $searchFor1, 2, 1, $iPos + $imgBytes)
    If $iPos = 0 Then ExitLoop ;nicht gefunden
    Else ;ipos ist innerhalb eines farbbits und nicht am anfang
    $iPos = StringInStr($BMP1Data, $searchFor1, 2, 1, $iPos + 1)
    If $iPos = 0 Then ExitLoop
    EndIf
    Else
    ExitLoop
    EndIf
    WEnd
    SetError(1, 0, 0)
    Return 0 ;
    EndFunc ;==>_FindBMP

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

    ;aus einer Datei oder einem Screenshot die Pixeldaten im BGR-Format in einen String schreiben
    ;Originalfunc by JunkEW , modified by Andy@ http://www.autoit.de gets the Bitmapdata
    Func _GetImage($BMPFile, ByRef $BMPDataStart, ByRef $Width, ByRef $Height, ByRef $Stride)
    _GDIPlus_Startup()
    Local $Scan0, $pixelData, $hbScreen, $pBitmap, $handle, $imgBytes = 3
    ; Load the bitmap to search in
    If StringUpper($BMPFile) = "FULLSCREEN" Then
    $hbScreen = _ScreenCapture_Capture("", 0, 0, -1, -1, False)
    If @error Then MsgBox(0, "", "Fehler Screencapture FULLSCREEN")
    $pBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hbScreen); returns memory bitmap
    If @error Then MsgBox(0, "", "Fehler Bitmapcreate_FromHBITMAP")
    Else
    ;try to get a handle
    $handle = WinGetHandle($BMPFile)
    If @error Then
    ;Assume its an unknown handle so correct filename should be given
    $pBitmap = _GDIPlus_BitmapCreateFromFile($BMPFile)
    Else ;aktuelles fenster
    $xy = WinGetPos($BMPFile)
    ;_arraydisplay($xy)
    $hbScreen = _ScreenCapture_CaptureWnd("", $handle, 0, 0, $xy[2], $xy[3], False)
    If @error Then MsgBox(0, "", "Fehler Screencapturewnd")
    $pBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hbScreen); returns memory bitmap
    If @error Then MsgBox(0, "", "Fehler BitmapCreateFromHBITMAP")
    EndIf
    EndIf

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

    ;_GDIPlus_BitmapLockBits gibt $tagGDIPBITMAPDATA-Struktur zurück
    $BitmapData = _GDIPlus_BitmapLockBits($pBitmap, 0, 0, _GDIPlus_ImageGetWidth($pBitmap), _GDIPlus_ImageGetHeight($pBitmap), $GDIP_ILMREAD, $GDIP_PXF24RGB)
    If @error Then MsgBox(0, "", "Error locking region " & @error)
    $Stride = DllStructGetData($BitmapData, "Stride");Stride - Offset, in bytes, between consecutive scan lines of the bitmap. If the stride is positive, the bitmap is top-down. If the stride is negative, the bitmap is bottom-up.
    $Width = DllStructGetData($BitmapData, "Width");Image width - Number of pixels in one scan line of the bitmap.
    $Height = DllStructGetData($BitmapData, "Height");Image height - Number of scan lines in the bitmap.
    $pixelFormat = DllStructGetData($BitmapData, "PixelFormat");Pixel format - Integer that specifies the pixel format of the bitmap
    $Scan0 = DllStructGetData($BitmapData, "Scan0");Scan0 - Pointer to the first (index 0) scan line of the bitmap.
    $pixelData = DllStructCreate("ubyte lData[" & (Abs($Stride) * ($Height)) & "]", $Scan0)
    $BMPDataStart = DllStructGetData($pixelData, "lData") ;string, in dem die pixeldaten im BGR-Format stehen
    _GDIPlus_BitmapUnlockBits($pBitmap, $BitmapData)
    _GDIPlus_ImageDispose($pBitmap)
    _WinAPI_DeleteObject($pBitmap)
    EndFunc ;==>_GetImage

    [/autoit]


    Ausserdem benötigst du noch eine modifizierte Version von meinem PushTheButton-Programm, um Bitmaps vom Bildschirm "zu fotografieren", das habe ich unten angehängt.
    Im großen und ganzen funktioniert es so, daß die _PtB_clickBMP()-Funktion nach einer Übereinstimmung einer Bitmap mit dem Fensterinhalt sucht.
    Als Bitmap nehmen wir den Schriftzug in der Combobox vom VLC, den bekommst du folgendermassen.

    PushTheButton starten und bissl damit rumspielen, damit du weisst wie es funktioniert. Anleitung lesen nicht vergessen^^
    Zoomfaktor auf ca 9-10 einstellen (Mausrad oder +-Tasten numblock), Fenster mit ctrl-alt-Pfeiltaste auf volle Breite und ca 8-9 Pixel Höhe einstellen.
    Dann VLC starten, Medien, Aufnahmegerät, damit du ins Fenster "Medien öffnen " kommst. Aufnahmemodus aus der Combobox auswählen, dann das PushTheButtonfenster anwählen und den Mauscursor auf das Combobox-Feld stellen
    das sollte dann ungefähr so aussehen:
    [Blockierte Grafik: http://www.abload.de/thumb/vlc29ex4.jpg]
    Du kannst mit den Pfeiltasten feintuning machen, d.h. der Schriftzug sollte komplett im PtB-Fenster sein. Pass aber auf, daß die oberste Zeile im Fenster NIE NIE NIE komplett weiß ist, sonst sucht sich später das Script tot....Normalerweise findet er die Bitmap in ca. 1/10 Sekunde.
    Wenn du in etwa alles so hast wie auf dem Bild, dann drück ctrl-alt-m zum speichern und vergib einen Namen für die Bitmap.
    Genau diesen Namen gibst du in das VLC-Script bei $bitmap ein, und drückst mal F5^^
    Das VLC-Script startet den vlc und wählt aus der Combobox deine abgespeicherte "Bitmap" aus :rock:
    Ansonsten bekommst du eine Fehlermeldung und musst dich nochmal melden^^

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    ciao
    Andy

    Die Bildschirmauflösung ist übrigens völlig egal, hauptsache es sind nicht irgendwelche 120-DPI-Schriften eingestellt. Und wenn ist es auch egal, denn dann macht man einfach mehrere Bitmaps (XP, Vista, WIN7) und sucht die nacheinander ab, dauert eh nur 1/10 Sekunde pro Bild

  • Combobox-Inhalt auswählen

    • Andy
    • 4. September 2009 um 16:15

    Hi, habs soweit, Code erst heute Abend, muss weg....
    ciao
    Andy

  • ini-Datei-Werte auslesen, die nicht lokal auf dem Rechner liegen?

    • Andy
    • 4. September 2009 um 08:31

    Hi,
    es ist völlig egal, WO die Datei liegt, ein "On-The-Fly"-Auslesen von Daten funktioniert m.E. nur bei Datenbanksystemen, genau dafür sind die nämlich gemacht^^

    Um Teile einer Datei auszulesen und zu übertragen müsste auf "der anderen Seite" ein Dienst diese Aufgabe erfüllen. D.h., man müsste sich bei diesem Dienst als User autorisieren und dann (ähnlich wie bei einer Datenbank) eine Befehlsfolge abschicken. "Öffne Datei XYZ, lese die Daten ABC, verschlüssele diese Daten zur sicheren Datenübertragung und sende sie!" So in etwa...
    Gleichzeitig bräuchtest du auf deiner Seite ein System, um die empfangenen Daten wieder zu entschlüsseln, anzuzeigen uswusf....
    Wie gesagt, dafür gibt es Datenbanken (Server und Client)

    Da halte ich ein InetGet() für wesentlich einfacher, die komplette Datei wird downgeloadet, Daten werden lokal gelesen und ggf. editiert und danach erfolgt ein Upload. Fettich...
    Da eine *.INI-Datei idR nicht sonderlich groß ist, hält sich der Traffic auch in Grenzen.
    ciao
    Andy

    btw. Ich habe in letzter Zeit schon öfter Anfragen zu diesem Thema gelesen. Worum gehts eigentlich? Gigabyteweise Videos und Musik downloaden bis die Leitung glüht und sich dann aber wegen einer Handvoll Byte einer *.INI-Datei in die Hose machen passt m.E. nicht zusammenI

  • On Error Goto....gibt es so etwas auch in AutoIt?

    • Andy
    • 3. September 2009 um 20:44
    Zitat

    Damit kann man seine Skripts verbessern, wenn alles ausgereift ist :)

    Genau DAS ist das Ziel!

  • On Error Goto....gibt es so etwas auch in AutoIt?

    • Andy
    • 3. September 2009 um 20:25
    Zitat

    Aber wäre das, was du suchst =D

    Nein, das ist das, was ich bereits habe^^. Und auch versuche, es weitgehend zu nutzen.
    Während der Entwicklung ist es kein Problem, mit tracelines oder Debug to Console/Msgbox das Script zu "überwachen", bzw. eventuelle Fehler aufzuspüren. Die Fehler werden ja (wenn nicht z.B. mit @Error abgefangen) im mehr oder minder "Klartext" angezeigt.
    Aber wenn in einem kompilierten Script z.B. ein unvorhergesehener Fehler auftritt, erscheint dieselbe kryptische Fehlermeldung, sogar inclusive (nicht vorhandener) Zeilennummer.
    Mit der "On Error"-Methode verhindert man nicht den Fehler, sondern stellt dem Programm-Benutzer eine Info zur Verfügung, die man selbst bestimmen kann. In letzter Zeit habe ich mit einigen Programmen gearbeitet, die im Fehlerfall fragen, ob sie dem Entwickler eine Mail schreiben dürfen mit allen greifbaren Infos. Von Entwicklerseite her halte ich das für extrem sinnvoll!
    Es wird nie völlig fehlerfreie Software geben, das ist klar! Allein die Klimmzüge, die man bei AutoIt machen muss, um ein Script auf XP, Vista, Windows 2000, WIN7, und den 64-Bit-Versionen davon laufen lassen zu können, sind nicht ohne....
    Da würde eine Fehlermeldung "Es ist ein unvorhergesehener Fehler im Modul XYZ in der Funktion ABC vorgekommen! Sie können diese Information per Mail an den Entwickler schicken, bitte klicken sie dazu blablabla..." meines Erachtens wesentlich besser passen wie ein Fensterchen mit "AutoIt-Fehler, Error in line-1, 1.INF".
    Komischerweise ist das Abfangen von Fehlern in COM-Objekten überhaupt kein Problem....

  • GDI+ Screensavers (jetzt mit 2 Beispielen)

    • Andy
    • 3. September 2009 um 19:45

    Hi,

    Zitat

    AMD Athlon XP 3000+ verliefen die Linien zum Teil mitten beim Zeichnen von links oben in der Ecke in alle Richtungen!


    ich hatte diesen "Anzeigefehler" auch, allerdings nur beim ersten Start. AMD 4850e
    Habe es jetzt mehrmals laufen lassen, ohne Befund^^. Die illuminaten wissen sicherlich mehr....

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™