一個例子(以爲我沒有更新,因爲.NET框架1.1的代碼)有一個事件時按下任意鍵:
public class Hook
{
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
private static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
private static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll")]
public static extern int GetCurrentThreadId();
public static event Action Event = null;
private const int WH_KEYBOARD = 2;
private delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
static int _hookKeyboard = 0;
private static HookProc _hookKeyboardProc;
public static bool Install()
{
_hookKeyboardProc = new HookProc(KeyboardHook);
_hookKeyboard = SetWindowsHookEx(WH_KEYBOARD, _hookKeyboardProc, IntPtr.Zero, GetCurrentThreadId());
return _hookKeyboard != 0;
}
public static bool Uninstall()
{
// uninstall keyboard hook
if(!UnhookWindowsHookEx(_hookKeyboard))
return false;
_hookMouseProc = null;
return true;
}
private static int KeyboardHook(int nCode, IntPtr wParam, IntPtr lParam)
{
// if any message - fire event
if(nCode >= 0 && Event != null)
Event();
return CallNextHookEx(_hookKeyboard, nCode, wParam, lParam);
}
}
您需要一個窗口來捕獲密鑰,或者您應該查看'SetWindowsHook' http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx –
@JeroenvanLangen - 你有一個如何在C#中完成的例子? – webdad3
@ webdad3你有沒有試過一個着名的網站有很多例子:http://google.com? – BartoszKP