Here is my call back function of global keyboard hook
private int callBack(int nCode, int wParam, ref hookStruct lParam)
{
char temp;
if (nCode >= 0)
{
Keys number = (Keys)Marshal.ReadInt32(lParam.vkCode);
switch (wParam)
{
case WM_KEYDOWN :
case WM_SYSKEYDOWN :
if (lParam.vkCode>=65 && lParam.vkCode<=90)
{
temp = (Char)lParam.vkCode;
temp = Char.ToLower(temp);
data = data + temp;
}
else if (lParam.vkCode >= 65 && lParam.vkCode <=90)
{
temp = (Char)lParam.vkCode;
temp = char.ToUpper(temp);
data = data + temp;
}
else if (lParam.vkCode == 32)
{
temp = (Char)lParam.vkCode;
data = data + temp;
}
break;
}
}
return CallNextHookEx(hookID, nCode, wParam, ref lParam);
}
I don't know if this function good enough to detect the keys that I want to detect..........
Here is my whole class of Keyboard hook
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
namespace Low_Level_Keyboard_Hook
{
class KeyboardHook
{
private string data;
private const int VK_ALT = 0x12;
private const int VK_CONTROL = 0x11;
private const int VK_SHIFT = 16;
public string getMyData()
{
return data;
}
private delegate int keyboardHookProc(int nCode, int wParam, ref hookStruct lParam);
private keyboardHookProc kph;
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private const int WM_KEYUP = 0x0101;
private const int WM_SYSKEYUP = 0x0105;
private const int WM_SYSKEYDOWN = 0x0104;
//handle of the functions
private IntPtr hookID = IntPtr.Zero;
private struct hookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
public KeyboardHook()
{
kph = new keyboardHookProc(callBack);
hook();
}
~KeyboardHook()
{
unHook();
}
//Installs the global hook
public void hook()
{
IntPtr hInstance = LoadLibrary("USER32");
hookID = SetWindowsHookEx(WH_KEYBOARD_LL, kph, hInstance, 0); //kph is pointing to KeyboardHookProc
}
//Unhooks the global hook
public void unHook()
{
UnhookWindowsHookEx(hookID);
}
//This function will be called everytime a key is pressed
private int callBack(int nCode, int wParam, ref hookStruct lParam)
{
char temp;
if (nCode >= 0)
{
Keys number = (Keys)Marshal.ReadInt32(lParam.vkCode);
switch (wParam)
{
case WM_KEYDOWN :
case WM_SYSKEYDOWN :
if (lParam.vkCode>=65 && lParam.vkCode<=90)
{
temp = (Char)lParam.vkCode;
temp = Char.ToLower(temp);
data = data + temp;
}
else if (lParam.vkCode >= 65 && lParam.vkCode <=90)
{
temp = (Char)lParam.vkCode;
temp = char.ToUpper(temp);
data = data + temp;
}
else if (lParam.vkCode == 32)
{
temp = (Char)lParam.vkCode;
data = data + temp;
}
break;
}
}
return CallNextHookEx(hookID, nCode, wParam, ref lParam);
}
[DllImport("user32.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, keyboardHookProc callback, IntPtr hInstance, uint threadId);
[DllImport("user32.dll")]
private static extern bool UnhookWindowsHookEx(IntPtr hInstance);
[DllImport("user32.dll")]
private static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref hookStruct lParam);
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("USER32.dll")]
private static extern int GetAsyncKeyState(int vk);
[DllImport("USER32.dll")]
private static extern int GetKeyState(int nvk);
}
}
This post has been edited by flawa: 29 July 2011 - 09:25 AM

New Topic/Question
This topic is locked



MultiQuote



|