C# 如何编写程序监控键盘,即使程序的窗体不是当前活动窗体

C#监控键盘,将键盘输入的内容写到记事本,即使当前窗体已经被最小化或不是活动窗体。程序都能将按下的键盘值的内容保存到记事本。我起先的想法使用计时器,因为用计时器就能实现窗... C#监控键盘,将键盘输入的内容写到记事本,即使当前窗体已经被最小化或不是活动窗体。程序都能将按下的键盘值的内容保存到记事本。
我起先的想法使用计时器,因为用计时器就能实现窗体最小化也能照常运行,
但是发觉黔驴技穷了,不知该从何入手。
3楼xbc0010249:
public int MyKeyboardProc(int nCode, int wParam, int lParam)
{
//在这里放置你的处理代码 return 0;
}
如果我要把下面这段代码加在方法里, 那么weitr.WriteLine();里怎么写
才能实现记录键盘输入?
StreamWriter weitr = new StreamWriter("Test.txt");
weitr.WriteLine();
weitr.Close();
展开
 我来答
xbc0010249
推荐于2018-04-05 · TA获得超过249个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:95.5万
展开全部
必须使用Windows api,用键盘钩子函数截取键盘按键记录,然后把这个EXE程序注册为系统服务就能自动运行了

C#中键盘钩子的使用 [转帖]
public class Win32Hook
{

[DllImport("kernel32")]
public static extern int GetCurrentThreadId();

[DllImport( "user32",
CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(
HookType idHook,
HOOKPROC lpfn,
int hmod,
int dwThreadId);

public enum HookType
{
WH_KEYBOARD = 2
}

public delegate int HOOKPROC(int nCode, int wParam, int lParam);

public void SetHook()
{
// set the keyboard hook
SetWindowsHookEx(HookType.WH_KEYBOARD,
new HOOKPROC(this.MyKeyboardProc),
0,
GetCurrentThreadId());
}

public int MyKeyboardProc(int nCode, int wParam, int lParam)
{
//在这里放置你的处理代码 return 0;
}
}
使用方法
可以在Form的构造函数里放入
Win32Hook hook = new Win32Hook();
hook.SetHook();
lcg1986
推荐于2016-06-08 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1613万
展开全部
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Kits.Win32API;
using Kits.Hook;

namespace WindowsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private WinHook hook = new WinHook(HookType.WH_KEYBOARD_LL);
private HookProc hookProc = null;

private void Form1_Load(object sender, EventArgs e)
{
hookProc = new HookProc(this.MyKeyboardProc);
hook.SetWindowsHookEx(hookProc);
}

private int MyKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam) {
KeyboardHookStruct keyInfo = (KeyboardHookStruct)System.Runtime.InteropServices.Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));
this.Text = ((char)keyInfo.vkCode).ToString();
return (User32.CallNextHookEx(hook.HHook,nCode,wParam,lParam));
}
}
}

很多东西我封装了.不过没有关系,其他的你可以使用3楼的方法,主要是不知道如何获取按键信息,你可以看我的MyKeyboardProc是怎么处理的,lParam这个参数其实是一个指向按键信息体的指针.其声明如下:

public class KeyboardHookStruct
{
public int dwExtraInfo;
public int flags;
public int scanCode;
public int time;
public int vkCode;

public KeyboardHookStruct();
}

vkCode就是按键对应的ASCII,可以转成char记录的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiehaiyimo
2010-05-14 · TA获得超过270个赞
知道小有建树答主
回答量:278
采纳率:100%
帮助的人:260万
展开全部
我应该有一段从网上下载的视频,可以捕获键盘按下的键,是用C#语言写的,而且是vs2008 环境下些的,如果那个视频还在如果您需要传给您!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
uestc_lijin
2010-05-09 · 超过25用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:69.1万
展开全部
弄个全局键盘钩子即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苌苗Us
2010-05-09 · TA获得超过340个赞
知道小有建树答主
回答量:462
采纳率:0%
帮助的人:424万
展开全部
从键盘消息钩子入手
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式