Search code examples
vb.netkeyhook

Vb.net Capture Ctrl+C


I want to capture when someone uses CtrlC even when off focus. im using Visual Basic 2010.


Solution

  • Okay, so I have a solution for you that I verified works. You will need a C# library though, and a little extra work is required, but not much. Create a C# class library and add a class called 'MyHooks' and add a reference to both System.Windows.Forms.dll and the library I linked you to. Your main program that will use this will reference this C# library and System.Windows.Forms.

    namespace HookManager.Interface {
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Gma.UserActivityMonitor;
    using System.Windows.Forms;
    
    public static class MyHooks {
    
        public static void HookControlC(KeyEventHandler keyDown, KeyEventHandler keyUp) {
            HookManager.KeyDown += keyDown;
            HookManager.KeyUp += keyUp;
        }
    
    }
    }
    

    Now in your program can do something like:

    Imports hookmanager.interface
    Imports System.Windows.Forms
    
    Module Module1
    
    Sub Main()
        MyHooks.HookControlC(AddressOf ControlC_KeyDown, AddressOf ControlC_KeyUp)
    
        While True
            Application.DoEvents()
        End While
    End Sub
    
    Private m_ControlKeyPressed As Boolean = False
    
    Private Sub ControlC_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        If e.KeyValue = 162 OrElse e.KeyValue = 163 Then
            m_ControlKeyPressed = True
        End If
        If m_ControlKeyPressed Then
            If e.KeyCode = Keys.C Then
                Console.WriteLine("You captured, control c!")
                Console.WriteLine(Clipboard.GetText())
            End If
        End If
    End Sub
    
    Private Sub ControlC_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs)
        If m_ControlKeyPressed Then
            If e.KeyValue = 162 OrElse e.KeyValue = 163 Then
                m_ControlKeyPressed = False
            End If
        End If
    End Sub
    
    End Module