Thank you. It works! Although I get a implicit conversion warning when Strict is on, I just removed that and it works.
Here is my code thus far for my menu with only one issue with saving the key value to MySettings, msgboxes show the correct key but after close and repopen it is blank. At least anyone else stumbling across this article can see another example. I think the combination of my menu (once fully working) and your code makes a nice addition to any project
. Thank you for all your help.
Code:
Public Class HotKeyz
Dim x As String
Dim hkr As New HotKeyRegistryClass(Me.Handle)
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = HotKeyRegistryClass.Messages.WM_HOTKEY Then 'NOT THE ACTUAL WINDOWS NAMESPACE
Dim ID As String = m.WParam.ToString()
Select Case ID
Case Convert.ToString(0) : Clipboard.SetDataObject(TimeStamp.TextBox1.Text + " " + TimeStamp.Label1.Text + " " + TimeStamp.Label2.Text + vbCrLf + vbCrLf) 'MessageBox.Show("F")
'Case 0 : MessageBox.Show("F")
End Select
End If
MyBase.WndProc(m)
End Sub
Private Sub HotKeyz_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Leave
End Sub
Private Sub HotKeyz_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If My.Settings.HK_CTRL = 1 Then
HotKeyz("CTRL", 1)
ElseIf My.Settings.HK_CTRL <= 0 Then
HotKeyz("CTRL", 0)
End If
If My.Settings.HK_ALT = 1 Then
HotKeyz("ALT", 1)
ElseIf My.Settings.HK_ALT <= 0 Then
HotKeyz("ALT", 0)
End If
If My.Settings.HK_SHIFT = 1 Then
HotKeyz("SHIFT", 1)
ElseIf My.Settings.HK_SHIFT <= 0 Then
HotKeyz("SHIFT", 0)
End If
If My.Settings.HK_WIN = 1 Then
HotKeyz("WIN", 1)
ElseIf My.Settings.HK_WIN <= 0 Then
HotKeyz("WIN", 0)
End If
MsgBox("CTRL = " + My.Settings.HK_CTRL.ToString + vbCrLf + _
"ALT = " + My.Settings.HK_ALT.ToString + vbCrLf + _
"SHIFT = " + My.Settings.HK_SHIFT.ToString + vbCrLf + _
"WIN = " + My.Settings.HK_WIN.ToString + vbCrLf + _
"KEY = " + My.Settings.HotKeyzKEY)
If Label3.Text = "" Then
Label2.Text = TextBox1.Text
Else
Label2.Text = Label3.Text + Label4.Text + Label5.Text + Label6.Text + " + " + TextBox1.Text
End If
End Sub
Public Sub HotKeyz(ByVal MODz As String, ByVal Status As Integer)
If MODz = "CTRL" And Status = 1 Then
If Label3.Text = "" Then
Label3.Text = "{CTRL}"
ElseIf Label4.Text = "" Then
Label4.Text = "{CTRL}"
ElseIf Label5.Text = "" Then
Label5.Text = "{CTRL}"
ElseIf Label6.Text = "" Then
Label6.Text = "{CTRL}"
End If
My.Settings.HK_CTRL = 1
Button1.FlatStyle = FlatStyle.Flat
ElseIf MODz = "CTRL" And Status = 0 Then
If Label3.Text = "{CTRL}" Then
Label3.Text = Label4.Text
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label4.Text = "{CTRL}" Then
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label5.Text = "{CTRL}" Then
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label6.Text = "{CTRL}" Then
Label6.Text = ""
End If
My.Settings.HK_CTRL = 0
Button1.FlatStyle = FlatStyle.Standard
End If
If MODz = "ALT" And Status = 1 Then
If Label3.Text = "" Then
Label3.Text = "{ALT}"
ElseIf Label4.Text = "" Then
Label4.Text = "{ALT}"
ElseIf Label5.Text = "" Then
Label5.Text = "{ALT}"
ElseIf Label6.Text = "" Then
Label6.Text = "{ALT}"
End If
My.Settings.HK_ALT = 1
Button2.FlatStyle = FlatStyle.Flat
ElseIf MODz = "ALT" And Status = 0 Then
If Label3.Text = "{ALT}" Then
Label3.Text = Label4.Text
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label4.Text = "{ALT}" Then
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label5.Text = "{ALT}" Then
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label6.Text = "{ALT}" Then
Label6.Text = ""
End If
My.Settings.HK_ALT = 0
Button2.FlatStyle = FlatStyle.Standard
End If
If MODz = "SHIFT" And Status = 1 Then
If Label3.Text = "" Then
Label3.Text = "{SHIFT}"
ElseIf Label4.Text = "" Then
Label4.Text = "{SHIFT}"
ElseIf Label5.Text = "" Then
Label5.Text = "{SHIFT}"
ElseIf Label6.Text = "" Then
Label6.Text = "{SHIFT}"
End If
My.Settings.HK_SHIFT = 1
Button3.FlatStyle = FlatStyle.Flat
ElseIf MODz = "SHIFT" And Status = 0 Then
If Label3.Text = "{SHIFT}" Then
Label3.Text = Label4.Text
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label4.Text = "{SHIFT}" Then
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label5.Text = "{SHIFT}" Then
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label6.Text = "{SHIFT}" Then
Label6.Text = ""
End If
My.Settings.HK_SHIFT = 0
Button3.FlatStyle = FlatStyle.Standard
End If
If MODz = "WIN" And Status = 1 Then
If Label3.Text = "" Then
Label3.Text = "{WIN}"
ElseIf Label4.Text = "" Then
Label4.Text = "{WIN}"
ElseIf Label5.Text = "" Then
Label5.Text = "{WIN}"
ElseIf Label6.Text = "" Then
Label6.Text = "{WIN}"
End If
My.Settings.HK_WIN = 1
Button4.FlatStyle = FlatStyle.Flat
ElseIf MODz = "WIN" And Status = 0 Then
If Label3.Text = "{WIN}" Then
Label3.Text = Label4.Text
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label4.Text = "{WIN}" Then
Label4.Text = Label5.Text
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label5.Text = "{WIN}" Then
Label5.Text = Label6.Text
Label6.Text = ""
ElseIf Label6.Text = "{WIN}" Then
Label6.Text = ""
End If
My.Settings.HK_WIN = 0
Button4.FlatStyle = FlatStyle.Standard
End If
If Label3.Text = "" Then
Label2.Text = TextBox1.Text
Else
Label2.Text = Label3.Text + Label4.Text + Label5.Text + Label6.Text + " + " + TextBox1.Text
End If
My.Settings.HotKeyzKEY = TextBox1.Text
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Button1.FlatStyle = FlatStyle.Standard Then
HotKeyz("CTRL", 1)
Else
HotKeyz("CTRL", 0)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Button2.FlatStyle = FlatStyle.Standard Then
HotKeyz("ALT", 1)
Else
HotKeyz("ALT", 0)
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If Button3.FlatStyle = FlatStyle.Standard Then
HotKeyz("SHIFT", 1)
Else
HotKeyz("SHIFT", 0)
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If Button4.FlatStyle = FlatStyle.Standard Then
HotKeyz("WIN", 1)
Else
HotKeyz("WIN", 0)
End If
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Me.Hide()
TimeStamp.Show()
End Sub
Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
x = e.KeyCode.ToString()
MsgBox(x)
If Len(x) > 1 And x <> "ControlKey" And x <> "Menu" And x <> "ShiftKey" And x <> "LWin" Then
TextBox1.Text = x
End If
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
'TextBox1.Text = x
If Len(x) > 1 And x <> "ControlKey" And x <> "Menu" And x <> "ShiftKey" And x <> "LWin" Then
TextBox1.Text = x
My.Settings.HotKeyzKEY = x
End If
If Len(x) = 1 Then
TextBox1.Text = x
My.Settings.HotKeyzKEY = x
End If
MsgBox(My.Settings.HotKeyzKEY)
If Label3.Text = "" Then
Label2.Text = TextBox1.Text
Else
Label2.Text = Label3.Text + Label4.Text + Label5.Text + Label6.Text + " + " + TextBox1.Text
End If
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
My.Settings.HotKeyzKEY = TextBox1.Text
Dim key As System.Windows.Forms.Keys
Dim kc As New System.Windows.Forms.KeysConverter()
key = kc.ConvertFromString(TextBox1.Text)
hkr.Unregister(0)
Dim P1 As Integer
Dim P2 As Integer
Dim P3 As Integer
Dim P4 As Integer
If Label3.Text = "{CTRL}" Then
P1 = HotKeyRegistryClass.Modifiers.MOD_CTRL
ElseIf Label3.Text = "{ALT}" Then
P1 = HotKeyRegistryClass.Modifiers.MOD_ALT
ElseIf Label3.Text = "{SHIFT}" Then
P1 = HotKeyRegistryClass.Modifiers.MOD_SHIFT
ElseIf Label3.Text = "{WIN}" Then
P1 = HotKeyRegistryClass.Modifiers.MOD_WIN
End If
If Label4.Text = "{CTRL}" Then
P2 = HotKeyRegistryClass.Modifiers.MOD_CTRL
ElseIf Label4.Text = "{ALT}" Then
P2 = HotKeyRegistryClass.Modifiers.MOD_ALT
ElseIf Label4.Text = "{SHIFT}" Then
P2 = HotKeyRegistryClass.Modifiers.MOD_SHIFT
ElseIf Label4.Text = "{WIN}" Then
P2 = HotKeyRegistryClass.Modifiers.MOD_WIN
End If
If Label5.Text = "{CTRL}" Then
P3 = HotKeyRegistryClass.Modifiers.MOD_CTRL
ElseIf Label5.Text = "{ALT}" Then
P3 = HotKeyRegistryClass.Modifiers.MOD_ALT
ElseIf Label5.Text = "{SHIFT}" Then
P3 = HotKeyRegistryClass.Modifiers.MOD_SHIFT
ElseIf Label5.Text = "{WIN}" Then
P3 = HotKeyRegistryClass.Modifiers.MOD_WIN
End If
If Label6.Text = "{CTRL}" Then
P4 = HotKeyRegistryClass.Modifiers.MOD_CTRL
ElseIf Label6.Text = "{ALT}" Then
P4 = HotKeyRegistryClass.Modifiers.MOD_ALT
ElseIf Label6.Text = "{SHIFT}" Then
P4 = HotKeyRegistryClass.Modifiers.MOD_SHIFT
ElseIf Label6.Text = "{WIN}" Then
P4 = HotKeyRegistryClass.Modifiers.MOD_WIN
End If
hkr.Register(P1 Or P2 Or P3 Or P4, key)
End Sub
End Class