当前位置: 首页 > web >正文

【网络安全-键盘监视】学会以后去捉弄舍友,看他有了什么不可告人的秘密

🍃博主昵称:一拳必胜客
博主主页面链接:博主主页传送门
博主专栏页面连接:专栏传送门–计算机考研
🍑创作初心:本博客的初心是每天分享记录自己学习的脚步,和各位技术友探讨交流,同时给同样感兴趣的朋友以参考;
博主研究方向:渗透测试、嵌入式、机器学习;
🌸博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;
今日闲谈: 单片机门槛低,薪资待遇比较低。参加算法比赛很赚。入职金融公司的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
http://www.xdnf.cn/news/11452.html

相关文章:

  • Android-Tangram模型:淘宝、天猫都在用的UI框架模型你一定要懂!
  • mysql数据库下载、安装、使用
  • 10个方法教你解决虚幻4运行崩溃问题
  • AsyncTask的使用和工作原理
  • estore简版商城思路
  • 深入理解java.lang.InstantiationError异常
  • JNI常用数据类型转换库函数使用总结
  • 分享我免费可用API接口网站
  • bootstrap方法_【统计学】bootstrap方法
  • 软件测试方法_边界值分析法
  • 地图上分成一块一块区域 高德地图_开车用哪个导航最好?看看老司机总结的地图对比,学会不吃亏...
  • Couchbase数据备份与恢复
  • CountDownTimer 倒计时,定时器工具类
  • WTL简介
  • C#对ListBox控件中的数据进行的操作
  • JVM内存配置详
  • 高级分布式系统-第11讲 现场总线技术
  • 杭电oj--人见人爱A+B 2033
  • 线性回归(Linear Regression)
  • 一个外国的好网站 http://www.ilovejackdaniels.com/
  • Serialization即序列化全解析(转)
  • 无线网络领域国际会议/期刊排名
  • CSS教程:div垂直居中的N种方法
  • SLIC超像素分割详解(一)(二)(三)
  • verilog之testbench的写法
  • 免费标准下载网站
  • 为什么需要协调能力?如何提高协调能力?
  • ENet特性简介
  • SQL Server 数据库
  • 轻松搞定!png格式图片怎么弄?详细方法一网打尽