Home of Gamehacking

Normale Version: Hotkeys zeigen keine Reaktion
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Heyho ich bins mal wieder mit einer kleinen mehr oder weniger
dummen Frage. Ich versuche einen Timer für einen Hotkey zu starten, nur leider funktioniert das ganze nicht so wirklich wie es soll. Ich habe schon mehrmals nachgeprüft und mit meinem anderem Programm verglichen (welches ebenfalls mit hotkeys läuft) und finde das Problem nicht. Vermutlich ist es ganz simpel aber ich bin einfach zu blöd den Fehler zu finden.
Hier der Code( Ich hab 2 verschiedene Möglichkeiten probiert) :

Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal Key As Keys) As Integer 'need for the hotkeys

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        RedLabel.Text = RedLabel.Text - 1 ' Der Timer soll -1 Zählen und im Label ausgeben
    End Sub

    Private Sub time()
        If GetAsyncKeyState(Keys.A) Then
            Timer.Start()
        End If
    End Sub
    Private Sub HotkeyDown()
        Dim taste As Boolean
        taste = GetAsyncKeyState(Keys.B)
        If taste = True Then
            Timer.Start()
        End If
    End Sub
End Class



mfg .SqouI3

Hey,

zeig doch mal den Code deiner anderen Programme, bei denen
der Timer funktioniert.
(15.06.2012, 18:31).SquoI3 schrieb: [ -> ]Heyho ich bins mal wieder mit einer kleinen mehr oder weniger
dummen Frage. Ich versuche einen Timer für einen Hotkey zu starten, nur leider funktioniert das ganze nicht so wirklich wie es soll. Ich habe schon mehrmals nachgeprüft und mit meinem anderem Programm verglichen (welches ebenfalls mit hotkeys läuft) und finde das Problem nicht. Vermutlich ist es ganz simpel aber ich bin einfach zu blöd den Fehler zu finden.
Hier der Code( Ich hab 2 verschiedene Möglichkeiten probiert) :

Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal Key As Keys) As Integer 'need for the hotkeys

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        RedLabel.Text = RedLabel.Text - 1 ' Der Timer soll -1 Zählen und im Label ausgeben
    End Sub

    Private Sub time()
        If GetAsyncKeyState(Keys.A) Then
            Timer.Start()
        End If
    End Sub
    Private Sub HotkeyDown()
        Dim taste As Boolean
        taste = GetAsyncKeyState(Keys.B)
        If taste = True Then
            Timer.Start()
        End If
    End Sub
End Class



mfg .SqouI3


Das wird allgemein so nicht funktionieren, was steht dem im Label?

z.B wenn da stehen würde "lol" wie soll dann gehen das es lol -1 berechnet????

Es wäre hilfreich wenn du uns veraten würdest was du machen willst, dann gibt es bestimmt eine lösung
Vom Label mal abgesehen, die Hotkeyabfrage befinden sich in
2 unterschiedlichen Funktionen ... time und HotkeyDown
Diese Funktionen werden allerdings nie aufgerufen und somit
für eine HotkeyAbfrage nicht von Vorteil Wink

Möchtest du denn den Hotkey Systemweit abfragen, oder nur in der Form?
Zitat:Das wird allgemein so nicht funktionieren, was steht dem im Label?

z.B wenn da stehen würde "lol" wie soll dann gehen das es lol -1 berechnet????

Es wäre hilfreich wenn du uns veraten würdest was du machen willst, dann gibt es bestimmt eine lösung

Also im label steht die Zahl 300. Der Timer soll mit einem Intervall von 1000 ms also einer Sekunde herunterzählen, wenn ich einen Hotkey drücke.


(15.06.2012, 19:10)DNA schrieb: [ -> ]Vom Label mal abgesehen, die Hotkeyabfrage befinden sich in
2 unterschiedlichen Funktionen ... time und HotkeyDown
Diese Funktionen werden allerdings nie aufgerufen und somit
für eine HotkeyAbfrage nicht von Vorteil Wink

Möchtest du denn den Hotkey Systemweit abfragen, oder nur in der Form?

Ich weiß nicht genau was du mit Systemweit meinst... Ich erkläre mal mein gesamtes vorhaben. Ich habe ein Spiel offen, welches sich im Vordergrund befindet. Wenn ich Tod bin dauert es c.a 300 Sekunden , bis ich wieder lebe. Solange möchte ich gerne auf den Desktop und dort etwas machen. Wenn der Timer abgelaufen ist soll das Programm einen Ton spielen, aber das tut nicht zur Sache. Außerdem soll er mir den Verlauf in einem Label anzeigen und das ist der Knackpunkt... Mit einem Button funktionierts aber mit meiner beschriebenen Hotkeyfunktion nicht.
Nimm diesen Quellcode

[code=VB]
Public Class Form1


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
Public Const VK_0 = &H30


Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Label1.Text -= 1
If Label1.Text = 0 Then
Timer2.Enabled = False
Timer1.Enabled = True
Label1.Text = 300
'Play Sound
End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If GetAsyncKeyState(VK_0) Then
Timer1.Enabled = False
Timer2.Enabled = True
System.Threading.Thread.Sleep(250)
End If
End Sub

End Class

[/code]

Pack dir 2 Timer auf die Form.
Timer 1 enabled = true stellen und Interval auf 50
Timer 2 enabled = false stellen und Interval auf 1000
Dazu noch nen Label mit Text = 300.

Wenn du jetzt im Spiel stirbst, kannst du den Hotkey drücken und der
2. Timer fängt an die 300 Sekunden runter zu zählen.
Während der Zeit ist die Hotkeyabfrage gesperrt.
Erst wenn das Label den Wert 0 erreicht, wird die Hotkeyabfrage wieder
freigegeben.

Eine Liste für die Hotkeys findest du hier
GetAsyncKeyState Liste

Des Weiteren musst du die Anwendung als 32bit Anwendung laufen lassen!
Vielen dank <3... Das ihr hier auch immer einem die Arbeit abnehmt! Unverschämtheit :P

#Edit : Mh wohl doch nicht so ganz... Aber dein Post hat mir anregungen gegeben. Jetzt funktioniert es!

[code=vb]
Public Class Form1
Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal key As Keys) As Integer

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If GetAsyncKeyState(Keys.A) = -32767 Then
Timer2.Start()
End If
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Label1.Text -= 1
If Label1.Text = 0 Then
Timer2.Stop()
Label1.Text = 300
End If
End Sub
End Class
[/code]

danke nochmal!
Ich klinke mich hier mal interessehalber mit ein.
Ist das hier ein Schreibfehler...
[code=VB]Label1.Text -= 1[/code]
...oder muss das so aussehen bzw. deklariert werden?
Das ist so korrekt ... bevor ich hier etwas schreibe, teste ich das auch (meistens Happy Happy Happy)
So zieht er jedes mal, von dem was in dem Label steht, 1 ab.
Ja ne is schon klar. Wie ich schon sagte - Interessehalber.
Ich code ja unter Delphi und ich hätte es ja noch verstanden wenns so ausgesehen hätte...
[code=VB]Label1.Text = Label1.Text - 1[/code]
Aber das MINUS direkt vor dem Gleichheitszeichen... Huh
Hätte ich jetzt auch nicht erwartet.
Seiten: 1 2