How can I code a listview where I will be able to register global hotkey's. When each global hotkey is presses the 3rd column's pass string should be copied to the clipboard.
This is the code i have so far.
The changes I need to make are :-Code:Public Class Form1 <System.Runtime.InteropServices.DllImport("user32.dll")> Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short End Function Dim sks As String = "8-BckSpc;9-Tab;13-Enter;16-Shft;17-Ctrl;18-Alt;33-PgUp;34-PgDn;35-End;36-Home;37-Left;38-Up;39-Right;40-Down;45-Ins;46-Del;112-F1;113-F2;114-F3;115-F4;116-F5;117-F6;118-F7;119-F8;120-F9;121-F10;122-F11;123-F12;" Dim fcombo(3), combo(3), fcnt, kcnt As Integer Dim nochk As Boolean = False Dim blnAdd As Boolean 'indicator if add button was pressed Dim addcount As Integer = 0 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 100 Timer1.Start() End Sub Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click addcount = addcount + 1 If addcount >= 2 Then For x = 0 To 3 combo(x) = 0 Next kcnt = 0 End If If btnAdd.Text.ToLower() = "add" Then 'if caption is ADD then perform Add process txtName.Enabled = True txtHk.Enabled = True txtPass.Enabled = True btnAdd.Text = "Save" btnEdit.Text = "Cancel" btnDelete.Enabled = False txtName.Text = "" txtHk.Text = "" txtPass.Text = "" blnAdd = True Else 'save process txtName.Enabled = False txtHk.Enabled = False txtPass.Enabled = False btnAdd.Text = "Add" btnEdit.Text = "Edit" btnDelete.Enabled = True If blnAdd = True Then AddItemToListView() Else EditItemInListView() End If End If End Sub Private Sub AddItemToListView() 'Usually the first unique colum is the root item Dim lv As BetterListViewItem = ListView1.Items.Add(txtName.Text) 'The remaining columns are subitems lv.SubItems.Add(txtHk.Text) lv.SubItems.Add(txtPass.Text) End Sub Private Sub EditItemInListView() If ListView1.SelectedItems.Count > 0 Then 'make sure there is a selected item to modify ListView1.SelectedItems(0).Text = txtName.Text ListView1.SelectedItems(0).SubItems(1).Text = txtHk.Text ListView1.SelectedItems(0).SubItems(2).Text = txtPass.Text End If End Sub Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click If txtName.Text.Length > 0 Then If btnEdit.Text.ToLower() = "edit" Then 'if caption is EDIT then perform EDIT process txtName.Enabled = True txtHk.Enabled = True txtPass.Enabled = True btnAdd.Text = "Save" btnEdit.Text = "Cancel" btnDelete.Enabled = False blnAdd = False Else 'cancel process txtName.Enabled = False txtHk.Enabled = False txtPass.Enabled = True btnAdd.Text = "Add" btnEdit.Text = "Edit" btnDelete.Enabled = True End If Else MessageBox.Show("Please select record to edit") End If End Sub Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click If ListView1.SelectedItems.Count > 0 AndAlso MessageBox.Show("Do you want to delete this item?", "Confirm", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then 'make sure there is a selected item to delete ListView1.SelectedItems(0).Remove() End If End Sub Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged If ListView1.SelectedItems.Count > 0 Then txtName.Text = ListView1.SelectedItems(0).Text txtHk.Text = ListView1.SelectedItems(0).SubItems(1).Text txtPass.Text = ListView1.SelectedItems(0).SubItems(2).Text End If End Sub Private Sub txtHk_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtHk.KeyDown If Not combo.Contains(e.KeyValue) And kcnt < 4 Then If kcnt > 0 Then txtHk.Text &= " + " Dim fn As Integer = sks.IndexOf(e.KeyValue.ToString & "-") If fn > -1 Then Dim keystr As String = sks.Substring(fn + 1 + e.KeyValue.ToString.Length) keystr = keystr.Remove(keystr.IndexOf(";")) txtHk.Text &= keystr Else txtHk.Text &= Chr(e.KeyValue) End If combo(kcnt) = e.KeyValue kcnt += 1 End If End Sub Private Sub txtHk_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtHk.KeyUp nochk = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If txtHk.Focused = False Then Dim x As Integer = 8 Dim kdwn As Boolean = False For x = 8 To 255 If GetAsyncKeyState(CType(x, Keys)) <> 0 Then kdwn = True If Not fcombo.Contains(x) And fcnt < 4 Then fcombo(fcnt) = x fcnt += 1 If nochk = False And kcnt = fcnt And combo.Contains(fcombo(0)) And combo.Contains(fcombo(1)) And combo.Contains(fcombo(2)) And combo.Contains(fcombo(3)) Then MessageBox.Show("Key Combo Pressed") End If End If End If If x = 159 Then x = 165 Next If kdwn = False And fcnt > 0 Then fcnt = 0 nochk = False For c = 0 To 3 fcombo(c) = 0 Next End If End If End Sub End Class
------ Use global hotkey register - But I think I wont be able to use more than one normal character in the combination like( Ctrl + A + S).
------ Iam still not able to check for the hotkey combination in the listview. The correct function should be. If hotkey present in column 2 then do copy pass string from column 3.
Any help would be appreciated.




Reply With Quote
