|
You last visited: Today at 06:46
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.
02/19/2011, 18:33
|
#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
|
|
|
02/19/2011, 18:52
|
#2
|
elite*gold: 0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
|
Mach halt am Ende noch Timer1.Stop..
|
|
|
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?
|
|
|
02/19/2011, 19:28
|
#4
|
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
|
Quote:
Originally Posted by Feuerkerk
Ä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
|
|
|
02/19/2011, 19:37
|
#5
|
elite*gold: 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..
|
|
|
02/19/2011, 19:53
|
#6
|
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
|
achja richtig ;D ganz vergessen
|
|
|
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.
|
|
|
02/19/2011, 21:47
|
#8
|
elite*gold: 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"..
|
|
|
02/19/2011, 22:10
|
#9
|
elite*gold: 0
Join Date: Feb 2011
Posts: 8
Received Thanks: 0
|
Quote:
Originally Posted by Fisticuff
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 ^^.
|
|
|
02/20/2011, 09:00
|
#10
|
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^^
|
|
|
02/20/2011, 09:46
|
#11
|
elite*gold: 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.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Start() End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick //Dein Code, also das mit SendKeys.SendWait End Sub
Quote:
Originally Posted by .SaFe
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.
|
|
|
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?
|
|
|
02/20/2011, 11:11
|
#13
|
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
|
|
|
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?
^^
|
|
|
02/20/2011, 17:49
|
#15
|
elite*gold: 19
Join Date: Jun 2009
Posts: 3,465
Received Thanks: 1,484
|
Quote:
Originally Posted by .SaFe
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^^
|
|
|
|
|
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.
|
|