Ich habe zwar das Gefühl, dass ich es nicht verstehe, doch meine Intuition sagt mir, dass du GUICtrlSetImage in Zeile 6 brauchst. *>*
Beiträge von $var
-
-
Alles anzeigen
So müsste es funktionieren, habs jetzt nicht getestet.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <String.au3>Global $aSB_1 = _StringBetween(FileRead("deine Datei"), "<marker>", "</marker>")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $aRet[UBound($aSB_1)][3]
Global $aSB_2For $i = 0 To UBound($aSB_1) - 1
[/autoit] [autoit][/autoit] [autoit]
$aSB_2 = _StringBetween($aSB_1[$i], 'posX="', '"')
$aRet[$i][0] = $aSB_2[0]
$aSB_2 = _StringBetween($aSB_1[$i], 'posY="', '"')
$aRet[$i][1] = $aSB_2[0]
$aSB_2 = _StringBetween($aSB_1[$i], 'posZ="', '"')
$aRet[$i][2] = $aSB_2[0]
Next_ArrayDisplay($aRet)
[/autoit]Zeile 5 - Anstatt "<marker>" sollte es "<marker" heißen, da es sich noch nicht schließt.
Und die _StringBetween-Funktionen kann man durch ein kleines RegExp ersetzen.Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <String.au3>Global $aSB = _StringBetween(FileRead("deine Datei"), "<marker", "</marker>")
[/autoit] [autoit][/autoit] [autoit]
Global $aRet[UBound($aSB)][3]For $i = 0 To UBound ($aSB) - 1
[/autoit] [autoit][/autoit] [autoit]
$aReg = StringRegExp ($aSB[$i], 'pos.="(.+?)"', 3)
For $j = 0 To 2
$aRet[$i][$j] = $aReg[$j]
Next
Next_ArrayDisplay($aRet)
[/autoit] -
[autoit]
IniWrite ; In einer For-Schleife
[/autoit]und
[autoit]IniReadSection
[/autoit] -
Das zu suchende Bild muss im BMP-Format sein.
Ansonsten stimmt alles... -
So etwas?
[autoit]; [...]
[/autoit][autoit][/autoit][autoit]AdlibRegister ('_Check', 600000)
[/autoit][autoit][/autoit][autoit]Func _Check ()
[/autoit]
If Not WinActive ($hGui) Then
WinActivate ($hGui)
Else
; Blubb
EndIf
EndFunc -
Mist, ich habe meinen Post versehentlich gelöscht... :pinch:
Dann eben nur eine ganz kurze Fassung.Oder wird die Erste Pixelsearch-Funktion ausgeführt und falls er nichts findet geht er zur nächsten PixelSearch? So sollte es sein.
So sollte es dann aussehen:
[autoit]HotKeySet("{ESC}", "_Ende")
[/autoit][autoit][/autoit][autoit]
$farbe = 0x0000FFWhile True
[/autoit][autoit][/autoit][autoit]
If IsArray (PixelSearch (1242, 582, 1255, 591, $farbe)) Then
; MouseClick bla
; MouseClick blubb
; MouseClick ...
EndIf
; If IsArray (PixelSearch(1242, 600, 1255, 609, $farbe)) Then
; MouseClick ...
; usw
; EndIf
WEndFunc _Ende()
[/autoit]
Exit
EndFuncViel kürzer wäre es natürlich mit einem Array... Aber das brauchst du sicher nicht.

-
Schau mal hier.
Die Funktion gibt bei Erfolg ein Array mit den Koordinaten zurück. Bei Misserfolg wird lediglich @error gesetzt.
Wenn die Farbe also nicht gefunden wird, ist $coord kein Array.Eine mögliche Lösung zu dem Problem wäre zum Beispiel so etwas:
[autoit]Do
[/autoit]
$coord = PixelSearch(1242, 582, 1255, 591, $farbe)
; Sleep (10)
Until IsArray ($coord) ; Dieser Block entspricht Zeile 4 deines ScriptsDamit wird nach der Farbe so lange gesucht, bis $coord ein Array ist.
-
Schau dir hier mal das Beispiel von SEuBo an.
-
Im zweiten Beispiel ist es schon richtig kommentiert... Das Script hängt in einer Endlosschleife. Deine Funktion wird also gar nicht abgearbeitet.

Etwa so sollte es aussehen:Spoiler anzeigen
[autoit]#include "misc.au3"
[/autoit] [autoit][/autoit] [autoit]Global $i_CoordX = @DesktopWidth / 2
[/autoit] [autoit][/autoit] [autoit]
Global $i_CoordY = @DesktopHeight / 2 ; Legst die Koordinaten fest
Global $i_Color = PixelGetColor ($i_CoordX, $i_CoordY) ; Speicherst die derzeitige FarbeDo
[/autoit] [autoit][/autoit] [autoit]
Sleep (100)
Until _IsPressed ("04") ; Wartet, bis "04" gedrückt wirdWhile _ispressed ("04")
[/autoit] [autoit][/autoit] [autoit]
If $i_Color <> PixelGetColor ($i_CoordX, $i_CoordY) Then ExitLoop ; Wartest, bis sich die Farbe ändert
Sleep (100)
WEndmouseclick ("left")
[/autoit] -
[autoit]
Global $i_CoordX = @DesktopWidth / 2
[/autoit][autoit][/autoit][autoit]
Global $i_CoordY = @DesktopHeight / 2 ; Legst die Koordinaten fest
Global $i_Color = PixelGetColor ($i_CoordX, $i_CoordY) ; Speicherst die derzeitige FarbeDo
[/autoit][autoit][/autoit][autoit]
Sleep (250)
Until $i_Color <> PixelGetColor ($i_CoordX, $i_CoordY) ; Wartest, bis sich die Farbe ändert_MeineFunktion () ; Rufst hier die gewünschte Funktion auf
[/autoit] -
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Vertretungsplan abrufen ", 257, 71, 193, 125)
$Code = GUICtrlCreateInput("Code", 128, 8, 121, 21)
$Label1 = GUICtrlCreateLabel("Startcode eingeben:", 24, 8, 100, 17)
$Button1 = GUICtrlCreateButton("Skript Starten", 152, 32, 75, 25)
$Label2 = GUICtrlCreateLabel("by Bastian Matthies", 0, 48, 104, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
If GUICtrlRead ($Code) = 1 Then ; <!--
MsgBox (0,"richtig","hghj")
Else
MsgBox (0,"Falsch","hjgjb")
EndIf
EndSwitch
WEndÜbrigens würde ich dir an dieser Stelle mal vom Koda abraten.
Variablen wie "$Button1" sind schwerer zu lesen, als Braille mit Füßen. -
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 112, 116, 192, 124)
$Label1 = GUICtrlCreateLabel("Klick", 32, 32, 44, 17)
$Label2 = GUICtrlCreateLabel("Klick", 32, 64, 44, 17)
GUISetState(@SW_SHOW)Global $iCounter1 = 5, $iCounter2 = 5
[/autoit] [autoit][/autoit] [autoit]
Global $fCount1 = False, $fCount2 = FalseWhile 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Label1
If $fCount1 = False Then
$fCount1 = True
AdlibRegister("deine_counter_1", 1000)
Else
$iCounter1 = 5
EndIf
Case $Label2
If $fCount2 = False Then
$fCount2 = True
AdlibRegister("deine_counter_2", 1000)
Else
$iCounter2 = 5
EndIf
EndSwitch
WEndFunc deine_counter_1()
[/autoit] [autoit][/autoit] [autoit]
If $iCounter1 >= 0 Then
GUICtrlSetData($Label1, $iCounter1)
$iCounter1 -= 1
Else
$fCount1 = False
AdlibUnRegister("deine_counter_1")
EndIf
EndFuncFunc deine_counter_2()
[/autoit]
If $iCounter2 >= 0 Then
GUICtrlSetData($Label2, $iCounter2)
$iCounter2 -= 1
Else
$fCount1 = False
AdlibUnRegister("deine_counter_2")
EndIf
EndFunc€: Ach verdammt, ich muss öfter aktualisieren.
-
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <WindowsConstants.au3>_GDIPlus_Startup ()
[/autoit] [autoit][/autoit] [autoit]
Opt ("GUIOnEventMode", 1)Global Const $i_WIDTH = 601, $i_HEIGHT = 201
[/autoit] [autoit][/autoit] [autoit]
Global $a_Points[3][2] = [[2], [0, $i_HEIGHT / 2], [10, $i_HEIGHT / 2]]
Global $a_GuiSize[2] = [$i_WIDTH, $i_HEIGHT], $a_GridSize[2] = [10, 10]
Global $ah_GridPen[2] = [_GDIPlus_PenCreate (0xFF2C424D), _GDIPlus_PenCreate (0xFF50778B)]
Global $ah_PointsPen[5] = [ _
_GDIPlus_PenCreate (0x7F00FF00, 1), _
_GDIPlus_PenCreate (0x3F00FF00, 3), _
_GDIPlus_PenCreate (0x3300FF00, 5), _
_GDIPlus_PenCreate (0x2600FF00, 7), _
_GDIPlus_PenCreate (0x1900FF00, 9)]Global $h_Gui = GUICreate ("", $i_WIDTH, $i_HEIGHT)
[/autoit] [autoit][/autoit] [autoit]
Global $h_Graphic = _GDIPlus_GraphicsCreateFromHWND ($h_Gui)
Global $h_Bitmap = _GDIPlus_BitmapCreateFromGraphics ($i_WIDTH, $i_HEIGHT, $h_Graphic)
Global $h_Backbuffer = _GDIPlus_ImageGetGraphicsContext ($h_Bitmap)
_GDIPlus_GraphicsSetSmoothingMode ($h_Backbuffer, 2)GUIRegisterMsg (0x000F, "WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent (-3, "_Exit", $h_Gui)
OnAutoItExitRegister ("_OnExit")
GUISetState (@SW_SHOW, $h_Gui)While Sleep (1)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear ($h_Backbuffer, 0xFF000000)
_GDIPlus_GraphicsDrawGrid ($h_Backbuffer, $a_GridSize, $a_GuiSize, $ah_GridPen) ; An diesem Punkt
_GDIPlus_GraphicsDrawCurve ($h_Backbuffer, $a_Points, $ah_PointsPen[4]) ; wird in die Bitmap gezeichnet.
_GDIPlus_GraphicsDrawCurve ($h_Backbuffer, $a_Points, $ah_PointsPen[3]) ; Es wird auch gleichzeitig
_GDIPlus_GraphicsDrawCurve ($h_Backbuffer, $a_Points, $ah_PointsPen[2]) ; in der GUI angezeigt.
_GDIPlus_GraphicsDrawCurve ($h_Backbuffer, $a_Points, $ah_PointsPen[1]) ; ~~~
_GDIPlus_GraphicsDrawCurve ($h_Backbuffer, $a_Points, $ah_PointsPen[0]) ; ~~~
_WinAPI_RedrawWindow ($h_Gui, 0, 0, $RDW_INTERNALPAINT)
_SetPoint ()
WEndFunc _SetPoint ()
[/autoit] [autoit][/autoit] [autoit]
Local Static $i = 0
If $i >= $i_WIDTH Then
If _GDIPlus_ImageSaveToFile ($h_Bitmap, @DesktopDir & "\bitmap.bmp") Then ; Hier wird das Bild gespeichert
MsgBox (64, "Info", "Die Bitmap wurde erfolgreich unter " & @DesktopDir & "\bitmap.bmp gespeichert.")
Exit
EndIf
EndIf
ReDim $a_Points[$a_Points[0][0] + 2][2]
$a_Points[0][0] += 1
If $i = 0 Then
$a_Points[$a_Points[0][0]][0] = Random (0, 20, 1)
$a_Points[$a_Points[0][0]][1] = Random (30, $i_HEIGHT - 30, 1)
Else
$a_Points[$a_Points[0][0]][0] = Random ($i, $i + 20, 1)
$a_Points[$a_Points[0][0]][1] = Random (30, $i_HEIGHT - 30, 1)
EndIf
$i = $a_Points[$a_Points[0][0]][0] + 5
EndFunc ;==> _SetPointFunc _GDIPlus_GraphicsDrawGrid ($h_Graphics, $a_GridSize, $a_GuiSize, $ah_GridPen)
[/autoit] [autoit][/autoit] [autoit]
For $i_X = 0 To $a_GuiSize[0] Step $a_GridSize[0]
For $i_Y = 0 To $a_GuiSize[1] Step $a_GridSize[1]
_GDIPlus_GraphicsDrawLine ($h_Graphics, $i_X, 0, $i_X, $a_GuiSize[1], $ah_GridPen[0])
_GDIPlus_GraphicsDrawLine ($h_Graphics, 0, $i_Y, $a_GuiSize[0], $i_Y, $ah_GridPen[0])
Next
Next
For $i_X = 0 To $a_GuiSize[0] Step $a_GridSize[0] * 5
For $i_Y = 0 To $a_GuiSize[1] Step $a_GridSize[1] * 5
_GDIPlus_GraphicsDrawLine ($h_Graphics, $i_X, 0, $i_X, $a_GuiSize[1], $ah_GridPen[1])
_GDIPlus_GraphicsDrawLine ($h_Graphics, 0, $i_Y, $a_GuiSize[0], $i_Y, $ah_GridPen[1])
Next
Next
EndFunc ;==> _GDIPlus_GraphicsDrawGridFunc WM_PAINT ()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawImageRect ($h_Graphic, $h_Bitmap, 0, 0, $i_WIDTH, $i_HEIGHT)
EndFunc ;==> WM_PAINTFunc _Exit ()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==> _ExitFunc _OnExit ()
[/autoit]
For $i = 0 To UBound ($ah_GridPen) - 1
_GDIPlus_PenDispose ($ah_GridPen[$i])
Next
For $i = 0 To UBound ($ah_PointsPen) - 1
_GDIPlus_PenDispose ($ah_PointsPen[$i])
Next
_GDIPlus_GraphicsDispose ($h_Graphic)
_GDIPlus_BitmapDispose ($h_Bitmap)
_GDIPlus_Shutdown ()
EndFunc ;==> _OnExitDas beantwortet natürlich nicht ganz die Frage, stellt aber ein Beispiel dar.
Allgemein zeichnest du die Grafiken mit _GDIPlus_GraphicsDrawImageRect in die Bitmap
und speicherst diese dann mit _GDIPlus_ImageSaveToFile ab. -
Benutz doch Photoshop. Für arme gibt es auch Gimp.
Machst eine Textur rein -> Verlauf -> ggf. Kanten -> fertig.Falls du die Bilder übrigens normal in der GUI verwenden willst, musst du auf PNGs und somit auch auf Transparenz verzichten.
-
[autoit]
Global $a_level_1[6][2] = [[76, 67], [58, 57], [56, 55], [0, 0], [0, 0], [0, 0]]
[/autoit]
; usw...
; oder aber so
Global $a_level_1[2][6] = [[76, 67, 58, 57, 56, 55], [0, 0, 0, 0, 0, 0]] -
Vielleicht willst du ja auch ein süßes Kätzchen, dass goldene Hühnereier legt?
Entweder, oder. Du kannst nicht beides haben.
Außerdem kann man das Programm in dem Fall ruhig etwas ausbremsen... In einer halben Sekunde sollte eher nicht so viel passieren. -
[autoit]
#include <File.au3>
[/autoit][autoit][/autoit][autoit]
Dim $List, $File = @ScriptDir&'\processlist.txt'_FileReadToArray($File,$List)
[/autoit][autoit][/autoit][autoit]
If Not IsArray($List) Then ExitWhile 1
[/autoit]
For $i = 1 To $List[0]
If ProcessExists($List[$i]) Then
ProcessClose($List[$i])
TrayTip(" Geblockt",$List[$i]&" wurde blockiert!",5)
EndIf
Next
Sleep(500) ; <===== Erhöhen
WEnd -
[autoit]
GUICtrlSetState ($h_Input, $GUI_HIDE)
[/autoit]
GUICtrlSetState ($h_Input, $GUI_SHOW)Beispielscript
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]$h_Gui = GUICreate ("Beispiel: Controls anzeigen/verstecken", 400, 100)
[/autoit] [autoit][/autoit] [autoit]
$h_Radio1 = GUICtrlCreateRadio ("Anzeigen", 10, 10, 80, 13)
$h_Radio2 = GUICtrlCreateRadio ("Verstecken", 10, 30, 80, 13)
$h_Input = GUICtrlCreateInput ("", 140, 10, 180, 20)GUICtrlSetState ($h_Radio1, $GUI_CHECKED)
[/autoit] [autoit][/autoit] [autoit]GUISetState (@SW_SHOW, $h_Gui)
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit]
Switch GUIGetMsg ()
Case $GUI_EVENT_CLOSE
Exit
Case $h_Radio1, $h_Radio2
If GUICtrlRead ($h_Radio1) = $GUI_CHECKED Then
GUICtrlSetState ($h_Input, $GUI_SHOW)
Else
GUICtrlSetState ($h_Input, $GUI_HIDE)
EndIf
EndSwitch
WEnd -
Mit dem gezeigten Script würdest du aus dem Array nur Einträge löschen, die "a", "b" oder "c" sind. Jedoch kein "A", "Beispiel" oder "cafu".
Da dein Script aber nicht vollständig ist und deine Erklärung für den Aaa' ist, kann man nur raten, was genau du eigentlich erreichen willst.
Ich glaube aber, dass du die Funktion StringInStr brauchst (da du eben vom Filter sprichst)... -
Sorry, ich hab deinen Thread irgendwie vergessen...

Macht nichts. Man kann ja nicht immer vor Ort sein.

Vielen Dank für die Hilfe. Jetzt weiß ich wenigstens auch, wie die Funktion funktioniert.
