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

Beiträge von Frost0071

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 24. Januar 2017 um 12:17

    Juhu ich habe es hinbekommen :D Sogar mit einer zusätzlichen Farbe, für mich schon als Erfolg zu werten ;)

    Allerdings eins bekomm ich noch nicht hin und zwar das ganze in einer Endlosschleife laufen zu lassen. Bekomme immer einen Error.
    Kann mir da vielleicht nochmal jemand helfen?

    Hier mal das Script:

    AutoIt
    ;-- TIME_STAMP   2017-01-22 21:16:57
    
    
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Global $g_aCheckPos
    
    
    ; $g_iColor = Hintergrundfarbe des SciTE-Window
    Global $g_iColor = 0x87c323, $g_iColor1 = 0x34302d, $g_iCheckCount = 1, $g_iSleep = 100, $g_iTimeout = 3000, $g_x = $g_aCheckPos, $g_y = $g_aCheckPos
    
    
    Global $g_ixPosClick = 86, $g_iyPosClick = 508
    
    
    Global $g_aArray = [[$g_x + 290, $g_y + 198, $g_iColor], _
    				    [$g_x + 290, $g_y + 198, $g_iColor], _
    				    [$g_x + 290, $g_y + 198, $g_iColor], _
    					 [$g_x + 325, $g_y + 631, $g_iColor1]]
    
    
    Global $g_bAdlib = AdlibRegister('_CheckColor', $g_iTimeout)
    
    
    While $g_bAdlib = True
    	Sleep(100)
    WEnd
    
    
    _Exit()
    
    
    Func _CheckColor()
    	Local Static $iCheckCount = 0
    
    
    		If _PixelArrayCheckColor($g_aArray, $g_iSleep) = True Then
    			MouseClick("left", $g_ixPosClick, $g_iyPosClick, 1, 1)
    		EndIf
    
    
    	If _PixelArrayCheckColor($g_aArray, $g_iSleep) = True Then
    		ConsoleWrite('+ Bingo!!!' & @CRLF)
    	Else
    		ConsoleWrite('! Ops...' & @CRLF)
    	EndIf
    
    
    	$iCheckCount += 1
    	If $iCheckCount = $g_iCheckCount Then $g_bAdlib = False
    EndFunc
    
    
    Func _PixelArrayCheckColor($aArray, $iSleep = 1)
    	Local $iColor
    	For $i = 0 To UBound($aArray) -1 Step 1
    		$iColor = PixelGetColor($aArray[$i][0], $aArray[$i][1])
    		If $iColor <> $aArray[$i][2] Then Return False
    		ConsoleWrite('- $iColor(' & _Hex($iColor) &') = PixelGetColor('& _Hex($aArray[$i][2]) & ')' & @CRLF)
    		Sleep($iSleep)
    	Next
    
    
    	Return True
    EndFunc
    
    
    Func _Hex($iDec)
    	Return '0x' & Hex($iDec, 6)
    EndFunc
    
    
    Func _Exit()
    	AdlibUnRegister('_CheckColor')
    	Exit
     EndFunc
    Alles anzeigen

    Danke

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 22. Januar 2017 um 23:30

    Das geht leider auch nicht.

    Hier mal das Script mit meinen Daten. Hoffe es ist alles richtig so?
    Muss ich bei $g_x = $g_aMousePos[0], $g_y = $g_aMousePos[1] auch was eintragen?

    AutoIt
    ;-- TIME_STAMP   2017-01-22 21:16:57
    
    
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Global $g_aMousePos = MouseGetPos()
    
    
    ; $g_iColor = Hintergrundfarbe des SciTE-Window
    Global $g_iColor = 0x84c521, $g_iCheckCount = 3, $g_iSleep = 100, $g_iTimeout = 3000, $g_x = $g_aMousePos[0], $g_y = $g_aMousePos[1]
    
    
    Global $g_ixPosClick = 86, $g_iyPosClick = 508
    
    
    Global $g_aArray = [[$g_x + 50, $g_y + 124, $g_iColor], _
    				    [$g_x + 50, $g_y + 190, $g_iColor], _
    				    [$g_x + 50, $g_y + 258, $g_iColor]]
    
    
    Global $g_bAdlib = AdlibRegister('_CheckColor', $g_iTimeout)
    
    
    While $g_bAdlib = True
    	Sleep(100)
    WEnd
    
    
    _Exit()
    
    
    Func _CheckColor()
    	Local Static $iCheckCount = 0
    
    
    	#cs
    		If _PixelArrayCheckColor($aArray, $g_iSleep) = True Then
    			MouseClick("left", $g_ixPosClick, $g_iyPosClick, 1, 1)
    		EndIf
    	#ce
    
    
    	If _PixelArrayCheckColor($g_aArray, $g_iSleep) = True Then
    		ConsoleWrite('+ Bingo!!!' & @CRLF)
    	Else
    		ConsoleWrite('! Ops...' & @CRLF)
    	EndIf
    
    
    	$iCheckCount += 1
    	If $iCheckCount = $g_iCheckCount Then $g_bAdlib = False
    EndFunc
    
    
    Func _PixelArrayCheckColor($aArray, $iSleep = 1)
    	Local $iColor
    	For $i = 0 To UBound($aArray) -1 Step 1
    		$iColor = PixelGetColor($aArray[$i][0], $aArray[$i][1])
    		If $iColor <> $aArray[$i][2] Then Return False
    		ConsoleWrite('- $iColor(' & _Hex($iColor) &') = PixelGetColor('& _Hex($aArray[$i][2]) & ')' & @CRLF)
    		Sleep($iSleep)
    	Next
    
    
    	Return True
    EndFunc
    
    
    Func _Hex($iDec)
    	Return '0x' & Hex($iDec, 6)
    EndFunc
    
    
    Func _Exit()
    	AdlibUnRegister('_CheckColor')
    	Exit
    EndFunc
    Alles anzeigen


    Hier noch ein Screenshot:

    Test.jpg

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 22. Januar 2017 um 16:34

    Hmm also irgendwie funktioniert es nicht ?( das Script macht immer das selbe egal ob die Anzeige grün oder rot ist.
    Ich hab das hier mal 2 Screenshots erstellt, auch mit Pixelabfrage zwegs den Farben:

    Grün.bmpRot.bmp

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 22. Januar 2017 um 01:34

    @Bitnugger vielen Dank :thumbup:

    Ganz sooooo einfach müsst Ihr es mir aber nicht immer machen. Natürlich habe ich aber auch nix dagegen ;) Ich bin gerne bereit auch etwas zu lernen und zu lesen, allerdings dauert sowas bei mir immer länger und hab dann immer viele Fragen :S weil das PC basierte Programmieren war noch nie meine Stärke :Face:

    Jetzt habe ich allerdings noch ein Problem, so sied der Script jetzt bei mir aus:

    AutoIt
    ;-- TIME_STAMP   2017-01-20 15:27:53
    
    
    Global $iColor = 0x84c528, $iTimeout = 3000, $x = 50, $y = 124
    Global $aArray = [[$x +  0, $y +   0, $iColor], _
    				  [$x + 50, $y + 190, $iColor], _
    				  [$x + 50, $y + 258, $iColor]]
    
    
    If _PixelArrayCheckColor($aArray, $iTimeout) = True Then MouseClick("left", $x + 86, $y + 508, 1, 1)
    
    
    Func _PixelArrayCheckColor($aArray, $iTimeout = -1)
    	Switch $iTimeout
    		Case -1	; ohne Timeout
    			For $i = 0 To UBound($aArray) -1 Step 1
    				If PixelGetColor($aArray[$i][0], $aArray[$i][1]) <> Dec($aArray[$i][2]) Then Return False
    			Next
    		Case Else ; mit Timeout
    			Local $hTimer = TimerInit()
    			While Dec(TimerDiff($hTimer)) < Dec($iTimeout)
    				For $i = 0 To UBound($aArray) -1 Step 1
    					If PixelGetColor($aArray[$i][0], $aArray[$i][1]) <> Dec($aArray[$i][2]) Then Return False
    				Next
    			WEnd
    	EndSwitch
    
    
    	Return True
    EndFunc
    Alles anzeigen


    Ich hab die Pixelpositionen noch ein bissen angepasst, und auch überprüft das alle 3 Pixel die gleiche Farbe anzeigen das stimmt alles soweit.

    Allerdings lässt sich das Programm nicht starten. Wenn ich das Script ausführe passiert nix und wenn ich eine exe erzeuge wird sie gleich wieder beendet.
    Kann mir jemand vielleicht sagen was ich falsch mache?

    Danke

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 20. Januar 2017 um 15:05

    Das es komisch aussieht war mir schon klar habe ja auch ich geschrieben :S

    Ich habe aber jetzt ein Beispiel im Netz gefunden der es so macht:

    AutoIt
    If Hex(PixelGetColor($center[]+50,$center[1]+125),6)=0xFFFFFF and Hex(PixelGetColor($center[]+50,$center[1]+169),6)=0xFFFFFF and Hex(PixelGetColor($center[]+50,$center[1]+265),6)=0xFFFFFF
    
    
    Then
    delay (3000)
    		MouseClick("left",$center[]+86,$center[1]+508,1,1)

    Ist das so möglich? Das FFFFFF werde ich natürlich noch gegen den richtigen Wert austauschen.
    Anstelle des Timers kann ich doch einfach auch ein delay einbauen oder?

    Wie schon mal erwähnt meine Programmierkentnisse sind 0 deswegen fällt mir das alles auch ein bisschen schwer ?(

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 20. Januar 2017 um 10:41

    Also dann brauche ich sowas oder?
    Kann ich das mit dem If und And so schreiben?

    AutoIt
    If Hex(PixelGetColor($center[]+50,$center[1]+125),6)="FFFFFF" 
    And Hex(PixelGetColor($center[]+50,$center[1]+169),6)="FFFFFF"
    And Hex(PixelGetColor($center[]+50,$center[1]+265),6)="FFFFFF"
    Then
    		MouseClick("left",$center[]+86,$center[1]+508,1,1)

    Eine Frage habe ich noch:

    Ich möchte hier noch eine Zeit einbauen, also das der Mausklick erst ausgeführt wird wenn die Pixel 3s lange grün sind. Wie setze ich die ein?

    Danke

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 18. Januar 2017 um 11:22

    Habe gerade mal geschaut aber da ändert sich auch nix

    [Blockierte Grafik: http://img5.fotos-hochladen.net/thumbnail/unbenanntx2jmw5tprk_thumb.jpg]

    Nur das Feld "ControlClick Coords" aber das sind ja nur die koordinaten des Mauszeigers oder?

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 18. Januar 2017 um 09:40

    Stimmt da hätte ich ja auch selber drauf kommen können sorry :/

    Ich hab gestern mal geschaut, leider zeigt es mir über allen Feldern immer das gleiche an.
    Hier mal ein Screenshot:

    [Blockierte Grafik: http://img5.fotos-hochladen.net/thumbnail/autoitq2n5lytcrb_thumb.jpg]

    Ist das trotzdem möglich?

  • Button betätigen nach Ereignissänderung

    • Frost0071
    • 17. Januar 2017 um 16:23

    Hallo Zusammen,

    nachdem mir hier letztens so unkompliziert und schnell geholfen wurde, habe ich jetzt wieder ein Anliegen an euch. Hoffe das ist dieses mal auch so einfach :/

    Und zwar möchte ich gerne folgenden Ablauf automatisieren:

    Bei der Steuerung einer Maschine ändern sich 3 Anzeigen nach einer Referenzfahrt, danach muss immer händisch die Arbeitsraumüberwachung durch Tastendruck eingeschalten werden.
    Hier habe ich mal zwei Bilder wo man gut erkennt wie sich der Zustand der Anzeige unter den Achsbuchstaben von rot auf grün ändert. Etwas weiter unten sieht man auch den Button für die Arbeitsraumüberwachung der immer manuell betätigt werden muss.
    [Blockierte Grafik: http://img5.fotos-hochladen.net/thumbnail/unbenannt50iq2o3suj_thumb.jpg][Blockierte Grafik: http://img5.fotos-hochladen.net/thumbnail/unbenannt10rp9wzojdu_thumb.jpg]

    Ist das nun einfach zu realisieren? Was brauche ich dazu für Informationen?
    Hoffe es ist alles verständlich :rolleyes:

    Ich bedanke mich schon mal.

  • Bildschirmtastatur automatisch öffnen bei "Fenster klick"

    • Frost0071
    • 20. Dezember 2016 um 15:54

    Danke ich werd ausprobieren und berichten

  • Bildschirmtastatur automatisch öffnen bei "Fenster klick"

    • Frost0071
    • 20. Dezember 2016 um 15:30

    Okay ich hab das mal geändert.

    Eine Frage noch, Brauche ich die Wartezeit von 1s? Das würde ja bedeuten das im schlimmsten Fall wenn ich ein Feld aktiviere ich mehrere Sekunden warten muss bis die Tastatur kommt oder sehe ich das falsch?
    Vielen Dank für deine Hilfe @alpines hast mir sehr geholfen :thumbup:

    AutoIt
    #RequireAdmin
    #AutoIt3Wrapper_UseX64=y
    
    
    While Sleep(1000)
    	If Not ProcessExists("osk.exe") and ControlGetFocus("Unbenannt - Editor") = "Edit1" Then
    		ShellExecute(@WindowsDir & "\System32\osk.exe")
    		Sleep(1000)
    	ElseIf Not ProcessExists("osk.exe") and ControlGetFocus("Unbenannt - Editor") = "Edit2" Then
    		ShellExecute(@WindowsDir & "\System32\osk.exe")
    		Sleep(1000)
    	ElseIf Not ProcessExists("osk.exe") and ControlGetFocus("Unbenannt - Editor") = "Edit3" Then
    		ShellExecute(@WindowsDir & "\System32\osk.exe")
    		Sleep(1000)
               EndIf
    WEnd
    Alles anzeigen
  • Bildschirmtastatur automatisch öffnen bei "Fenster klick"

    • Frost0071
    • 20. Dezember 2016 um 14:48

    Super das sieht gut aus.

    Eins hab ich noch, wenn ich die Tastatur auch noch in anderen Fenstern im gleichen Programm aufrufen will kann ich das dann einfach so kopieren?

    AutoIt
    #RequireAdmin
    #AutoIt3Wrapper_UseX64=y
    
    
    While Sleep(1000)
    	If Not ProcessExists("osk.exe") and ControlGetFocus("Unbenannt - Editor") = "Edit1" Then
    		ShellExecute(@WindowsDir & "\System32\osk.exe")
    		Sleep(1000)
    	If Not ProcessExists("osk.exe") and ControlGetFocus("Unbenannt - Editor") = "Edit2" Then
    		ShellExecute(@WindowsDir & "\System32\osk.exe")
    		Sleep(1000)
    	If Not ProcessExists("osk.exe") and ControlGetFocus("Unbenannt - Editor") = "Edit3" Then
    		ShellExecute(@WindowsDir & "\System32\osk.exe")
    		Sleep(1000)
    
    
    	EndIf
    WEnd
    Alles anzeigen
  • Bildschirmtastatur automatisch öffnen bei "Fenster klick"

    • Frost0071
    • 20. Dezember 2016 um 14:03

    Okay ich denke das habe ich kapiert.

    jetzt noch eine Frage, das Script beendet ja die Tastatur sobald ich wo anderst hin klicke gibt es auch eine Möglichkeit die Tastatur so lange offen zu lassen bis ich sie beende? Und dann durch erneute klick in dieses eine Feld wieder zu starten?

  • Bildschirmtastatur automatisch öffnen bei "Fenster klick"

    • Frost0071
    • 20. Dezember 2016 um 13:23

    Super danke werde das mal ausprobieren.

    wenn ich es dann ein mein Programm anpasse dann muss ich nur das "Editor" gegen meinen Programmnamen austauschen oder?
    Muss der Programmname komplet identisch sein?

    Danke

  • Bildschirmtastatur automatisch öffnen bei "Fenster klick"

    • Frost0071
    • 20. Dezember 2016 um 12:33

    Hallo Zusammen,

    ich bin neu hier und habe auch gleich mal eine Frage. Eins vorweg meine Computerkenntnisse hören leider bei der Installation von Programmen auf || das bedeutet meine Programmierkenntnisse sind nahezu 0.
    Trotzdem möchte ich gerne ein kleines Script haben, ich hoffe oder denke das auch ziemlich einfach ist. Leider für mich aber doch eine große Hürde.

    Folgendes würde ich gerne realisieren:

    Ich habe bei mir in der Werkstatt einen XP Rechner der eine Maschine steuert, der PC wird über eine Touchscreen gesteuert. Jetzt gibt es da ein Feld in der Bedienoberfläche in das man Befehle mit der Tastatur eingeben kann.
    Ich würde jetzt gerne die Bildschirmtastatur öffnen wenn ich genau in dieses Feld per Touch klicke. Ist das möglich? Mit der AutoIt Window Info habe ich herausgefunden das das Feld die CLASS:Edit und die INSTANCE:4 hat hilft das?
    Oder was brauche ich dazu?

    Vielen Dank schon mal

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™