什么是句柄

维基百科:在程序设计中,句柄(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);
}

实现的效果如下所示:



按照这样的方式,还可以做很多效果之类的,但是还都是类似的,这里就不多做阐述了。

最新文章

  1. html的a链接的href怎样才另起一个页面
  2. sql2000新建登陆用户错误“21002:[SQL-DMO] 用户***已经存在”的原因和解决方法【孤立用户解决方法】
  3. poj 1995 裸快速幂
  4. Hark的数据结构与算法练习之希尔排序
  5. navicat premium 导出表结构
  6. spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描
  7. 【原】Storm分布式RPC
  8. sencha touch jsonp
  9. VS编译出现 HTTP 错误 403.14 - Forbidden 决绝办法
  10. 点赞增加的jquery写法
  11. Cisco设备IOS的恢复方法 两种方法
  12. HTTP学习目录
  13. [Android]Gradle 插件 DiscardFilePlugin(class注入&amp;清空类和方法)
  14. 【Luogu1919】 A*B Problem升级版(FFT)
  15. es6中参数【默认值,扩展运算符】
  16. 在Java中使用redisTemplate操作缓存
  17. java策略设计模式
  18. Oozie如何和安装部署
  19. IO流的序列化和反序列化
  20. SSM_CRUD新手练习(5)测试mapper

热门文章

  1. React组件间通信-sub/pub机制
  2. demo(一) react-native-router-flux
  3. 1250 Fibonacci数列(矩阵乘法)
  4. java线程之sleep
  5. php原生导出简单word表格(TP为例) (原)
  6. 修改tomcat控制台的标题
  7. [CSP-S模拟测试]:C(倍增+数学)
  8. dcokee 安装 nginx
  9. python练习-(秒转时分秒,时分秒转秒)-对比linux中文件的上次更改时间跟当前时间相差多久。
  10. Celery分布式队列学习