windows下的句柄利用
2024-09-05 07:00:57
什么是句柄
维基百科:在程序设计中,句柄(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);
}
实现的效果如下所示:
按照这样的方式,还可以做很多效果之类的,但是还都是类似的,这里就不多做阐述了。
最新文章
- html的a链接的href怎样才另起一个页面
- sql2000新建登陆用户错误“21002:[SQL-DMO] 用户***已经存在”的原因和解决方法【孤立用户解决方法】
- poj 1995 裸快速幂
- Hark的数据结构与算法练习之希尔排序
- navicat premium 导出表结构
- spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描
- 【原】Storm分布式RPC
- sencha touch jsonp
- VS编译出现 HTTP 错误 403.14 - Forbidden 决绝办法
- 点赞增加的jquery写法
- Cisco设备IOS的恢复方法 两种方法
- HTTP学习目录
- [Android]Gradle 插件 DiscardFilePlugin(class注入&;清空类和方法)
- 【Luogu1919】 A*B Problem升级版(FFT)
- es6中参数【默认值,扩展运算符】
- 在Java中使用redisTemplate操作缓存
- java策略设计模式
- Oozie如何和安装部署
- IO流的序列化和反序列化
- SSM_CRUD新手练习(5)测试mapper