#Tidy_Parameters [ gelöst ] | WM_KEYDOWN [ gelöst ]

  • Hallo AutoIt Community!
    Ich nutze dieses Thread einfach mal doppelt damit ich nicht ein zweites Thread öffnen muss.


    #Tidy_Parameters: [ gelöst ]
    Ich schaffe es einfach nicht, dass Tidy bei mir so aufräumt wie ICH das will. Kann mir wer sagen was ich falsch mache?
    Es soll derzeitig nur die Funktionsnamen als Kommentar nach dem EndFunc schreiben. So etwa:

    [autoit]

    Func _Example()
    EndFunc ;==> _Example()

    [/autoit]

    Kann mir jemand sagen was ich hier falsch mache?

    Spoiler anzeigen
    [autoit]

    ; /sefc -> Skip_EndFunc_Comment
    ; *** Add comment to EndFunc statement e.g. "EndFunc ;==> UDF_Name"
    #Tidy_Parameters = /sefc 1

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

    ConsoleWrite('TEST' & @CRLF)

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

    _TEST()

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

    Func _TEST()
    ConsoleWrite('TEST' & @CRLF)
    EndFunc

    [/autoit]


    WM_KEYDOWN: [ gelöst ]
    Ich möchte gerne zu der Windows Message die Enter Taste registrieren. Zudem soll auch unter groß und kleinschreibung unterschieden werden. Gibt es eine einfache Möglichkeit um dies zu erreichen (bitte kein _IsPressed() oder ähnliche Funktionen)? Hier ein Codebeispiel:
    (Es ist deutlich zu erkennen dass die eingegebenen Tasten als Großbuchstaben ausgegeben werden...)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)
    Opt('GUICloseOnESC', 0)

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

    Global $hGUI

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

    GUIRegisterMsg($WM_KEYDOWN, 'WM_KEYDOWN')

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

    $hGUI = GUICreate('Example')
    GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI_EVENT_CLOSE')
    GUISetState()

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

    While Sleep(1000)
    WEnd

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

    Func WM_KEYDOWN($hWnd, $Msg, $wParam, $lParam)
    Local Static $iCounter

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

    If $iCounter = 20 Then
    $iCounter = 0
    ConsoleWrite(@CRLF)
    Else
    $iCounter += 1
    EndIf

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

    ConsoleWrite(Chr($wParam))
    EndFunc

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

    Func GUI_EVENT_CLOSE()
    Exit
    EndFunc

    [/autoit]

    4 Mal editiert, zuletzt von Yjuq (16. März 2013 um 00:00)

  • Zu deinem Tidy-Problem :
    Probier das doch mal so (die Parameter in " gesetzt)
    [spoiler]

    [autoit]

    ; /sefc -> Skip_EndFunc_Comment
    ; *** Add comment to EndFunc statement e.g. "EndFunc ;==> UDF_Name"
    #Tidy_Parameters = "/sefc 1"

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

    ConsoleWrite('TEST' & @CRLF)

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

    _TEST()

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

    Func _TEST()
    ConsoleWrite('TEST' & @CRLF)
    EndFunc

    [/autoit]

    [/aspoiler]

  • Ja, ich weiß...
    WM_CHAR war sowieso das erste was ich in betracht gezogen habe...
    Demnach muss ich das irgendwie anders regeln. Möchte so ziemlich jegliche Tasten aufnehmen.
    Wäre gut wenn man da eine einfache Möglichkeit finden.

    Wie gesagt: _IsPressed auf keinen Fall. Ich habe dies schon versucht und möchte nach Möglichkeit meinen
    Code beschleunigen. Es ist ein derzeitiges Projekt was ich noch nicht veröffentlichen werde.

    Möchte Geschwindigkeits vergleich machen. Aber soviel kann ich schon sagen:
    Es ist für eine Cheat Konsole sowie einen eigenen Chat (Selbst erstelltes Input "Control" in GDI+)...
    Ich versuche den Gesammten GUI Aufbau nur in GDI+ zu zeichnen. Also keine Controls!

    Gründe jibts bei mir dafür persönlich viele ^^

  • Das WM_CHAR Problem hatte ich auch schon.
    Also Quasi eine Message ausspucken sobald eine Taste gedrückt wird.
    Was eventuell geht ist ein Accel mit Event. Das müsste doch aufs gleiche rauskommen ?

    Skript
    [autoit]


    Opt('GUIOnEventMode', 1)

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

    Global $t = TimerInit()
    Global $hGUI = GUICreate('Test', 500, 500)
    GUISetState(@SW_SHOW, $hGUI)

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

    Global $a[2][2]
    $a[0][0] = '{ENTER}'
    $a[0][1] = GUICtrlCreateDummy()
    $a[1][0] = 'u'
    $a[1][1] = GUICtrlCreateDummy()

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

    GUISetAccelerators($a, $hGUI)

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

    GUICtrlSetOnEvent($a[0][1], 'Event')
    GUICtrlSetOnEvent($a[1][1], 'Event')
    GUISetOnEvent(-3, 'Event', $hGUI)

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

    While Sleep(100)
    WEnd

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

    Func Event()
    Switch @GUI_CtrlId
    Case -3
    Exit
    Case Else
    ConsoleWrite('['&Round(TimerDiff($t)/1000,1)&'] ' & 'Gedrückt: ' & @GUI_CtrlId & @CRLF)
    EndSwitch
    EndFunc

    [/autoit]

    Edit: Das unterscheidet zwischen Groß- und kleinschreibung. Einfach mal ein U aus dem u machen und ausprobieren.
    .
    .
    lg

  • Werden bei GetKeyboardstate nicht Alle Tasten überprüft statt nur einer (wie bei AsyncKeyState) ?
    Wenn ja wäre das ein hoher Mehraufwand. (außer die Dll regelt das intern effektiver als 256 Async calls)

  • Werden bei GetKeyboardstate nicht Alle Tasten überprüft statt nur einer (wie bei AsyncKeyState) ?
    Wenn ja wäre das ein hoher Mehraufwand. (außer die Dll regelt das intern effektiver als 256 Async calls)


    Ja, es werden alle Tasten überprüft und ja, ich denke dass Microsoft das besser regelt.
    (Zumindest haben das einige Geschwindigkeitstests im Vergleich zu _IsPressed ergeben...)

  • Eukalyptus hatte doch dazu schon einmal etwas geschrieben...

    Spoiler anzeigen
    [autoit]

    $hGui = GUICreate("Example 1 - Press any key to exit...", 400, 100)
    GUISetState()
    $sKeyboardState = _WinAPI_GetKeyboardState(1)
    While _WinAPI_GetKeyboardState(1) = $sKeyboardState
    Sleep(100)
    WEnd
    GUIDelete($hGui)

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

    Sleep(500)

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

    $hGui = GUICreate('Example 2 - Press "A" to exit...', 400, 200)
    GUISetState()
    $aKeyboardStateOld = _WinAPI_GetKeyboardState()
    While 1
    $aKeyboardState = _WinAPI_GetKeyboardState()
    If $aKeyboardState[65] <> $aKeyboardStateOld[65] Then ExitLoop
    Sleep(100)
    WEnd
    GUIDelete($hGui)

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

    Sleep(500)

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

    $hGui = GUICreate('Example 3 - Type...', 400, @DesktopHeight - 100)
    $hLabel = GUICtrlCreateLabel("", 2, 2, 396, @DesktopHeight - 104)
    GUISetState()
    While GUIGetMsg() <> -3
    $aKeyboardState = _WinAPI_GetKeyboardState()
    $sKeys = "I" & @TAB & "CHR" & @TAB & "State" & @TAB & "Toogle" & @LF
    For $i = 10 To 90
    $sKeys &= $i & @TAB & Chr($i) & @TAB & BitAND($aKeyboardState[$i], 0xF0) & @TAB & BitAND($aKeyboardState[$i], 0x0F) & @LF
    Next
    GUICtrlSetData($hLabel, $sKeys)
    Sleep(100)
    WEnd

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinAPI_GetKeyboardState
    ; Description ...: Returns the status of the 256 virtual keys
    ; Syntax.........: _WinAPI_GetKeyboardState($iFlag=0)
    ; Parameters ....: $iFlag - Return Type
    ; 0 Returns an array[256]
    ; 1 Returns a string
    ; Return values .: Success - Array[256] or String containing status of 256 virtual keys
    ; Failure - False
    ; Author ........: Eukalyptus
    ; Modified.......:
    ; Remarks .......: If the high-order bit is 1, the key is down; otherwise, it is up.
    ; If the key is a toggle key, for example CAPS LOCK, then the low-order bit is 1
    ; when the key is toggled and is 0 if the key is untoggled
    ; Related .......: _IsPressed
    ; Link ..........;
    ; Example .......;
    ; ===============================================================================================================================
    Func _WinAPI_GetKeyboardState($iFlag = 0)
    Local $aDllRet, $lpKeyState = DllStructCreate("byte[256]")
    $aDllRet = DllCall("User32.dll", "int", "GetKeyboardState", "ptr", DllStructGetPtr($lpKeyState))
    If @error Then Return SetError(@error, 0, 0)
    If $aDllRet[0] = 0 Then
    Return SetError(1, 0, 0)
    Else
    Switch $iFlag
    Case 0
    Local $aReturn[256]
    For $i = 1 To 256
    $aReturn[$i - 1] = DllStructGetData($lpKeyState, 1, $i)
    Next
    Return $aReturn
    Case Else
    Return DllStructGetData($lpKeyState, 1)
    EndSwitch
    EndIf
    EndFunc ;==>_WinAPI_GetKeyboardState

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (16. März 2013 um 07:47)