【网络安全-键盘监视】学会以后去捉弄舍友,看他有了什么不可告人的秘密
🍃博主昵称:
一拳必胜客
博主主页面链接:博主主页传送门
博主专栏页面连接:专栏传送门–计算机考研
🍑创作初心:本博客的初心是每天分享记录自己学习的脚步,和各位技术友探讨交流,同时给同样感兴趣的朋友以参考;
博主研究方向:渗透测试、嵌入式、机器学习;
🌸博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;
今日闲谈: 单片机门槛低,薪资待遇比较低。参加算法比赛很赚。入职金融公司的it岗位,钱比较多。
学好编程:数据结构+算法 项目经验(淘宝分布式文件系统核心存储系统 + 百万并发共享单车)大四三月份找工作,百度五轮面试。‘’
特别鸣谢:木芯工作室 、Ivan from Russia
文章目录
- 🍃实现原理
- windows是基于消息驱动的
- 必会C语言知识复习
- 位运算
- C 可变参数
- C 命令行参数
- 虚函数
- 🍑实现过程
- windows常用函数
- 引入头文件:Windows.h
- 🌸成品展示
🍃实现原理
windows是基于消息驱动的
同时消息是共享的。
所以可以实现键盘捕获。
同时----键盘又是消息!—消息还会被缓存!
必会C语言知识复习
位运算
C 可变参数
有时,您可能会碰到这样的情况,您希望函数带有**可变数量的参数,**而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数。下面的实例演示了这种函数的定义。
int func(int, ... )
{...
}int main()
{func(2, 2, 3);func(3, 2, 3, 4);
}
请注意,函数 func() 最后一个参数写成省略号,即三个点号(…),省略号之前的那个**参数是 int,代表了要传递的可变参数的总数。**为了使用这个功能,您需要使用 stdarg.h 头文件,该文件提供了实现可变参数功能的函数和宏。具体步骤如下:
定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。
在函数定义中创建一个 va_list 类型变量,该类型是在 stdarg.h 头文件中定义的。
使用 int 参数和 va_start 宏来初始化 va_list 变量为一个参数列表。宏 va_start 是在 stdarg.h 头文件中定义的。
使用 va_arg 宏和 va_list 变量来访问参数列表中的每个项。
使用宏 va_end 来清理赋予 va_list 变量的内存。
现在让我们按照上面的步骤,来编写一个带有可变数量参数的函数,并返回它们的平均值:
#include <stdio.h>
#include <stdarg.h>double average(int num,...)
{va_list valist;double sum = 0.0;int i;/* 为 num 个参数初始化 valist */va_start(valist, num);/* 访问所有赋给 valist 的参数 */for (i = 0; i < num; i++){sum += va_arg(valist, int);}/* 清理为 valist 保留的内存 */va_end(valist);return sum/num;
}int main()
{printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}
例子2:
// 64 位机器用 8 字节对齐, 32 位 4 位对齐
#ifdef X64
#defin t long long
#else
#define t int
#endif//VA_LIST套宏中可以使用,用来改变INTSIZEOF中t的类型
//固定参数详见
void test(int a, double b, char* c)
{char *p = (char*)&a;//因为&a = void 类型 需要转换,void * =&a 不需要转换但是使用时要转换printf("%p %p %p\n", &a, &b, &c);//观察地址变化printf("%p %s",(p+8),*(char**)(p+8+8));//64位机器时加8内存大小8字节对齐return;
}//可变参数实验
void test1(char* s,char *st,...)
{char *ppt =(char*)&s;//printf("%p %p %p %p,",ppt,&s,&st,(char*)ppt+8);printf("%p %p %p %p\n", ppt, &s, &st, ppt + 8);printf("%s\n", *(char**)(ppt+4));printf(" %d\n",*(int*)(ppt + 4+4));//当是X64就加8 X86就加4因为内存对齐规则return;
}int main