Created
July 26, 2012 08:52
-
-
Save Stasonix/3181083 to your computer and use it in GitHub Desktop.
GLOBAL HOOK example C#
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel; | |
using System.Data; | |
using System.Drawing; | |
using System.Linq; | |
using System.Text; | |
using System.Windows.Forms; | |
using System.Text.RegularExpressions; | |
using System.IO; | |
using System.Drawing.Imaging; | |
using System.Runtime.InteropServices; | |
namespace WFA | |
{ | |
public partial class Form1 : Form | |
{ | |
public Form1() | |
{ | |
InitializeComponent(); | |
} | |
// ... { GLOBAL HOOK } | |
[DllImport("user32.dll")] | |
static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId); | |
[DllImport("user32.dll")] | |
static extern bool UnhookWindowsHookEx(IntPtr hInstance); | |
[DllImport("user32.dll")] | |
static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam); | |
[DllImport("kernel32.dll")] | |
static extern IntPtr LoadLibrary(string lpFileName); | |
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); | |
const int WH_KEYBOARD_LL = 13; // Номер глобального LowLevel-хука на клавиатуру | |
const int WM_KEYDOWN = 0x100; // Сообщения нажатия клавиши | |
private LowLevelKeyboardProc _proc = hookProc; | |
private static IntPtr hhook = IntPtr.Zero; | |
public void SetHook() | |
{ | |
IntPtr hInstance = LoadLibrary("User32"); | |
hhook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0); | |
} | |
public static void UnHook() | |
{ | |
UnhookWindowsHookEx(hhook); | |
} | |
public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam) | |
{ | |
if (code >= 0 && wParam == (IntPtr)WM_KEYDOWN) | |
{ | |
int vkCode = Marshal.ReadInt32(lParam); | |
//////ОБРАБОТКА НАЖАТИЯ | |
if (vkCode.ToString() == "162") | |
{ | |
MessageBox.Show("You pressed a CTR"); | |
} | |
return (IntPtr)1; | |
} | |
else | |
return CallNextHookEx(hhook, code, (int)wParam, lParam); | |
} | |
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) | |
{ | |
// убираем хук | |
UnHook(); | |
} | |
private void Form1_Load(object sender, EventArgs e) | |
{ | |
// Устанавливаем хук | |
SetHook(); | |
} | |
} | |
} |
Great. Thanks
Wohh , thx! finally found!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Во время выполнения программы нельзя печатать( что делать?