问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C#做键盘敲击次数记录求代码

发布网友 发布时间:2023-05-24 16:53

我来回答

3个回答

热心网友 时间:2024-11-25 07:04

刚好最近学习钩子,以下是整理源码。

static int hKeyboardHook = 0; //键盘钩子句柄
public const int WH_KEYBOARD_LL = 13; //处理键盘消息
private const int WM_KEYDOWN = 0x100;//键盘按下
//声明键盘钩子事件类型.
HookProc KeyboardHookProcere;
//声明键盘钩子的封送结构类型
[StructLayout(LayoutKind.Sequential)]
public class KeyboardHookStruct
{
public int vkCode; //表示一个在1到254间的虚似键盘码
}
//装置钩子的函数
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
//卸下钩子的函数
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);
//下一个钩挂的函数
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
[DllImport("user32")]
public static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey, int fuState);
[DllImport("user32")]
public static extern int GetKeyboardState(byte[] pbKeyState);
[DllImport("kernel32.dll", CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr GetMoleHandle(string lpMoleName);
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
//先前按下的键
public List<Keys> preKeys = new List<Keys>();
int b;
//析构函数.
~Form1()
{
Stop();
}
public void Start()
{
//安装键盘钩子
if (hKeyboardHook == 0)
{
KeyboardHookProcere = new HookProc(KeyboardHookProc);
Process curProcess = Process.GetCurrentProcess();//获取新的 Process 组件并将其与当前活动的进程关联
ProcessMole curMole = curProcess.MainMole;
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcere, GetMoleHandle(curMole.MoleName), 0);
if (hKeyboardHook == 0)
{
Stop();
throw new Exception("SetWindowsHookEx ist failed.");
}
b = 0;
}
}
public void Stop()
{
bool retKeyboard = true;
if (hKeyboardHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook = 0;
}
//如果卸下钩子失败
if (!(retKeyboard)) throw new Exception("UnhookWindowsHookEx failed.");
}
int num = 0;//记录次数
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
if (wParam == WM_KEYDOWN)
{
KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));
Keys keyData = (Keys)MyKeyboardHookStruct.vkCode;
preKeys.Add(keyData);
num++;
label1.Text = Convert.ToString(num);
b = 1;
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}

private void Form1_Load(object sender, EventArgs e)
{
Start();
}

热心网友 时间:2024-11-25 07:04

对于OnKeyPress的重载是针对你的Form来的,也就是说发往你的Form的KeyPress事件会被截获,而发往其他程序的消息是得不到的
按照你说的,实际上是做的键盘钩子(截获密码用的),这样说就差不多能理解可行性了
另外,就算是键盘钩子,好像也仅能针对某一个进程,貌似不能针对整个系统
个人观点 坐等高人

热心网友 时间:2024-11-25 07:05

我只能给你个提示-----全局钩子 要想在任何窗体下点击都有记录 需要全局钩子
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 求3D出屏短片,百度云分享等都可以! 只有女人的国度,是哪国国名 哈弗m6都市版和精英版区别 越野版和城市版哪个值得买 片仔癀/凝时精华在哪儿买价格便宜? SuV汽车城市版和运动版什么区别,二驱和四驱什么区别 拼多多片仔癀美容旗舰店是真的吗 双十一在天猫片仔癀官方旗舰店买到2013年4月的货,用着过敏,谁能鉴定真... 片仔癀天猫旗舰店是真的么 片仔癀拼多多官方店是哪一家 车不锈钢杯内外胆,车刀车出来有毛刺,怎么磨刀车出来没毛刺, 热水瓶胆的底部有个“尖刺”,为什么不能受损坏,其功能是什么... 在校园一码通上申请的银行卡在哪激活? 新买的内胆涂层有毛刺正常吗 装修的时候看了日子的,第二年装修还要来吗 ...还有很多台阶、楼梯等的看线,看线的定义是什么呀?CAD室内施工图也是... RVV护套线和VVR有什么区别? ...第五十层的真魔王怎么打,需攻、守、血各多少,或需要其它什么... 广州天气如何穿衣 FLASH小游戏干掉老板1里杀死老板后收音机里听的三句话是什么? 宦妃天下漫画哪个软件可以看 仿古牌寓意象征 处事论事无烦恼,知足常乐种福田什么意思 dnf军团副本三阶段和二阶段有什么区别? 函数与集合中 那个横着的8是神马啊 宦妃天下漫画芳官哪集出现 四小龙一阶段二阶段什么意思啊 古代翡翠为什么都刻有花纹 航嘉vp500怎么样 vp500p电源能带什么显卡 大水牛vp500是多少w 安钛克VP500电源被坑12V单路输出不足,能不能把另一路也接上显卡_百度知... 大水牛vp500静音王额定功率多少 翡翠吊坠石纹是什么 翡翠石花纹 我有一枚戒指上有黄色的宝石,不知道是黄金石或者是什么宝石。请... 涉损金额净资产之比如何计算 买了安钛克vp500电源货到才知道,显卡线是8+6 我的760是8+8。可以只插... miui12国际版激活不了 不去营业厅怎么解封手机卡 航嘉Jumper500W和安钛克VP500P哪个好