Inhalt einer TextBox bei gedrückter Shift-Taste Groß schreiben

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von NscMike.

    Inhalt einer TextBox bei gedrückter Shift-Taste Groß schreiben

    Hiho und zwar möchte ich das der Inhalt einer TextBox (die im Hintergrund liegt) bei gedrückter Shift-Taste Groß eingeben
    wird und nicht klein (was auto. passiert wenn die im Hintergrund ist)

    Allerdings bin ich noch ziemlich neu in Sachen Programmieren und hab keiner Idee womit ich das Realisieren könnte.

    Mfg
    mit zB

    VB.NET-Quellcode

    1. If (GetAsyncKeyState(Keys.B) = -32767) Then
    2. TextBox1.Text = TextBox1.Text & "b"
    3. End If


    Und nicht das jez Leute kommen und sagen das wirdn KeyLoggern usw. Wenn ich einen haben wollte um Leute auszuspannen würd ich mirn Code von YT holen
    und nicht versuchen soetwas selber zu Progen. Ist für mich nur zum Lernen...

    Mfg

    SykesXable schrieb:

    mit zB

    [vb]If (GetAsyncKeyState(Keys.B) = -32767) Then

    GetAsyncKeyState erlaubt es auch den Zustand der Shift-Tasten (oder auch Ctrl, Alt etc) abzufragen. Das macht man und dann weiß man ob's GROSS oder klein ist.

    msdn.microsoft.com/en-us/library/ms646293(v=vs.85).aspx
    You can use the following virtual-key code constants as values for vKey to distinguish between the left and right instances of those keys.

    Code Meaning
    VK_LSHIFT Left-shift key.
    VK_RSHIFT Right-shift key.
    VK_LCONTROL Left-control key.
    VK_RCONTROL Right-control key.
    VK_LMENU Left-menu key.
    VK_RMENU Right-menu key.
    Sry aber ich versteh das nich ganz :D Wie gesagt, fang grad erst wieder an...

    Also bis

    VB.NET-Quellcode

    1. If (GetAsyncKeyState(Keys.LShift) = -32767) Then


    bin ich schon vorher gekommen aber was muss ich in die nächste Zeile schreiben damit der Text der dann kommt auch Groß wird ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SykesXable“ ()

    Das man 2xGetAsyncKeyState verwenden kann , also 1x der buchstabe und 1x der shift key ,
    daran hab ich auch schon gedacht allerdings dachte ich es gibt eine möglich das einfach zu machen als..

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.Shift) Then
    2. If GetAsyncKeyState(Keys.A) Then
    3. TextBox1.Text = TextBox1.Text & "A"
    4. End If
    5. If GetAsyncKeyState(Keys.B) Then
    6. TextBox1.Text = TextBox1.Text & "B"
    7. End If
    8. If GetAsyncKeyState(Keys.C) Then
    9. TextBox1.Text = TextBox1.Text & "C"
    10. End If
    11. End if


    und ja ich hab schon die SuFu und Google benutzt sonst würde ich hier nicht fragen

    Mfg
    Was passiert denn in Deiner Textbox, wenn Du einfach den Cursor da reinsetzt und drauflos schreibst, beliebig mit und ohne Shift?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann poste doch bitte mal den gesamten Code.
    Ich denke, Du hast Dich da etwas verwurschtelt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mal in Pseudo-Code:

    Ist Textfenster nicht aktiv ' also im hintergrund oder whatever
    Ist Buchstabe gedrückt
    Ist Shift Gedrückt
    Buchstabe groß reinhauen
    else
    Buchstabe klein reinhauen
    end if
    end if
    end if

    Hier wird überprüft, erst ob das fenster im Hintergrund ist (Glaube ich mit irgendeiner activ oder focus-Eigenschaft, arbeite erst seit 6 Wochen in VS und VB, vorher andere Programmiersprachen). Wenn es im Hintergrund ist, dann machst du deine tastaturabfrage.

    Wenn nein, also es ist aktiv, dann tue nichts, weil er es dann selber kann... -.-


    EDIT:::

    Nochwas, bestimmt kann man den Buchstaben in der Abfrage auch Hex oder als long angeben, das heist du kannst ihn dynamisch alle Buchstaben abklappern lassen, dann musst du nicht jeden Buchstaben einzeln überprüfen.

    Zumindext kann das die Relativ einfache Sprache Ruby, google mal obs möglich ist oder jemand postet entsprechenden Code.
    Dann kannst du das auf wenige zeilen minimieren. (Per UpCase und son Zweugs)

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.A) Then
    2. If GetAsyncKeyState(Keys.Shift) Then
    3. TextBox1.Text = TextBox1.Text & "A"
    4. Else
    5. TextBox1.Text = TextBox1.Text & "a"
    6. End If
    7. End If


    So gehts nicht..

    EDIT:: Wenn ich statt Keys.Shift LShiftKey nehme geht .. bedingt... undzwar wenn ich jez einmal kurz a drücke erscheint in der text ca. 3-4x a.. bzw. A
    In Ruby ist es so, das GetAsyncKeyState dir verschiedene Werte zurück gibt. Und es ist schließlich die selbe Funktion.

    Drückst du nichts, ist der Wert nothing, also False im Sinne der Bedingung.
    Der Wert unterscheidet sich je nach drücken... wiederholtes drücken, drücken, gedrückt halten...

    Das Problem ist, das er es zu schnell registriert, schneller, als du die taste loslassen kannst.

    Es gibt mindestens zwei Wege das zu lösen:

    1)

    Wenn ich drücke, nehme ich dannach durch Programmcode definiert 4 Frames lang keine Tastendrücke mehr entgegen. (Sleep, einfach bis zum vierten Durchlauf Ignorieren...)

    Oder ich frage den Wert spezifisch ab:

    Ist er zwischen 0 und 1 und es verhält sich hier so wie in Ruby (Was ja eigentlich sein müsste), so sollte es gehen das er die tasten nicht zuoft entgegennimmt.


    Manchmal unterscheiden sich Shift und LShift doch... Vielleicht nimmt er mit einfachem Shift nur den Rechten entgegen... Du solltest es mal Probieren. Und generell beide Abfragen

    VB.NET-Quellcode

    1. if GetAsyncKeyState(Keys.Shift) or GetAsyncKeyState(Keys.LShift) then
    2. ' do something
    3. else
    4. ' do something
    5. end if


    Weis jetzt nicht, ob ich spezifisch abfragen kann, ob etwas ZWISCHEN etwas ist... (Ruby: if x.between(0..1) )
    Eine Möglichkeit wäre

    VB.NET-Quellcode

    1. If GetAsyncKeyState(Keys.ShiftKey) And GetAsyncKeyState(Keys.A) Then
    2. MsgBox("A")
    3. End If


    Oder:

    VB.NET-Quellcode

    1. If My.Computer.Keyboard.ShiftKeyDown = True And GetAsyncKeyState(Keys.A) Then
    2. MsgBox("A")
    3. End If