Захват Vb.net Ctrl + C - PullRequest
       21

Захват Vb.net Ctrl + C

0 голосов
/ 09 сентября 2010

Я хочу снимать, когда кто-то использует Ctrl C , даже когда не в фокусе. я использую Visual Basic 2010.

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Хорошо, у меня есть для вас решение, которое я проверил, работает. Вам понадобится библиотека C #, и потребуется немного больше работы, но не так много. Создайте библиотеку классов C #, добавьте класс MyHooks и добавьте ссылку как на System.Windows.Forms.dll, так и на библиотеку, с которой я вас связал. Ваша основная программа, которая будет использовать это, будет ссылаться на эту библиотеку C # и 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;
    }

}
}

Теперь в вашей программе можно сделать что-то вроде:

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
0 голосов
/ 09 сентября 2010

Вам необходимо создать низкоуровневый хук. Этот пример CodeProject отлично работает, и я сам использовал его в учебных целях.Я немного изменил код, но вот простой пример того, что вы можете сделать с этой библиотекой.Опять же, это всего лишь пример, и он может не отражать окончательный код, но может быть легко изменен для захвата Control + C, а библиотека хорошо документирована.

   private static bool m_ControlKeyPressed = false;

   private static void ControlC_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyValue == 162 || e.KeyValue == 163) {
            m_ControlKeyPressed = true;
        }
        if (m_ControlKeyPressed) {
            if (e.KeyCode == Keys.C) {
                e.SuppressKeyPress = true; // Suppress, or do something with it
            }
        }
    }

    private static void ControlC_KeyUp(object sender, KeyEventArgs e) {
        if (m_ControlKeyPressed) {
             if (e.KeyValue == 162 || e.KeyValue == 163) {
                m_ControlKeyPressed = false;
            }
        }
    }

Преобразование в Vb.Net

Private Shared m_ControlKeyPressed As Boolean = False

Private Shared Sub ControlC_KeyDown(sender As Object, 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
            e.SuppressKeyPress = True
        End If
    End If
End Sub

Private Shared Sub ControlC_KeyUp(sender As Object, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...