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

Beiträge von MAXoloXAM

  • Sudoku Random Generator

    • MAXoloXAM
    • 18. November 2017 um 15:12
    Zitat von misterspeed

    Nachtrag... hab das mal erweitert oben. Der Fehler tritt scheinbar immer dann auf, wenn die Variable $except alle Zahlen von 1 bis 9 enthält. Macht ja auch Sinn, denn eine der 9 Zahlen muss definitiv eingetragen werden, wenn alle Zahlen ignoriert werden und nicht erlaubt sind wird er nie eine gültige Zahl finden.

    Aber ich lass doch jedes mal wenn er in die read() funktion kommt die Variable löschen ?

  • Sudoku Random Generator

    • MAXoloXAM
    • 18. November 2017 um 14:51

    Na klar, war das erste mal für mich in ein solches Forum zu schreiben.

    Also auf ein neues...


    Script-Ablauf:

    • GUI-Erstellung mit Label und Farblichen Hintergrund (bis GUISetState() )
    • Erste Horizontale Zeile Zufällig ausfüllen mithilfe von ERandom() (bis $T="")
    • Alle anderen Zahlen ermitteln unter Einhaltung bestimmter Regeln, ich lasse dabei alle Zahlen die bereits Stehen, heißt die Zahlen die Horizontal, Vertikal, oder sich im aktuellen Kästchen zum aktuellen Label das derzeit berechnet wird auslesen, lasse sie in einer Variable als String Speichern und gebe sie an die UDF(ERandom) weiter...

      ERandom($min,$max,$except)

    ...soll einen wert zwischen $min und $max finden die aber nicht in $except enthalten sind.

    AutoIt: SudoKU.au3
    #include <StaticConstants.au3>
    #include <Random.au3>
    Dim $Labels[10][10]
    $X=12
    $Y=12
    HotKeySet("{ESC}","e")
    Func e()
       Exit
    EndFunc
    GUICreate("SuDoKu",400,400)
    GUICtrlCreateLabel("",10,10,380,380)
    GUICtrlSetBkColor(-1,0xABABAB)
    GUICtrlCreateLabel("",136,12,2,376)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",388,10,2,380)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",12,388,376,2)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",12,10,376,2)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",10,10,2,380)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",262,12,2,376)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",12,136,376,2)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlCreateLabel("",12,262,376,2)
    GUICtrlSetBkColor(-1,0x000000)
    
    For $a=1 To 9 ;runter
    For $0=1 To 9 ;rechts
    
       $Labels[$a][$0] = GUICtrlCreateLabel("",$X,$Y,40,40,Bitor($SS_CENTER,$SS_CENTERIMAGE))
       GUICtrlSetFont(-1,15)
       $X+=42
    Next
    $Y+=42
    $X=12
    Next
    GUISetState()
    $T=Random(1,9,1)
    For $0=1 to 9
       Sleep(100)
       GUICtrlSetData($Labels[1][$0],StringRight($T,1))
       If $0=9 Then ExitLoop
       $T&=ERandom(1,9,$T)
    Next
    $T=""
    For $a=2 To 9
    
    
       For $0=1 To 9
          If      $a>0 And $a<4 And $0>0 And $0<4 Then
             $KL=1
          ElseIf $a>0 And $a<4 And $0>3 And $0<7 Then
             $KL=2
          ElseIf $a>0 And $a<4 And $0>6 And $0<10 Then
             $KL=3
          ElseIf $a>3 And $a<7 And $0>0 And $0<4 Then
             $KL=4
          ElseIf $a>3 And $a<7 And $0>3 And $0<7 Then
             $KL=5
          ElseIf $a>3 And $a<7 And $0>6 And $0<10 Then
             $KL=6
          ElseIf $a>6 And $a<10 And $0>0 And $0<4 Then
             $KL=7
          ElseIf $a>6 And $a<10 And $0>3 And $0<7 Then
             $KL=8
          ElseIf $a>6 And $a<10 And $0>6 And $0<10 Then
             $KL=9
          EndIf
          Sleep(100)
          GUICtrlSetData($Labels[$a][$0],ERandom(1,9,Read($KL,$0,$a)))
       Next
    Next
    
    ;While 1
    
    ;WEnd
    
    Func Read($K,$V,$H)
       $B=""
       $T=""
       $B&=StringStripWS(Kastchen($K),8)
       $B&=StringStripWS(Ver($V),8)
       $B&=StringStripWS(Hor($H),8)
       Return $B
    EndFunc
    
    Func Kastchen($K)
    $T=""
    If $K=1 Then
    For $a=1 To 3
       For $0 =1 To 3
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=2 Then
    For $a=1 To 3
       For $0 =3 To 6
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=3 Then
    For $a=1 To 3
       For $0 =6 To 9
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=4 Then
    For $a=3 To 6
       For $0 =1 To 3
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=5 Then
    For $a=3 To 6
       For $0 =3 To 6
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=6 Then
    For $a=3 To 6
       For $0 =6 To 9
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=7 Then
    For $a=6 To 9
       For $0 =1 To 3
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=8 Then
    For $a=6 To 9
       For $0 =3 To 6
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    ElseIf $K=9 Then
    For $a=6 To 9
       For $0 =6 To 9
          $T&=GUICtrlRead($Labels[$a][$0])
       Next
    Next
    EndIf
    Return $T
    EndFunc
    Func Ver($V)
       $T=""
       For $a=1 To 9
          $T&=GUICtrlRead($Labels[$a][$V])
       Next
       Return $T
    EndFunc
    Func Hor($H)
       $T=""
       For $0=1 To 9
          $T&=GUICtrlRead($Labels[$H][$0])
       Next
       Return $T
    EndFunc
    Alles anzeigen
    AutoIt: ERandom.au3
    Func ERandom($min,$max,$except)
    $ZZ=StringSplit($except,"")
    Do
       $W=True
       $R=Random($min,$max,1)
       For $i=1 To $ZZ[0]
          If $R=$ZZ[$i] Then
             $W=False
             ExitLoop
          EndIf
       Next
    Until $W= True
    Return $R
    EndFunc
    Alles anzeigen
  • Sudoku Random Generator

    • MAXoloXAM
    • 18. November 2017 um 13:43

    Hi ich hab mir heute morgen vorgenommen ein eigenen Sudoku Generator zu basteln. Ich bin auch schon ziemlich weit gekommen für meine Verhältnisse, aber nachdem ich die ersten Regeln für den Generator eingebaut hab füllt er nicht mehr das komplette Rätsel aus.

    Ich denke er hängt bei meiner kleinen mini Random UDF aber ich bin noch nicht dahinter gekommen

    da er nach jeden neustarten des Scripts, unterschiedlich mehr oder weniger ausfüllt.

    Wäre cool wenn jemand zeit hatte mal drüber zu sehen und evtl etwas sieht das ich übersehen hab.

    Danke

    ERandom()

    Func ERandom($min,$max,$except)

    $ZZ=StringSplit($except,"")

    Do

    $W=True

    $R=Random($min,$max,1)

    For $i=1 To $ZZ[0]

    If $R=$ZZ[$i] Then

    $W=False

    ExitLoop

    EndIf

    Next

    Until $W= True

    Return $R

    EndFunc

    SudoKU

    #include <StaticConstants.au3>

    #include <Random.au3>

    Dim $Labels[10][10]

    $X=12

    $Y=12

    HotKeySet("{ESC}","e")

    Func e()

    Exit

    EndFunc

    GUICreate("SuDoKu",400,400)

    GUICtrlCreateLabel("",10,10,380,380)

    GUICtrlSetBkColor(-1,0xABABAB)

    GUICtrlCreateLabel("",136,12,2,376)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",388,10,2,380)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",12,388,376,2)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",12,10,376,2)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",10,10,2,380)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",262,12,2,376)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",12,136,376,2)

    GUICtrlSetBkColor(-1,0x000000)

    GUICtrlCreateLabel("",12,262,376,2)

    GUICtrlSetBkColor(-1,0x000000)

    For $a=1 To 9 ;runter

    For $0=1 To 9 ;rechts

    $Labels[$a][$0] = GUICtrlCreateLabel("",$X,$Y,40,40,Bitor($SS_CENTER,$SS_CENTERIMAGE))

    GUICtrlSetFont(-1,15)

    $X+=42

    Next

    $Y+=42

    $X=12

    Next

    GUISetState()

    $T=Random(1,9,1)

    For $0=1 to 9

    GUICtrlSetData($Labels[1][$0],StringRight($T,1))

    If $0=9 Then ExitLoop

    $T&=ERandom(1,9,$T)

    Next

    $T=""

    Sleep(1000)

    For $a=2 To 9


    For $0=1 To 9

    If $a>0 And $a<4 And $0>0 And $0<4 Then

    $KL=1

    ElseIf $a>0 And $a<4 And $0>3 And $0<7 Then

    $KL=2

    ElseIf $a>0 And $a<4 And $0>6 And $0<10 Then

    $KL=3

    ElseIf $a>3 And $a<7 And $0>0 And $0<4 Then

    $KL=4

    ElseIf $a>3 And $a<7 And $0>3 And $0<7 Then

    $KL=5

    ElseIf $a>3 And $a<7 And $0>6 And $0<10 Then

    $KL=6

    ElseIf $a>6 And $a<10 And $0>0 And $0<4 Then

    $KL=7

    ElseIf $a>6 And $a<10 And $0>3 And $0<7 Then

    $KL=8

    ElseIf $a>6 And $a<10 And $0>6 And $0<10 Then

    $KL=9

    EndIf

    GUICtrlSetData($Labels[$a][$0],ERandom(1,9,Read($KL,$0,$a)))

    Next

    Next

    ;While 1

    ;WEnd

    Func Read($K,$V,$H)

    $B=""

    $T=""

    $B&=StringStripWS(Kastchen($K),8)

    $B&=StringStripWS(Ver($V),8)

    $B&=StringStripWS(Hor($H),8)

    Return $B

    EndFunc

    Func Kastchen($K)

    $T=""

    If $K=1 Then

    For $a=1 To 3

    For $0 =1 To 3

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=2 Then

    For $a=1 To 3

    For $0 =3 To 6

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=3 Then

    For $a=1 To 3

    For $0 =6 To 9

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=4 Then

    For $a=3 To 6

    For $0 =1 To 3

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=5 Then

    For $a=3 To 6

    For $0 =3 To 6

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=6 Then

    For $a=3 To 6

    For $0 =6 To 9

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=7 Then

    For $a=6 To 9

    For $0 =1 To 3

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=8 Then

    For $a=6 To 9

    For $0 =3 To 6

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    ElseIf $K=9 Then

    For $a=6 To 9

    For $0 =6 To 9

    $T&=GUICtrlRead($Labels[$a][$0])

    Next

    Next

    EndIf

    Return $T

    EndFunc

    Func Ver($V)

    $T=""

    For $a=1 To 9

    $T&=GUICtrlRead($Labels[$a][$V])

    Next

    Return $T

    EndFunc

    Func Hor($H)

    $T=""

    For $0=1 To 9

    $T&=GUICtrlRead($Labels[$H][$0])

    Next

    Return $T

    EndFunc

  • Key( ) - Tastatur- und Maustastenabfrage incl. Repeat und Doppelklick

    • MAXoloXAM
    • 18. April 2017 um 14:57

    Hey evtl komm ich ein wenig spät aber ich habe beim benutzen deiner UDF immer etwas vermisst entweder bin ich zu blöd auf die Funktion zuzugreifen dafür oder die Funktion war wirklich nicht dabei.
    Und zwar wollte ich nicht jede Taste einzeln abfragen mit:

    AutoIt
    While 1
       While Key()
          Switch Key()
            case "A"
               MsgBox(0,"Info","Es wurde A gedrückt")
          EndSwitch
       Wend
    Wend

    mit dieser kleinen Änderung kann man jetzt einfach:

    AutoIt
    While 1
       While Key()
    	  MsgBox(0,"","Es wurde "&Key("NAME")&" gedrückt")
       WEnd
    WEnd

    allerdings nur kann man nicht die Duration und Tastenkobinationen abfragen evtl macht das ja noch einer ;)
    Da ich auch kein Beispiel von Deep Thought finden konnte hab ich das ergänzt vill. kann das ja noch ein anderer gebrauchen

    Spoiler anzeigen
    C
    ;************************************************************************************************************
    ;* *
    ;* *
    ;* Key() *
    ;* ===== *
    ;* *
    ;* Version 1 *
    ;* Autor: Deep Thought (www.autoit.de) *
    ;* Syntax: Key( $Tastenname, [$Repeatmethode, [$Delay]] ) *
    ;* *
    ;* Abfrage, ob eine (bestimmte) (Maus-)Taste gedrückt wird. *
    ;* (Komfortable Alternative zum UDF-Befehl _IsPreset aus der Include-Datei <Misc.au3>) *
    ;* *
    ;* *
    ;* *
    ;* PARAMETER: *
    ;* ========== *
    ;* *
    ;* $NAME z.B. ("LSHIFT") => - Tastenname, fragt ab, ob eine bestimmte Taste gedrückt wird, *
    ;* z.B. die linke Umschalttaste *
    ;* *
    ;* - dabei sind zahllose Bezeichnungsvarianten möglich z.B.: *
    ;* "LSHIFT", "L SHIFT", "SHIFT L", "SHIFT LINKS", "LINKE SHIFT" *
    ;* *
    ;* - ob Groß-/Kleinschreibung spielt keine Rolle *
    ;* *
    ;* - Besonderheit bei SHIFT, CTRL, ALT und WIN: wenn z.B. nur "ALT" *
    ;* angegeben wird, dann ist es egal, ob die linke oder rechte Taste *
    ;* *
    ;* RÜCKGABEWERT: TRUE / FALSE *
    ;* ============= *
    ;* *
    ;* *
    ;* ("") => - überprüft, ob z.Zt. keine Taste gedrückt wird *
    ;* *
    ;* RÜCKGABEWERT: TRUE (=keine Taste)/ FALSE *
    ;* ============= *
    ;* *
    ;* *
    ;* ("HEX") => - gibt die aktuelle Taste als Hex-Zahl wieder *
    ;* *
    ;* RÜCKGABEWERT: zweistellige Hex-Zahl ("00", wenn keine Taste) *
    ;* ============= *
    ;* *
    ;* *
    ;* ("NAME") => - gibt die aktuelle Taste als Name wieder *
    ;* *
    ;* RÜCKGABEWERT: Die Namen der Tasten sind von Deep Thought kopiert
    ;* ============= *
    ;* *
    ;* *
    ;* () => - gibt die aktuelle Taste als Tastennamen wieder (Bezeichnung ist *
    ;* identisch wie beim Send()-Befehl) *
    ;* *
    ;* RÜCKGABEWERT: z.B. "HOME", "PGDN" oder "NUMPAD3" *
    ;* ============= *
    ;* *
    ;* *
    ;* $Repeat (False)oder () => - Kein Repeat. RÜCKGABEWERT nur, in dem Moment wo Taste gedrückt wird*
    ;* *
    ;* *
    ;* ("Loslassen") => - Wie False, jedoch RÜCKGABEWERT nur im Moment des Taste loslassens *
    ;* *
    ;* *
    ;* ("Standard") => - Anschlag-Wiederholverzögerung = 800 Milisekunden *
    ;* - Wiederholgeschwindigkeit alle 200 Milisekunden *
    ;* *
    ;* *
    ;* (>0) => - Wiederholgeschwindigkeit in Milisekunden *
    ;* - keine Anschlag-Wiederholverzögerung, Repeat fängt sofort an *
    ;* *
    ;* *
    ;* (<0) => - Wiederholgeschwindigkeit in Milisekunden *
    ;* - mit Anschlag-Wiederholverzögerung (siehe auch $Delay) *
    ;* *
    ;* *
    ;* ("Doppelklick") => - Es wird überprüft, ob eine Taste in einem definierten Zeitrahmen *
    ;* (siehe $Delay) nur einmal oder doppelt angeklickt wurde *
    ;* *
    ;* RÜCKGABEWERT: z.B. "HOME" (ohne Doppelklick) *
    ;* ============= oder "Doppelklick HOME" (mit Doppelklick) *
    ;* *
    ;* *
    ;* $Delay (>=0) => - Bei Repeat: Anschlag-Wiederholverzögerung in Milisekunden *
    ;* *
    ;* - Bei Doppelklick: max. Gültigkeitsbereich zwischen 2 Klicks (in msek) *
    ;* *
    ;* *
    ;* (Default) / () => - Bei Repeat: 800 msek Anschlag-Wiederholverzögerung *
    ;* *
    ;* - Bei Doppelklick: 500 msek Gültigkeit zwischen 2 Klicks *
    ;* *
    ;* *
    ;************************************************************************************************************
    #Region Includes und Globale Variabeln
    #include-once
    #include <Misc.au3>
    Global $User32DLL
    ; Variabeln, die sich der Befehl "Key()" für den nächsten Aufruf merkt
    Global $AHUDFsKey_Merken_Akt = False ; welche Taste (bzw. keine Taste) beim letzten mal
    Global $AHUDFsKey_Merken_Repeatzeit = False ; Repeat
    Global $AHUDFsKey_Merken_Anschlagbeginn ; wichtig für Repeat oder "Doppelklick"
    Global $AHUDFsKey_Merken_AnzKlicks = 0 ; wichtig für "Doppelklick"
    Global $AHUDFsKey_Merken_SelbeTaste = False ; wichtig für "Doppelklick"
    Global $AHUDFsKey_Merken_Akt2
    #EndRegion
    ; _
    Func Key($Name=Default,$Repeat=False,$Delay=Default)
    Local $Debug = False ; Zum testen dieser Funktion
    ; Standardwerte bei bestimmten Modi zuordnen
    Switch $Repeat
    Case "Standard"
    $Repeat = -200
    $Delay = 800
    Case "Doppelklick"
    If $Delay = Default then $Delay = 500 ; in diesem Fall die max. Verzögerung zwischen zwei Tastenklicks
    Case Else
    If $Delay = Default then $Delay = 800
    EndSwitch
    ; Aktuelle Taste abfragen und überprüfen, ob sich was seit der letzten Abfrage geändert hat
    Local $Aktuell = AHUDFKey_WelcheTaste($Name)
    Local $Anders = Not(($AHUDFsKey_Merken_Akt = $Aktuell))
    ; Standard-Rückgabewert ermitteln, wenn keine Taste gedrückt ist
    Switch $Name ; erwarteter Rückgabewert je nach Abfragemethode
    Case Default ; ()
    Local $KeineTaste = False
    Case "NAME"
    Return Name()
    Case "HEX" ; ("HEX")
    Local $KeineTaste = "00"
    Case "" ; ("")
    Local $KeineTaste = True
    Case Else ; konkrete Tastenabfragen
    Local $KeineTaste = False
    EndSwitch
    ; ### Debug
    If $Debug Then ToolTip("Name: "&$Name&@CRLF&"RepeatMode: "&$Repeat&@CRLF&"KeineTaste: "&$KeineTaste&@CRLF&@CRLF&"Aktuell: "&$Aktuell&@CRLF&"Anders: "&$Anders&@CRLF&@CRLF&"MerkenAkt: "&$AHUDFsKey_Merken_Akt&@CRLF&"MerkenTime: "&Int(TimerDiff($AHUDFsKey_Merken_Repeatzeit)))
    ; Neue Taste gedrückt
    If $Anders And Not($Aktuell = $KeineTaste) Then
    If $Debug Then Beep(3000,150)
    $AHUDFsKey_Merken_Akt = $Aktuell
    $AHUDFsKey_Merken_Repeatzeit = TimerInit()
    Select ; Verhalten je nach Repeat-Modus
    Case $Repeat = False
    Return $Aktuell
    Case $Repeat = "Loslassen"
    Return $KeineTaste
    Case $Repeat = "Doppelklick"
    If $AHUDFsKey_Merken_AnzKlicks < 1 Then
    $AHUDFsKey_Merken_Anschlagbeginn = TimerInit()
    $AHUDFsKey_Merken_AnzKlicks += 1
    $AHUDFsKey_Merken_SelbeTaste = $Aktuell
    Return $Aktuell
    Else
    $AHUDFsKey_Merken_AnzKlicks = 0
    If $AHUDFsKey_Merken_SelbeTaste = $Aktuell Then
    Return "Doppelklick "&$Aktuell
    Else
    Return $Aktuell
    EndIf
    EndIf
    Case $Repeat > 0 ; einfaches Repeat
    $AHUDFsKey_Merken_Repeatzeit = TimerInit()
    Return $Aktuell
    Case $Repeat < 0 ; Repeat mit Anschlagverzögerung
    $AHUDFsKey_Merken_Repeatzeit = TimerInit()
    $AHUDFsKey_Merken_Anschlagbeginn = $AHUDFsKey_Merken_Repeatzeit
    Return $Aktuell
    EndSelect
    EndIf
    ; Taste wird z.Zt. immer noch gedrückt
    If Not($Aktuell = $KeineTaste) Then
    If $Debug Then Beep()
    Select ; Verhalten je nach Repeat-Modus
    Case $Repeat = False
    Return $KeineTaste
    Case $Repeat = "Loslassen"
    Return $KeineTaste
    Case $Repeat = "Doppelklick"
    Return $KeineTaste
    Case $Repeat > 0 ; einfaches Repeat
    If TimerDiff($AHUDFsKey_Merken_Repeatzeit) > $Repeat Then
    $AHUDFsKey_Merken_Repeatzeit = TimerInit()
    Return $Aktuell
    Else
    Return $KeineTaste
    EndIf
    Case $Repeat < 0 ; Repeat mit Anschlagverzögerung
    If (TimerDiff($AHUDFsKey_Merken_Repeatzeit) > -$Repeat) And (TimerDiff($AHUDFsKey_Merken_Anschlagbeginn) > $Delay) Then
    $AHUDFsKey_Merken_Repeatzeit = TimerInit()
    Return $Aktuell
    Else
    Return $KeineTaste
    EndIf
    EndSelect
    EndIf
    ; Taste gerade wieder losgelassen
    If $Anders And ($Aktuell = $KeineTaste) Then
    If $Debug Then Beep(150,300)
    $AHUDFsKey_Merken_Akt2 = $AHUDFsKey_Merken_Akt
    $AHUDFsKey_Merken_Akt = $Aktuell
    Select ; Verhalten je nach Repeat-Modus
    Case $Repeat = False
    Return $KeineTaste
    Case $Repeat = "Loslassen"
    Return $AHUDFsKey_Merken_Akt2
    Case $Repeat = "Doppelklick"
    Return $KeineTaste
    Case $Repeat > 0 ; einfaches Repeat
    Return $KeineTaste
    Case $Repeat < 0 ; Repeat mit Anschlagverzögerung
    Return $KeineTaste
    EndSelect
    EndIf
    ; z.Zt. wird keine Taste gedrückt
    If $Debug Then Beep(5000)
    If ($Repeat = "Doppelklick") And (TimerDiff($AHUDFsKey_Merken_Anschlagbeginn) > $Delay) And ($AHUDFsKey_Merken_AnzKlicks > 0) Then $AHUDFsKey_Merken_AnzKlicks = 0
    Return $KeineTaste
    EndFunc
    
    
    ;*************************************
    ;* *
    ;* Unterfunktion *
    ;* *
    ;*************************************
    #Region
    Func AHUDFKey_WelcheTaste($Name=Default, $Repeat=False)
    If Not($User32DLL) Then $User32DLL = DllOpen("user32.dll")
    Local $Code, $Code2 = False
    Switch $Name
    ;****************************************************************
    ; Name als als Returnwert
    ;****************************************************************
    ;****************************************************************
    ; Tastenname oder Hex-Code als Returnwert
    ;****************************************************************
    Case Default, "HEX"
    For $n = 254 to 1 Step -1
    If _IsPressed(Hex($n,2), $User32DLL) Then ExitLoop
    Next
    If $Name = "HEX" Then Return Hex($n,2) ; Hex-Code
    Switch Hex($n,2)
    ;======================================================
    ; Maustasten
    ;======================================================
    Case "01"
    $Name = "LMAUS"
    Case "02"
    $Name = "RMAUS"
    Case "04"
    $Name = "MMAUS"
    Case "05"
    $Name = "X1MAUS"
    Case "06"
    $Name = "X2MAUS"
    ;======================================================
    ; Shift, Strg, Alt, Win
    ;======================================================
    Case "A0"
    $Name = "LSHIFT"
    Case "A1"
    $Name = "RSHIFT"
    Case "A2"
    $Name = "LCTRL"
    Case "A3"
    $Name = "RCTRL"
    Case "A4"
    $Name = "LALT"
    Case "A5"
    $Name = "RALT"
    Case "5B"
    $Name = "LWIN"
    Case "5C"
    $Name = "RWIN"
    ;======================================================
    ; Cursor, Seite
    ;======================================================
    Case "25"
    $Name = "LEFT"
    Case "27"
    $Name = "RIGHT"
    Case "26"
    $Name = "UP"
    Case "28"
    $Name = "DOWN"
    Case "24"
    $Name = "HOME"
    Case "23"
    $Name = "END"
    Case "21"
    $Name = "PGUP"
    Case "22"
    $Name = "PGDN"
    ;======================================================
    ; Zehner-Tastatur
    ;======================================================
    Case "6A"
    $Name = "NUMPADMULT"
    Case "6B"
    $Name = "NUMPADADD"
    Case "6D"
    $Name = "NUMPADSUB"
    Case "6E"
    $Name = "NUMPADDOT"
    Case "6F"
    $Name = "NUMPADDIV"
    ;======================================================
    ; sonstige Zeichen
    ;======================================================
    Case "BC"
    $Name = ","
    Case "BD"
    $Name = "-"
    Case "BE"
    $Name = "."
    Case "DB"
    $Name = "ß"
    Case "DC"
    $Name = "°"
    Case "DD"
    $Name = "´"
    Case "E2"
    $Name = "<"
    Case "20"
    $Name = "SPACE"
    ;======================================================
    ; sonstige Steuerung
    ;======================================================
    Case "08"
    $Name = "BACKSPACE"
    Case "09"
    $Name = "TAB"
    Case "0D"
    $Name = "ENTER"
    Case "13" ; Achtung: Code nur sehr kurz abrufbar (Sleep() kann zu falschen Ergebnissen führen; auch keine Tastenwiederholung
    $Name = "PAUSE"
    Case "14"
    $Name = "CAPSLOCK toggle"
    Case "1B"
    $Name = "ESC"
    Case "2C"
    $Name = "PRINTSCREEN"
    Case "2D"
    $Name = "INS"
    Case "2E"
    $Name = "DEL"
    Case "5D"
    $Name = "APPSKEY"
    Case "90"
    $Name = "NUMLOCK toggle"
    Case "91"
    $Name = "SCROLLLOCK toggle"
    ;======================================================
    ; keine Taste gedrückt
    ;======================================================
    Case "00"
    $Name = False
    ;======================================================
    ; A-Z, 0-9, F1-F16 oder direkter Tastaturcode
    ;======================================================
    Case ELSE
    Select
    Case ($N >= 112) And ($N <= 127)
    $Name = "F"&$N-111
    Case ($N >= 96) And ($N <= 105)
    $Name = "NUMPAD"&$N-96
    Case ($N >= Asc("A")) And ($N <= Asc("Z"))
    $Name = Chr($N)
    Case ($N >= Asc("a")) And ($N <= Asc("z"))
    $Name = Chr($N-32)
    Case ($N >= Asc("0")) And ($N <= Asc("9"))
    $Name = Chr($N)
    Case Else ; direkter Tastaturcode wie in _IsPreset, da keine passende Zuordnung gefunden wurde
    $Name = Hex($N,2)
    EndSelect
    EndSwitch
    Return $Name
    ;****************************************************************
    ; True / False als Returnwert
    ;****************************************************************
    ;==============================================================
    ; Maustasten
    ;==============================================================
    Case "LMAUS", "L Maus", "LINKE MAUS", "MAUS L", "MAUS LINKS"
    $Code = "01"
    Case "RMAUS", "R MAUS", "RECHTE MAUS", "MAUS R", "MAUS RECHTS"
    $Code = "02"
    Case "MMAUS", "M MAUS", "MITTLERE MAUS", "MAUS M", "MAUS MITTE"
    $Code = "04"
    Case "1MAUS", "X1MAUS", "X1 MAUS", "MAUS X1"
    $Code = "05"
    Case "2MAUS", "X2MAUS", "X2 MAUS", "MAUS X2"
    $Code = "06"
    ;==============================================================
    ; Shift, Strg, Alt, Win
    ;==============================================================
    Case "LSHIFT", "L SHIFT", "SHIFT L", "SHIFT LINKS", "LINKE SHIFT"
    $Code = "A0"
    Case "RSHIFT", "R SHIFT", "SHIFT R", "SHIFT RECHTS", "RECHTE SHIFT"
    $Code = "A1"
    Case "LCTRL", "L CTRL", "CTRL L", "CTRL LINKS", "LINKE CTRL", "LSTRG", "L STRG", "STRG L", "STRG LINKS", "LINKE STRG"
    $Code = "A2"
    Case "RCTRL", "R CTRL", "CTRL R", "CTRL RECHTS", "RECHTE CTRL", "RSTRG", "R STRG", "STRG R", "STRG RECHTS", "RECHTE STRG"
    $Code = "A3"
    Case "LALT", "L ALT", "ALT L", "ALT LINKS", "LINKE ALT"
    $Code = "A4"
    Case "RALT", "R ALT", "ALT R", "ALT RECHTS", "RECHTE ALT", "ALTGR", "ALT GR"
    $Code = "A5"
    Case "LWIN", "L WIN", "LWINDOWS", "L WINDOWS", "WIN L", "WIN LINKS", "WINDOWS L", "WINDOWS LINKS", "LINKE WIN", "LINKE WINDOWS"
    $Code = "5B"
    Case "RWIN", "R WIN", "RWINDOWS", "R WINDOWS", "WIN R", "WIN RECHTS", "WINDOWS R", "WINDOWS RECHTS", "RECHTE WIN", "RECHTS WINDOWS"
    $Code = "5C"
    Case "SHIFT" ; egal ob li/re
    $Code = "A0"
    $Code2 = "A1"
    Case "CTRL", "STRG" ; egal ob li/re
    $Code = "A2"
    $Code2 = "A3"
    Case "ALT" ; egal ob li/re
    $Code = "A4"
    $Code2 = "A5"
    Case "WIN", "WINDOWS" ; egal ob li/re
    $Code = "5B"
    $Code2 = "5C"
    ;==============================================================
    ; Cursor, Seite
    ;==============================================================
    Case "LEFT", "CURSOR LEFT", "CURSOR LINKS", "LINKS"
    $Code = "25"
    Case "RIGHT", "CURSOR RIGHT", "CURSOR RECHTS", "RECHTS"
    $Code = "27"
    Case "UP", "CURSOR UP", "CURSOR HOCH", "CURSOR RAUF", "HOCH", "RAUF"
    $Code = "26"
    Case "DOWN", "CURSOR DOWN", "CURSOR RUNTER", "RUNTER"
    $Code = "28"
    Case "HOME", "POS1", "POS 1"
    $Code = "24"
    Case "END", "ENDE"
    $Code = "23"
    Case "PGUP", "PG UP", "PAGEUP", "PAGE UP", "BILD HOCH", "BILD RAUF", "SEITE HOCH", "SEITE RAUF"
    $Code = "21"
    Case "PGDN", "PG DN", "PGDOWN", "PG DOWN", "PAGEDOWN", "PAGE DOWN", "BILD RUNTER", "SEITE RUNTER"
    $Code = "22"
    ;==============================================================
    ; Zehner-Tastatur
    ;==============================================================
    Case "NUMPAD*", "NUMPAD *", "NUMPADMULT"
    $Code = "6A"
    Case "NUMPAD+", "NUMPAD +", "NUMPADADD"
    $Code = "6B"
    Case "NUMPAD-", "NUMPAD -", "NUMPADSUB"
    $Code = "6D"
    Case "NUMPAD,", "NUMPAD ,", "NUMPAD KOMMA", "NUMPADDOT"
    $Code = "6E"
    Case "NUMPAD:", "NUMPAD :", "NUMPADDIV"
    $Code = "6F"
    ;==============================================================
    ; sonstige Zeichen
    ;==============================================================
    Case ",", ";", "KOMMA"
    $Code = "BC"
    Case "-", "_"
    $Code = "BD"
    Case ".", ":", "PUNKT"
    $Code = "BE"
    Case "ß", "?", "\"
    $Code = "DB"
    Case "°", "^"
    $Code = "DC"
    Case "´", "`"
    $Code = "DD"
    Case "<", ">", "|"
    $Code = "E2"
    Case " ", "SPACE"
    $Code = "20"
    ;==============================================================
    ; sonstige Steuerung
    ;==============================================================
    Case "BS", "BACKSPACE"
    $Code = "08"
    Case "TAB", "TABULATOR"
    $Code = "09"
    Case "RETURN", "ENTER"
    $Code = "0D"
    Case "PAUSE"
    $Code = "13"
    Case "CAPSLOCK", "CAPSLOCK toggle"
    $Code = "14"
    Case "ESC", "ESCAPE"
    $Code = "1B"
    Case "DRUCK", "DRUCKEN", "PRINTSCREEN", "PRINT SCREEN"
    $Code = "2C"
    Case "INS", "INSERT", "EINFG", "EINFÜGEN"
    $Code = "2D"
    Case "DEL", "DELETE", "ENTF", "ENTFERNEN"
    $Code = "2E"
    Case "KONTEXT", "Context", "APPSKEY"
    $Code = "5D"
    Case "NUM", "NUMLOCK", "NUMLOCK toggle"
    $Code = "90"
    Case "ROLLEN", "SCROLLLOCK", "SCROLLLOCK toggle"
    $Code = "91"
    ;==============================================================
    ; keine Taste gedrückt
    ;==============================================================
    Case ""
    For $n = 0 to 255
    If _IsPressed(Hex($n,2), $User32DLL) Then ExitLoop
    Next
    If $n >= 255 Then Return True
    ;==============================================================
    ; A-Z, 0-9, F1-F16 oder direkter Tastaturcode
    ;==============================================================
    Case ELSE
    Switch StringLen($Name)
    Case 1
    If (Asc($Name) >= Asc("A")) And (Asc($Name) <= Asc("Z")) Then $Code = Hex(ASC($Name)) ; A-Z
    If (Asc($Name) >= Asc("0")) And (Asc($Name) <= Asc("9")) Then $Code = Hex(ASC($Name)) ; 0-9
    Case 2
    If ((Asc(StringLeft($Name,1)) >= Asc("0")) And (Asc(StringLeft($Name,1)) <= Asc("9"))) Or ((Asc(StringLeft($Name,1)) >= Asc("A")) And (Asc(StringLeft($Name,1)) <= Asc("E"))) Then $Code = $Name ; direkt der Tastaturcode wie bei _IsPreset
    If StringLeft($Name,1) = "F" Then $Code = Hex(111+Number(StringTrimLeft($Name,1))) ; F1-F9
    Case 3
    If StringLeft($Name,1) = "F" Then $Code = Hex(111+Number(StringTrimLeft($Name,1))) ; F10-F16
    Case 4
    If StringLeft($Name,3) = "NUM" Then $Code = Hex(96+Number(StringRight($Name,1))) ; Num0-Num9
    Case 5
    If StringLeft($Name,4) = "NUM " Then $Code = Hex(96+Number(StringRight($Name,1))) ; Num0-Num9
    Case 7
    If StringLeft($Name,6) = "NUMPAD" Then $Code = Hex(96+Number(StringRight($Name,1))) ; Num0-Num9
    EndSwitch
    EndSwitch
    Return _IsPressed($Code, $User32DLL) Or _IsPressed($Code2, $User32DLL)
    EndFunc
    #EndRegion
    Func Name()
    For $n = 254 to 1 Step -1
    If _IsPressed(Hex($n,2), $User32DLL) Then ExitLoop
    Next
    Switch Hex($n,2)
    ;======================================================
    ; Maustasten
    ;======================================================
    Case "00"
    $Name = False
    Case "01"
    $Name = "LMAUS"
    Case "02"
    $Name = "RMAUS"
    Case "04"
    $Name = "MMAUS"
    Case "05"
    $Name = "X1MAUS"
    Case "06"
    $Name = "X2MAUS"
    ;======================================================
    ; Shift, Strg, Alt, Win
    ;======================================================
    Case "A0"
    $Name = "LSHIFT"
    Case "A1"
    $Name = "RSHIFT"
    Case "A2"
    $Name = "LCTRL"
    Case "A3"
    $Name = "RCTRL"
    Case "A4"
    $Name = "LALT"
    Case "A5"
    $Name = "RALT"
    Case "5B"
    $Name = "LWIN"
    Case "5C"
    $Name = "RWIN"
    ;======================================================
    ; Cursor, Seite
    ;======================================================
    Case "25"
    $Name = "LEFT"
    Case "27"
    $Name = "RIGHT"
    Case "26"
    $Name = "UP"
    Case "28"
    $Name = "DOWN"
    Case "24"
    $Name = "HOME"
    Case "23"
    $Name = "END"
    Case "21"
    $Name = "PGUP"
    Case "22"
    $Name = "PGDN"
    ;======================================================
    ; Zehner-Tastatur
    ;======================================================
    Case "6A"
    $Name = "NUMPADMULT"
    Case "6B"
    $Name = "NUMPADADD"
    Case "6D"
    $Name = "NUMPADSUB"
    Case "6E"
    $Name = "NUMPADDOT"
    Case "6F"
    $Name = "NUMPADDIV"
    ;======================================================
    ; sonstige Zeichen
    ;======================================================
    Case "BC"
    $Name = ","
    Case "BD"
    $Name = "-"
    Case "BE"
    $Name = "."
    Case "DB"
    $Name = "ß"
    Case "DC"
    $Name = "°"
    Case "DD"
    $Name = "´"
    Case "E2"
    $Name = "<"
    Case "20"
    $Name = "SPACE"
    ;======================================================
    ; sonstige Steuerung
    ;======================================================
    Case "08"
    $Name = "BACKSPACE"
    Case "09"
    $Name = "TAB"
    Case "0D"
    $Name = "ENTER"
    Case "13" ; Achtung: Code nur sehr kurz abrufbar (Sleep() kann zu falschen Ergebnissen führen; auch keine Tastenwiederholung
    $Name = "PAUSE"
    Case "14"
    $Name = "CAPSLOCK toggle"
    Case "1B"
    $Name = "ESC"
    Case "2C"
    $Name = "PRINTSCREEN"
    Case "2D"
    $Name = "INS"
    Case "2E"
    $Name = "DEL"
    Case "5D"
    $Name = "APPSKEY"
    Case "90"
    $Name = "NUMLOCK toggle"
    Case "91"
    $Name = "SCROLLLOCK toggle"
    Case ELSE
    Select
    Case ($N >= 112) And ($N <= 127)
    $Name = "F"&$N-111
    Case ($N >= 96) And ($N <= 105)
    $Name = "NUMPAD"&$N-96
    Case ($N >= Asc("A")) And ($N <= Asc("Z"))
    $Name = Chr($N)
    Case ($N >= Asc("0")) And ($N <= Asc("9"))
    $Name = Chr($N)
    Case Else ; direkter Tastaturcode wie in _IsPreset, da keine passende Zuordnung gefunden wurde
    $Name = Hex($N,2)
    EndSelect
    EndSwitch
    Return $Name
    EndFunc
    Alles anzeigen

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™