windows下的句柄利用
什么是句柄
维基百科:在程序设计中,句柄(handle)是Windows操作系统用来标识被应用程序所建立或使用的对象的整数。其本质相当于带有引用计数的智能指针。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,可以使用句柄
句柄能干嘛
在得到一个应用程序的句柄以后,几乎可以为所欲为,下面用两个例子来说明句柄能够做的一些事情。
利用句柄实现不可点击按钮的点击操作
在很多应用程序中,会存在一些不可点击的按钮,而这些按钮可以通过句柄来实现点击。例如注册按钮。还会有很多文本,而这些文本也可以被修改。
创建一个用于测试的MFC程序
在测试用例中,有一个不可点击的按钮,一个可点击的按钮,一个文本
利用VS的spy++功能查找程序句柄
打开spy++查找工具
拖动靶心,使其能够查找到不可点击按钮的句柄,如图所示,这里获取到不可点击按钮的句柄为:002008EE,注意这里使用的是16进制数表示的。
编写程序,调用windows的API改变按钮状态
#include<Windows.h>
int main()
{
int i;
i = 5;
while (1)
{
printf("按钮按下倒计时:%d\n", i);
Sleep(1000);
i--;
if (i == 0)
break;
}
printf("按钮按下");
//此处模拟的是按钮被按下
SendMessage(0x002008EE, WM_LBUTTONDOWN, 0, 0);
SendMessage(0x002008EE, WM_LBUTTONUP, 0, 0);
getchar();
return 0;
}
这样就实现了按钮状态的修改,灰色按钮也能按下了。
如果调用的是SetWindowTextA(0x00160858, "text change");
函数,还可以改变标题:
以上操作存在的问题和解决方案
按照以上的方法确实可以修改任意元素,但每次程序启动以后,其句柄值会发生改变,这就需要获取一种固定的值。Windows中有API可以获得句柄。FindWindowA()
.程序一旦生成,其类便是固定的,此函数就是利用这个固定的类获得句柄。
此处我们使用一个带窗口的程序测试一下,就百度云好了,使用spy获得标题和类
编写功能,此处做一个时隐时现的例子
HWND win = FindWindowA("DuiHostWnd", "欢迎使用百度网盘");
if (win == NULL)
printf("not find");
else
while (1)
{
ShowWindow(win, SW_NORMAL);
Sleep(100);
ShowWindow(win, SW_HIDE);
Sleep(100);
}
实现的效果如下所示:
按照这样的方式,还可以做很多效果之类的,但是还都是类似的,这里就不多做阐述了。
windows下的句柄利用的更多相关文章
- Windows下MFC程序利用LockCop解决死锁
死锁现象:在训练的时候,点击“终止”按钮时不时会发生死锁. 检测工具:LockCop.TRACE宏.::GetCurrentThreadID函数. 检测手段: 总结起来就是—— 第一步:用LockCo ...
- linux文件描述符fd(windows下的句柄)
在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件 fd:file descriptor 文件描述符0,1,2分别给了标准输入.标准输出和错误输出. ls - ...
- windows下利用dll生成lib
原来工程编译的一些dll库,这次项目需要静态库,偷懒想直接转化.看到网上一些教程,使用VC工具和建立lib项目来实现.有点麻烦.还有一种方法,仅仅利用工具和几条命令转化.来试试看.文章参考harrie ...
- windows下Redis安装及利用java操作Redis
一.windows下Redis安装 1.Redis下载 下载地址:https://github.com/MicrosoftArchive/redis 打开下载地址后,选择版本 然后选择压缩包 下载 R ...
- 利用cygwin创建windows下的crontab定时任务
要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Cygwin-1.7.35 下载地址 环境下载 什么是Cygwin Cygwin是一个在windows平台上运行的类U ...
- 利用SSH协议在Windows下使用PuTTY连接Ubuntu
利用SSH协议在Windows下使用PuTTY连接Ubuntu Ubuntu部分 首先我们要为Ubuntu配置一下环境,让它支持ssh服务,我们要做的其实也很简单,就一下两步: 安装OpenSSH软件 ...
- windows下利用iis建立网站网站并实现局域共享
博客园 首页 新随笔 联系 管理 订阅 随笔- 54 文章- 9 评论- 0 Windows下利用IIS建立网站并实现局域网共享 https://blog.csdn.net/qq_4148541 ...
- [技术博客] 利用Vagrant+virtualbox在windows下进行linux开发
目录 加速box安装的方法 root账户登录 换源教程 安装rvm 访问rails server RubyMine连接虚拟机上的解释器 作者:庄廓然 在windows下进行linux开发:利用Vagr ...
- windows下利用virtual 安装 flask
出处: https://segmentfault.com/a/1190000002450878 本文介绍Windows下如何从零开始搭建Python + Flask开发环境. 安装Python 2.7 ...
随机推荐
- 019_linuxC++之_函数模板引入
(一)首先我们来看非模板程序,函数只是输入不一样的变量就需要构件很多个不一样的函数,那么这样很麻烦,则引入函数模板 int& max(int& a, int& b) { ret ...
- ZurmoCRM 可执行代码高危风险报告及修复
鉴于目前ZumroCRM已经云端化,其开源版本的代码基本没有人维护,也没有地方提交bug清单.但相信国内有一些用户在使用这个开源的版本,下面报告一个ZumoCRM的重大风险点. 风险描述: 当用户登录 ...
- js实现OSS上传图片,STS临时授权访问OSS
1. 引入aliyun-oss-sdk.min.js <script type="text/javascript" src="/static/js/common/a ...
- FPGA课设-基于Xilinx Basys2开发板的除法器设计
介绍一下Basys开发板: Basys2 FPGA开发板是一个电路设计实现平台,任何人都可以通过它来搭建一个真正的数字电路.Basys2是围绕着一个Spartan-3E FPGA芯片和一个Atmel ...
- python 生成金字塔
num = eval(input("请输入一个整数:")) , num + ): , -): print(" ", end="\t") , ...
- 1.3 JAVA规范以及基础语法(if条件和循环)
一.规范以及运算符 1.命名规则 类名大驼峰规则方法名.变量名小驼峰原则常量大写.下划线分开见名释义.不与关键字冲突 关键字链接:https://www.runoob.com/java/java-ba ...
- Java写入的常用技巧(二)
在一般从流接收数据写入介质的场景中,大部分存在每批次数据较小,导致小文件较多的问题. 一般考虑设置一个缓冲池,将多个批次的数据先缓冲进去,达到一定大小,再一次性批量写入 //公共缓冲池和缓冲池大小,如 ...
- nginx 错误集锦
1)下载地址 http://nginx.org/en/download.html 找windows的下载. 2)然后解压到自己的一个目录. 3)配置环境变量,将解压到的路径加进去. 4)修改配置文件 ...
- React Native 日常报错
在学习React.js 或 React Native 过程中,有时看着别人的框架或代码,但总是会出现错误,因为React或之中用到的一些包经常更新,有些代码或教程就显得过旧了. 一.日常报错 'con ...
- Selenium 2自动化测试实战38(整合自动发邮件功能)
整合自动发邮件功能 解决了前面的问题后,现在就可以将自动发邮件功能集成到自动化测试项目中了.下面重新编辑runtest.py文件 #runtest.py #coding:utf-8 from HTML ...