[Hilfe]Bei Hotkeys

06/06/2012 09:22 DEV-Explo.IT#1
Moin E*PvPers,

ich habe mir ein Script für ein eigenes kleines Soundboard geschrieben.

Quote:
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 Const Key_NONE As Integer = &H0
Private Const WM_HOTKEY As Integer = &H312

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.X)
End Sub

Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_HOTKEY Then
Select Case m.WParam
Case 1
My.Computer.Audio.Play(My.Resources.Noobies_ist_ei n_Kompliment, AudioPlayMode.Background)
End Select
End If
MyBase.WndProc(m)
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
My.Computer.Audio.Play(My.Resources.Noobies_ist_ei n_Kompliment, AudioPlayMode.Background)
End Sub
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 Const Key_NONE As Integer = &H0
Private Const WM_HOTKEY As Integer = &H312

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.B)
End Sub

Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_HOTKEY Then
Select Case m.WParam
Case 2
My.Computer.Audio.Play(My.Resources.Goot_campen, AudioPlayMode.Background)
End Select
End If
MyBase.WndProc(m)
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
My.Computer.Audio.Play(My.Resources.Goot_campen, AudioPlayMode.Background)
End Sub
End Class
Beim ersten Hotkey funktioniert alles noch super.
Will ich aber einen 2ten machen, zeigt mit Visual Basic 2010 folgende
Fehler an:

Quote:
Fehler1: "Declare Ansi Function RegisterHotKey Lib "user32"(hWnd As System.IntPtr, id As Integer, fsModifier As Integer, vk As Integer) As Integer" hat mehrere Definitionen mit identischen Signaturen. C:\Users\-\Desktop\Soundboard\Form1.vb 2 30 Soundboard
Quote:
Fehler2: "Private Sub Form1_Load(sender As Object, e As System.EventArgs)" hat mehrere Definitionen mit identischen Signaturen. C:\Users\-\Desktop\Soundboard\Form1.vb 6 17 Soundboard
Quote:
Fehler3: "Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)" hat mehrere Definitionen mit identischen Signaturen. C:\Users\-\Desktop\Soundboard\Form1.vb 10 29 Soundboard
Quote:
Fehler4: "Key_NONE" ist bereits als "Private Const Key_NONE As Integer = 0" in class deklariert. C:\Users\-\Desktop\Soundboard\Form1.vb 23 19 Soundboard
Quote:
Fehler5: "WM_HOTKEY" ist bereits als "Private Const WM_HOTKEY As Integer = 786" in class deklariert. C:\Users\-\Desktop\Soundboard\Form1.vb 24 19 Soundboard
Hab ich was Übersehen oder ist so ein "Dussel-Fehler" drin?^^
Danke schonmal im Voraus!
LG!
06/06/2012 13:31 Kraizy​#2
Kein Wunder wenn man seinen kompletten Code kopiert und ein zweites Mal einfügt..
06/07/2012 09:38 DEV-Explo.IT#3
Ja bin mir da aber nicht sicher, was ich da genau ändern soll!
Was muss ich bei dem 2ten Code anders machen?
Danke schonmal im Voraus!
06/07/2012 10:39 xNopex#4
Nicht alles kopieren... Nur noch einmal RegisterHotKey() mit neuer ID und neuer "Hotkey-Kombination" aufrufen.

EDIT: und natürlich in der WndProc verarbeiten...
06/10/2012 22:54 DEV-Explo.IT#5
Kannst Du mir den Code schicken? Bekomme das nicht hin :-/


Posted from elitepvpers.com App for Android
06/11/2012 08:28 xNopex#6
Das ist traurig..

Code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.X)
 RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.B)
 End Sub

Protected Overrides Sub WndProc(ByRef m As Message)
 If m.Msg = WM_HOTKEY Then
 Select Case m.WParam
 Case 1
 My.Computer.Audio.Play(My.Resources.Noobies_ist_ei n_Kompliment, AudioPlayMode.Background)
 Case 2
 My.Computer.Audio.Play(My.Resources.Goot_campen, AudioPlayMode.Background)
 End Select
 End If
 MyBase.WndProc(m)
 End Sub
06/11/2012 08:54 DEV-Explo.IT#7
Danke...


Posted from elitepvpers.com App for Android
06/21/2012 08:28 -popcorn-#8
easyer way:
Code:
Public Class Form1

 Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Int16

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

        If GetAsyncKeyState(Keys.S) Then
            'whatever you want'
        End If
    End Sub
06/21/2012 17:15 xNopex#9
Quote:
easyer way
:facepalm:

Dein Code ist einfach nur unperformant, schlecht und fehleranfällig und auch nicht einfacher. Zusammengefasst: Müll.
06/26/2012 09:07 DEV-Explo.IT#10
Code:
[COLOR="Red"]Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load[/COLOR]
    RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.X)
    RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.B)
End Sub

[COLOR="Red"]Protected Overrides Sub WndProc(ByRef m As Message)[/COLOR]
    If m.Msg = WM_HOTKEY Then
        Select Case m.WParam
            Case 1
                My.Computer.Audio.Play(My.Resources.Newbies_ist_ein_Kompliment, AudioPlayMode.Background)
            Case 2
                My.Computer.Audio.Play(My.Resources.Gott_campen, AudioPlayMode.Background)
        End Select
    End If
    MyBase.WndProc(m)
End Sub
Der Code ist ganz gut, aber bei den rotmarkierten Stellen zeigt mir VB folgenden Fehler an:
Quote:
Die Anweisung ist in einem Namensspace ungültig!
Keine Ahnung was ich da ändern soll - mehrere Sachen probiert, aber nichts nützt :mad:
06/26/2012 18:32 xNopex#11
Quote:
aber bei den rotmarkierten Stellen
Ich sehe keine rotmarkierten Stellen

>> [Only registered and activated users can see links. Click Here To Register...]