[VB08] Tasten Drück

08/21/2010 19:47 chesar#1
Hey Leute mal ne Frage es geht um VB2008
Wie kann ich das anstellen wenn ich im Spiel eine Taste Drücke z.b. Num1 das dann eine Checkbox.Checked = True ist
und beim erneuten Drücken der Taste Checkbox.Checked = False ist?
08/21/2010 20:25 DNA-Trainer#2
Hi,

ist eigentlich ganz einfach...

Erstell dir die Checkbox und einen Timer,
dann fügst du ganz oben unter
Public Class Form1

folgendes ein
Code:
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
    Private Const VK_NUMPAD0 = &H60
Den Timer setzt du auf Enabled und bei Interval 100
Und der Timer-Code sieht so aus:
Code:
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If GetAsyncKeyState(VK_NUMPAD0) Then
            If CheckBox1.Checked = False Then
                CheckBox1.Checked = True
            ElseIf CheckBox1.Checked = True Then
                CheckBox1.Checked = False
            End If
        End If

    End Sub
Hier ist eine Seite mit allen Tastencodes.
[Only registered and activated users can see links. Click Here To Register...]


~DNA
08/21/2010 20:45 chesar#3
hmm also wenn ich jetzt mein Tool Starte dann setzt der die Checkbox auf True und dann gleich wieder auf False, das geht die ganze zeit so!

so hab ich es jetzt bei mir

Code:
Private Sub key_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles key.Tick
        If GetAsyncKeyState(VK_NUMPAD0) Then
            If superjump.Checked = False Then
                superjump.Checked = True
            ElseIf superjump.Checked = True Then
                superjump.Checked = False
            End If
        End If


    End Sub
08/21/2010 20:47 DNA-Trainer#4
Macht er das, wenn du Numpad 0 drückst?
Oder macht er das von anfang an, ohne das du eine Taste drückst?
08/21/2010 20:48 nkkk#5
[Only registered and activated users can see links. Click Here To Register...]

könnte vieleicht helfen.
08/21/2010 20:56 chesar#6
für mein MW2 Chat Tool habe ich das so gemacht:

Code:
Public Class Form1
    Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    Private Const Key_NONE As Integer = &H0
    Private Const WM_HOTKEY As Integer = &H312
    Protected Overrides Sub WndProc(ByRef m As Message)
      
        If m.Msg = WM_HOTKEY Then
          
            Select Case m.WParam
                Case 1
                   SendKeys.SendWait(TextBox1.Text)
   End Select
        End If
        MyBase.WndProc(m)
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        UnregisterHotKey(Me.Handle, 1)
        End
        
    End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Form3.Opacity = 0

        RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.NumPad0)
Aber damit kann ich keine Checkbox Checken
08/21/2010 21:02 DNA-Trainer#7
Wenn du die GetAsyncKeyState Methode mit dem Timer verwendest und
die Checkbox bei dem Tastendruck auf Checked und wieder auf Unchecked
umspringt, dann hilft es, wenn du den Interval vom Timer höher setzt, oder
wenn du folgendes einfügst:

Code:
        If GetAsyncKeyState(VK_NUMPAD0) Then
            If CheckBox1.Checked = False Then
                CheckBox1.Checked = True
                System.Threading.Thread.Sleep(200)
            ElseIf CheckBox1.Checked = True Then
                CheckBox1.Checked = False
                System.Threading.Thread.Sleep(200)
            End If
        End If
08/21/2010 21:11 chesar#8
EDIT: hab jetzt mal den Intervall höher gemacht aber wenn ich jetzt Num0 drück passiert nix
Fehler kommt auch nicht

Das Problem ist ja sobald die Form geladen ist, Startet ja der Timer und der setzt die checkbox gleich auf true und dann wieder auf false das immer frei weg!

Ich komm gar nicht zum drücken.
Weist du wie ich das meine?
08/21/2010 21:20 DNA-Trainer#9
Ich weiß wie du das meinst, das dürfte aber nicht passiere.
Wenn der Timer enabled ist, hast du ja noch die Abfage
Code:
If GetAsyncKeyState (VK_NUMPAD 0) Then
Die Checkbox dürfte also nur verändert werden, wenn du Num 0 drückst.
Ich denke, dass sich bei dir irgendwo ein kleine Fehler eingeschlichen hat.
08/21/2010 21:25 chesar#10
Ich finde kein :( ich hab das jetzt so

Code:
Public Class nogun
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
    Private Const VK_NUMPAD0 = &H60
    Dim p As Process() = Process.GetProcessesByName("*****")
und dann der Timer

Code:
Private Sub key_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles key.Tick
        If GetAsyncKeyState(VK_NUMPAD0) Then
            If superjump.Checked = False Then
                superjump.Checked = True
                System.Threading.Thread.Sleep(200)
            ElseIf superjump.Checked = True Then
                superjump.Checked = False
                System.Threading.Thread.Sleep(200)
            End If
        End If
End Sub
08/21/2010 21:34 DNA-Trainer#11
So, hier nen kleines Beispiel-Projekt.
Funtkioniert bei mir ohne Probleme.
08/22/2010 01:14 chesar#12
Hmm leider ist dass das selbe Resultat wie bei mir :(
aber ich glaub es liegt daran das ich Vista 64bit habe.
Hast du ne Idee?
08/22/2010 13:02 chesar#13
Danke dir für deine Hilfe aber ich hab es jetzt anders gemacht!
habe mein Hook verwendet und es so gemacht

Code:
Select Case m.WParam
                Case 1
                    CheckBox1.Checked = Not CheckBox1.Checked