Hilfe bei Hotkeys mit Strg und Alt

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ThuCommix.

    Hilfe bei Hotkeys mit Strg und Alt

    Sehr geehrte Community,
    ich bin ein ziemlicher Neuling in Sache Visual-Basic, und lerne gerade damit mir Sourcecodes zu kopieren, sie zu verstehen und anschließend zu verändern.

    Ich möchte gerne einen Keybinder für ein Spiel erstellen. Dafür brauche ich Hotkeys. Zum Beispiel: STRG + F1 = SendChat("BlaBla").
    Das mit den SendChat kriege ich alles noch hin, da ich mit einer API für das Spiel arbeite.

    Ich komme allerdings nicht weiter, doppelte Hotkeys zu programmieren, finde auch kein passendes Tutorial.
    Ich habe mir folgende Anleitung rausgesucht: Systemweiten Hotkey registrieren (kein Tastatur Hook)

    Diese wäre optimal, da man die Hotkeys ja dann auch drücken kann, wenn man im Spiel ist. Also muss das Programm ja schonmal nicht im Vordergrund sein. (Hat bei dem Test bei nur F1 usw. funktioniert).
    Wie kriege ich es hin, mit dieser Anleitung es halt so zu machen, dass man STRG + F1 und nicht nur F1 drücken muss?
    Es muss nicht dieser Sourcecode sein, ich brauche nur irgendwas was funktioniert. Ich benötige dies in der Form "STRG + F1" und "ALT + F1".

    Ich würde mich wirklich sehr freuen wenn sich jemand die Zeit nehmen würde und mir evtl. einen Link zu einem Sourcecode/Anleitung (die ich leider nicht gefunden habe) schicken/schreiben könnte.
    Mit freundlichen Grüßen
    RoteTelefonDose


    //EDIT:

    Ich habe es soeben selber hinbekommen. War ja ganz einfach!
    Für die, die es brauchen:

    Private Const Key_NONE As Integer = &H0 'Hotkey abfragen
    Private Const Key_ALT As Integer = &H1 'Hotkey abfragen
    Private Const Key_STRG As Integer = &H2 'Hotkey abfragen
    Private Const Key_SHIFT As Integer = &H4 'Hotkey abfragen
    Private Const Key_WIN As Integer = &H8 'Hotkey abfragen
    Private Const WM_HOTKEY As Integer = &H312 'Hotkey abfragen

    dies einfach zusätzlich einfügen und Key_NONE durch z.B. Key_STRG ersetzen!

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

    Quellcode

    1. Option Strict On
    2. Imports System.Runtime.InteropServices
    3. Public Class Form1
    4. <DllImport("user32.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Unicode, EntryPoint:="keybd_event", ExactSpelling:=True, SetLastError:=True)> _
    5. Public Shared Sub keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, _
    6. ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    7. End Sub
    8. Private Const VK_CONTROL = &H11 ' STRG Taste
    9. Private Const VK_MENU = &H12 ' Alt Taste
    10. Private Const Key_NONE As Integer = &H0
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. keybd_event(VK_CONTROL, 0, 0, 0) 'STRG Taste - Key down
    13. keybd_event(VK_MENU, 0, 0, 0) 'Alt Taste - Key down
    14. keybd_event(Key_NONE, 0, 0, 0) 'Tasten up
    15. End Sub
    16. End Class


    Die Tasten (( STRG & ALT )) bleiben so lange gedrückt , bis sie mit (( Key_NONE )) losgelassen werden !

    Siehe auch : API-Referenz · GetAsyncKeyState-Funktion :
    vbarchiv.net/api/api_getasynckeystate.html

    Oder: SendKeys.Send-Methode :
    herber.de/mailing/vb/html/vastmsendkeys.htm

    :D RoteTelefonDose :D

    LG...

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

    Hallo,

    @TVX
    Er wollte eig., wie man Hotkeys mit Strg+Alt+Taste erstellt und nicht, wie man sie sendet.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Suppi Alex hast recht ...

    Dann soll er es so machen , dann sind die tasten auch nicht reserviert und noch anderseitig nutzbare ;)

    Quellcode

    1. ​Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Timer1.Interval = 10
    5. Timer1.Enabled = True
    6. End Sub
    7. Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
    8. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    9. If My.Computer.Keyboard.CtrlKeyDown = True AndAlso GetAsyncKeyState(Keys.F1) = -32767 Then
    10. MessageBox.Show("STRG und F1 wurde gedrückt")
    11. End If
    12. End Sub
    13. End Class