2010-09-09 2 views
0

Я хочу захватить, когда кто-то использует CtrlC даже когда выключено фокус. im с использованием Visual Basic 2010.Vb.net Capture Ctrl + C

ответ

1

Ладно, так что у меня есть для вас решение, что я проверил работы. Вам понадобится библиотека 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

Вам нужно создать крючок низкого уровня. This CodeProject example работает идеально, и я сам использовал его для учебных целей. Я немного изменил код, но вот простой пример того, что вы могли бы сделать с этой библиотекой. Опять же, это просто пример и может не отражать окончательный код, но его можно легко модифицировать, чтобы захватить 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 
+0

спасибо плохо проверить это прямо сейчас. – Joseph

+0

да это не будет работать для меня, этот код isnt vb.net, вы можете сказать от; в конце, плюс «private static» – Joseph

+0

Вам просто нужно ссылаться на библиотеку в вашем проекте, код, который вы напишете, будет Vb.Net, который очень легко конвертировать, поскольку они являются необычно похожими. Кроме того, в Интернете есть конвертеры, которые преобразуют C# в Vb.Net и наоборот. Вам просто нужно приложить немного усилий. –