Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 06:46

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



VB 2008 - Keybind/Hotkey funktioniert nur dauerhaft?

Discussion on VB 2008 - Keybind/Hotkey funktioniert nur dauerhaft? within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
VB 2008 - Keybind/Hotkey funktioniert nur dauerhaft?

Bei folgemdem Code wenn ich den Hotkey1 mit B aktiviere, so wird der definierte Text über SendKeys pausenlos immer wieder pausenlos abgesendet, jedoch reicht einmal.
Wenn ichs mit Keys.Down mache und die Pfeiltaste 'runter' betätige, wirds nur einmal abgesendet wie allgemein gewünscht.
Warum ist das so und wie kann ich den Fehler beheben?
Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Hotkey1 As Boolean

        Hotkey1 = GetAsyncKeyState(Keys.B)


        If Hotkey1 = True Then
            SendKeys.SendWait("tDie Taste B wurde gedrückt!{ENTER}tUnd es wurde gewartet")
        End If
    End Sub
End Class
Feuerkerk is offline  
Old 02/19/2011, 18:52   #2
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
Mach halt am Ende noch Timer1.Stop..
Kraizy​ is offline  
Old 02/19/2011, 19:14   #3
 
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
Ähm, wohin genau? ^^
Hab da jetzt rumprobiert, klappt aber nicht.

Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Hotkey1 As Boolean = GetAsyncKeyState(Keys.B)


        If Hotkey1 = True Then
            SendKeys.SendWait("tDie Taste B wurde gedrückt!{ENTER}tUnd es wurde gewartet")
            Timer1.Stop()
        End If
    End Sub
End Class
Das Problem bleibt das selbe - oder ich hab auch hier was falsch gemacht?
Feuerkerk is offline  
Old 02/19/2011, 19:28   #4
 
.SaFe's Avatar
 
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
Quote:
Originally Posted by Feuerkerk View Post
Ähm, wohin genau? ^^
Hab da jetzt rumprobiert, klappt aber nicht.

Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Hotkey1 As Boolean = GetAsyncKeyState(Keys.B)


        If Hotkey1 = True Then
            SendKeys.SendWait("tDie Taste B wurde gedrückt!{ENTER}tUnd es wurde gewartet")
            Timer1.Stop()
        End If
    End Sub
End Class
Das Problem bleibt das selbe - oder ich hab auch hier was falsch gemacht?
Das Problem ist , dass du den Timer nicht startest.
Hier der korrekte Code :

Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short

    Private Sub Timer1(ByVal sender As System.Object, ByVal e As System.EventArgs) 
        Dim Hotkey1 As Boolean = GetAsyncKeyState(Keys.B)


        If Hotkey1 = True Then
            SendKeys.SendWait("tDie Taste B wurde gedrückt!{ENTER}tUnd es wurde gewartet")
            Timer1.Stop()
        End If
    End Sub
Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs)
Timer1.Start
End Sub
End Class
Damit sollte es gehen.
Falls es klappt , kannst du gerne den THX - Button drücken
Falls es klappt kannst du gerne den THX But
.SaFe is offline  
Old 02/19/2011, 19:37   #5
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
Und falls du den Code nur kopierst, dann vergiss nich noch das Handle einzufügen, also Sub Form1_Load (...) Handles Me.Load..
Kraizy​ is offline  
Old 02/19/2011, 19:53   #6
 
.SaFe's Avatar
 
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
achja richtig ;D ganz vergessen
.SaFe is offline  
Old 02/19/2011, 20:08   #7
 
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
Ich kriegts nicht hin



Wenn ich nen Timer hinzufüge in der gui, kommt unten als einzige Fehlerausgabe:
"Timer1" ist bereits als "Friend WithEvents Timer1 As System.Windows.Forms.Timer" in class deklariert.
Feuerkerk is offline  
Old 02/19/2011, 21:47   #8
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
Ist das nicht VB6? o.O
Code:
"Timer1" ist bereits als "Friend WithEvents Timer1 As System.Windows.Forms.Timer" in class deklariert.
Sry, kenn mich mit VB6 nicht aus, aber wenn es da auch eine FormX.Designer gibt, dann öffne die mal und lösch die Zeile in der Friend WithEvents Timer1 As ..Timer steht oder du hast oben schon irgendwo einen Timer als Timer1 deklariert und nun hast du 2x einen "Timer1"..
Kraizy​ is offline  
Old 02/19/2011, 22:10   #9
 
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
Quote:
Originally Posted by Fisticuff View Post
Ist das nicht VB6? o.O
Code:
"Timer1" ist bereits als "Friend WithEvents Timer1 As System.Windows.Forms.Timer" in class deklariert.
Sry, kenn mich mit VB6 nicht aus, aber wenn es da auch eine FormX.Designer gibt, dann öffne die mal und lösch die Zeile in der Friend WithEvents Timer1 As ..Timer steht oder du hast oben schon irgendwo einen Timer als Timer1 deklariert und nun hast du 2x einen "Timer1"..
Oh tut mir leid, hab das falsche Fensterchen abgescreent.



So mein ich natürlich - evtl. kannste jetzt wieder helfen ^^.
Feuerkerk is offline  
Old 02/20/2011, 09:00   #10
 
.SaFe's Avatar
 
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
Achja statt
Code:
   Private Sub Timer1(ByVal sender As System.Object, ByVal e As System.EventArgs)
muss das so sein
Code:
   Private Sub Timer1.Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
oder
Code:
   Private Sub Timer1_Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
bin mir grade nicht sicher^^
.SaFe is offline  
Old 02/20/2011, 09:46   #11
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
Also du vergisst immer das Handle mitanzugeben, z.B. in der Sub wo dein Timer gestartet werden soll..mach mal den Code raus und probier diesen:
PHP Code:
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        Timer1
.Start()
    
End Sub

Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Timer1.Tick
        
//Dein Code, also das mit SendKeys.SendWait
    
End Sub 
Quote:
Originally Posted by .SaFe View Post
Achja statt
Code:
   Private Sub Timer1(ByVal sender As System.Object, ByVal e As System.EventArgs)
muss das so sein
Code:
   Private Sub Timer1.Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
oder
Code:
   Private Sub Timer1_Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
bin mir grade nicht sicher^^
Das ist egal, die Sub kann er auch BlubbTimerMachWas nennen, nur das Handle am Ende ist wichtig, und natürlich die Parameter.
Kraizy​ is offline  
Old 02/20/2011, 10:20   #12
 
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
Das Problem ist doch sowieso nicht dieses, dass irgend ein Timer nicht gestartet ist. Da ich den auf True gesetzt habe, läuft der beim Start der Anwendung auch.
Das Problem ist gewesen, dass der Text bzw. sich die Textausgabe nach Hotkey-Betätigung 'unendlich' mal wiederholte. Mit Timer1.Stop kann das doch auch nichts werden - oder? Ich meine, zwar wird der Timer dann beendet und es gibt nur einmal eine Ausgabe des Textes, aber was dann? Die Hotkey-Funktion läuft dann ja nicht mehr, sondern steht erst dann wieder zur Verfügung, wenn die Anwendung beendet und neu gestartet wird.
Oder was konkret ist daran falsch?

Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Hotkey1 As Boolean = GetAsyncKeyState(Keys.B)
        Dim Hotkey2 As Boolean = GetAsyncKeyState(Keys.C)


        If Hotkey1 = True Then
            SendKeys.Send("tDie Taste B wurde gedrückt!{ENTER}tUnd es wurde gewartet")
            Timer1.Stop()
        ElseIf Hotkey2 = True Then
            SendKeys.Send("tDie Taste C wurde gedrückt!{ENTER}tUnd es wurde gewartet")
            Timer1.Stop()
        End If
    End Sub
    Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Timer1.Start()
    End Sub
End Class
Abgesehen davon habe ich das Problem über Nacht anderweitig gelöst. Habe nun zwei Funktionierende Versionen die das machen, was sie machen sollen. Könnte mir einer erklären, welche von beiden die bessere ist und was man allgemein noch anders/besser machen könnte?
Version 1:
Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
    Private Const VK_B = &H42   ' Taste B
    Private Const VK_C = &H43   ' Taste C

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Retval1 As Long
        Dim Retval2 As Long
        Dim Hotkey1 As Boolean = GetAsyncKeyState(VK_B)
        Dim Hotkey2 As Boolean = GetAsyncKeyState(VK_C)

        Retval1 = GetAsyncKeyState(VK_B)
        Retval2 = GetAsyncKeyState(VK_C)

        ' Auswerten des Ergebnisses
        If CBool(Retval1 And &H8000) Then
            SendKeys.Send("Die Taste B wurde gedrückt!")
        End If
        If CBool(Retval2 And &H8000) Then
            SendKeys.Send("Die Taste C wurde gedrückt!")
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
End Class
Version 2:
Code:
Option Strict Off
Option Explicit On
Friend Class Form1
	Inherits System.Windows.Forms.Form
	Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Integer) As Short
	Private Const KeyPressed As Short = -32767
	
	Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
	End Sub
	
	Private Sub Timer1_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick
		Dim Hotkey1 As Integer
		Dim HotKey2 As Integer		
		
        Hotkey1 = System.Windows.Forms.Keys.B
		HotKey2 = System.Windows.Forms.Keys.C
		
		If GetAsyncKeyState(Hotkey1) = KeyPressed Then
            SendKeysEx("Die Taste B wurde gedrückt!")
		End If
		If GetAsyncKeyState(HotKey2) = KeyPressed Then
            SendKeysEx("Die Taste C wurde gedrückt!")
        End If
	End Sub
End Class
Noch eine ganz wichtige Frage:
Kann man sämtliche Hotkey-Funktionen 'deaktivieren' lassen über einen anderen Hotkey (z.B. der Taste P), so dass man gesetzte Hotkey-Tasten ohne einer Hotkey-Funktion nutzen kann - und sämtliche Hotkeys bei einer weiteren festgelegten Taste (z.B. Escape oder Return) wieder aktivieren?
Feuerkerk is offline  
Old 02/20/2011, 11:11   #13
 
.SaFe's Avatar
 
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
Hmm...
Du könntest es so probieren aber das ist eigentlich zu umständlich
Code:
Option Strict Off
Option Explicit On
Friend Class Form1
	Inherits System.Windows.Forms.Form
	Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Integer) As Short
	Private Const KeyPressed As Short = -32767
	
	Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
	End Sub
	
	Private Sub Timer1_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick
		Dim Hotkey1 As Integer
		Dim HotKey2 As Integer	
                Dim Hotkey3 As Integer
                Dim Hotkey4 As Integer	
		
        Hotkey1 = System.Windows.Forms.Keys.B
		HotKey2 = System.Windows.Forms.Keys.C
Hotkey3 = System.Windows.Forms.Keys.P
Hotkey4 = System.Windows.Form.Keys.X
		
		If GetAsyncKeyState(Hotkey1) = KeyPressed Then
            SendKeysEx("Die Taste B wurde gedrückt!")
		End If
		If GetAsyncKeyState(HotKey2) = KeyPressed Then
            SendKeysEx("Die Taste C wurde gedrückt!")
End If
If GetAsyncKeyState(Hotkey3) = KeyPressed Then
Hotkeys_deaktivieren
        End If
If GetAsyncKeyState(Hotkey4) = KeyPressed Then
Timer1.Start
	End Sub
Private Sub Hotkeys_deaktivieren
If GetAsyncKeyState (Hotkey1) = KeyPressed Then
End If
If GetAsyncKeyState (Hotkey2) = KeyPressed Then
End If
End Sub
End Class
.SaFe is offline  
Old 02/20/2011, 17:07   #14
 
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
Habe mich jetzt für folgende Variante entschieden:
Code:
Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
    Private Const VK_B = &H42   ' Taste B
    Private Const VK_C = &H43   ' Taste C
    Private Const VK_A = &H41
    Private Const VK_S = &H53

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Retval1 As Long
        Dim Retval2 As Long
        Dim Retval3 As Long
        Dim Hotkey1 As Boolean = GetAsyncKeyState(VK_B)
        Dim Hotkey2 As Boolean = GetAsyncKeyState(VK_C)
        Dim Hotkey3 As Boolean = GetAsyncKeyState(VK_A) And GetAsyncKeyState(VK_S)

        Retval1 = GetAsyncKeyState(VK_B)
        Retval2 = GetAsyncKeyState(VK_C)
        Retval3 = GetAsyncKeyState(VK_A) And GetAsyncKeyState(VK_S)

        ' Auswerten des Ergebnisses
        If CBool(Retval1 And &H8000) Then
            SendKeys.Send("tDie Taste B wurde gedrückt!{ENTER}tUnd es wurde gewartet")
        End If
        If CBool(Retval2 And &H8000) Then
            SendKeys.Send("tDie Taste C wurde gedrückt!{ENTER}tUnd es wurde gewartet")
        End If
        If CBool(Retval3 And &H8000) Then
            SendKeys.Send("tDie Taste A und S wurde gedrückt.")
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
End Class
Ganz wichtig ist jetzt:
Kann man sämtliche Hotkey-Funktionen 'deaktivieren' lassen über einen anderen Hotkey (z.B. der Taste P), so dass man gesetzte Hotkey-Tasten ohne einer Hotkey-Funktion nutzen kann - und sämtliche Hotkeys bei einer weiteren festgelegten Taste (z.B. Escape oder Return) wieder aktivieren?
^^
Feuerkerk is offline  
Old 02/20/2011, 17:49   #15
 
.SaFe's Avatar
 
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
Quote:
Originally Posted by .SaFe View Post
Hmm...
Du könntest es so probieren aber das ist eigentlich zu umständlich
Code:
Option Strict Off
Option Explicit On
Friend Class Form1
	Inherits System.Windows.Forms.Form
	Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Integer) As Short
	Private Const KeyPressed As Short = -32767
	
	Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
	End Sub
	
	Private Sub Timer1_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick
		Dim Hotkey1 As Integer
		Dim HotKey2 As Integer	
                Dim Hotkey3 As Integer
                Dim Hotkey4 As Integer	
		
        Hotkey1 = System.Windows.Forms.Keys.B
		HotKey2 = System.Windows.Forms.Keys.C
Hotkey3 = System.Windows.Forms.Keys.P
Hotkey4 = System.Windows.Form.Keys.X
		
		If GetAsyncKeyState(Hotkey1) = KeyPressed Then
            SendKeysEx("Die Taste B wurde gedrückt!")
		End If
		If GetAsyncKeyState(HotKey2) = KeyPressed Then
            SendKeysEx("Die Taste C wurde gedrückt!")
End If
If GetAsyncKeyState(Hotkey3) = KeyPressed Then
Hotkeys_deaktivieren
        End If
If GetAsyncKeyState(Hotkey4) = KeyPressed Then
Timer1.Start
	End Sub
Private Sub Hotkeys_deaktivieren
If GetAsyncKeyState (Hotkey1) = KeyPressed Then
End If
If GetAsyncKeyState (Hotkey2) = KeyPressed Then
End If
End Sub
End Class
siehe da^^
.SaFe is offline  
Reply


Similar Threads Similar Threads
[Visual Basic] Hotkey Funktioniert nicht!?
10/22/2010 - .NET Languages - 12 Replies
Hi leute Ich code seit einiger Zeit Programme und sonstiges mit vb Ich wollt einen Hotkey einbauen der den Timer aktiviert aber es funktioniert nicht Ich habe ALLEs aber ALLES richtig gemacht Keine Fehler kein garnichts!!! Trotzdem wenn ich Debugge funktioniert es nicht Könnt ihr mir weiter helfen?
[Virtual Basic 2008] Hotkey Funktion ! Help :S
05/03/2010 - General Coding - 1 Replies
Hallo elitepvpers, Ich wollte eine Combobox in mein Programm einbringen, wo man einen beliebigen Hotkey aussuchen kann. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick Dim MouseMoverOn As Boolean MouseMoverOn = GetAsyncKeyState(ComboBox1.Text) If MouseMoverOn = True Then Timer1.Enabled = True End If
Combat arms Mod&EU Hotkey Hack funktioniert nach 03.03.2010 patch
03/08/2010 - Combat Arms Hacks, Bots, Cheats & Exploits - 15 Replies
CA Hotkey EU Pub (Nein, das ist nicht meiner)&Super Messer Mod (Messer zu Minigun) STATUS:WORKING http://img175.imageshack.us/img175/1704/combatarm s00m.jpg Virusscan:https://www.virustotal.com/de/analisis/ 0242a304ac3ecbf9ad76f97e7429636c15e552a881cc3a49b0 37cd0f77fad2fe-1267866900 Vielleicht ein Virus DOWNLOAD AUF EIGENE GEFAHR Download im Anhang



All times are GMT +2. The time now is 06:46.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.