通常很多情况下,会有这样的事情,就是:

我们在运行某些程序的时候,发现按钮置灰了,比如购买版权或者输入序列号才能够获得访问权限。某个按钮才允许点击。

其实所有的这些东西都是 别的人或者公司利用一些编程语言调用windows的函数,实现的。所以如果我们也能调用windows的函数,那么我们就能够执行一些按钮或者某些东西背后的函数。

自己的mfc还暂时 用不了,不过 可以 试试这个。

调出这个界面,看到有一个置灰的设置按钮。我们可以试着调用这个后面的函数。

/*如何调出来?【在win7环境下】

打开控制面板

点击鼠标。*/

然后利用vs的工具中的spy++ x64。

进入查找窗口。

拖住这个到刚刚鼠标的那个置灰的按钮上面。就可以得到一个句柄。

句柄【在我理解,就是一个话把子,怎么解释,就是,别人说一件事儿,你得顺着往下说才能把话接下来,然后完成你想说的东西。在程序里面,执行到这里,有这样一个句柄,允许我们说话了,我们就从这一点开始,顺着往下说,往往就能得到我们想要的结果】

所以得到了句柄之后。我们可以新建一个工程。

#include <windows.h>

int main(){

    SendMessage(0x001607E6,WM_LBUTTONDOWN,,);    
  SendMessage(0x001607E6,WM_LBUTTONUP,,); return ;
}

//在HWND的第一个参数里面输入刚刚的句柄。

//猜测 第二个参数 是 WindowManager_LeftButtonDown,就是窗口管理器左键按钮点下。

//然后左键按钮弹起。

就强制的往刚刚不能执行的函数里面发送了一个信息。前面的引文介绍说,这就是调用了windows底层的一些函数,如果按钮可以点击,则鼠标点击,按钮按下,当需要注册的时候,或者需要序列号的时候我们并没有,就不能点击。但是当我们给他发送一条消息以后,是不是问题就解决了。

如果能编译的话可以看到这样一个结果:

如果编译通不过的话:

5 43 F:\c++codeInDev\c++\ForceClick.cpp [Error] invalid conversion from 'int' to 'HWND' [-fpermissive]

会报这样一个错误。

无效的转换从 int 到 HWND。

句柄里面我们得到了一个001607E6,这是一个16进制的数儿,用以标识一个单元,在这里面就是指定的那个 按钮。每次重新生成都会不一样。说明是每次创建窗口去内存分配的。我们在这里面要把0x001607E6补齐用以标识这是一个内存地址。但是这并不够,这个内存单元实质上,到底是什么呢?他是一个 HWND 类型的东西。

这就涉及到强制类型转换了。

就是 我们能去内存得到一个,得到一个空间。比如int a,这个a没有给初始化,它的结果不想Java里面给一个 0,而是 原来这里面是什么就是什么,再赋值,再把原来的内容覆盖,是这样一个情况。如果这个里面本来就有东西,那么我们可以把这个东西,以任何的形式输出。比如int 比如double,比如什么,我们可以随意把它以任何一种类型输出。

举这样一个例子:

#include <stdio.h>
Int main(){
Double d = 10.2;
Double f = 10.2/;
Printf("%f\n",f);
Printf("%d\b",f);
}

运行结果是:

所以可以发现,这串儿数字 在 内存里面是一直存在的,只不过取决于 我们用什么方式输出。那么通用的 刚刚的 001607E6这个 地址里面的东西,也是一直有的,如果用int形式 拿出来的话,就是 这么一堆数儿,编译器会报一个这个 int 并非 是 HWND类型的东西,那么我们去取内容的时候把它变成HWND类型,再交给程序,就可以通过了。

所以 修改之后的代码是:

#include <windows.h>

int main(){

SendMessage((HWND)0x001607E6,WM_LBUTTONDOWN,,);//5 43 F:\c++codeInDev\c++\ForceClick.cpp [Error] invalid conversion from 'int' to 'HWND' [-fpermissive]

SendMessage((HWND)0x001607E6,WM_LBUTTONUP,,);

return ;

}

这样就就可以执行了。

同样的:

我们还可以做一些小坏事:

其实并没有那么神奇,就是调用了一下 windows底层的 函数,windows本身利用函数调用了这个地方SetTextA(“确定”);那我们修改一下,它就执行了我们的函数。

所以变成了这个样子。

利用C语言强行点击置灰的按钮的更多相关文章

  1. 设置UIButton的文字居右显示 去掉点击默认置灰效果

    1.设置UIButton的文字居右显示 [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight]; ...

  2. html实现网站全局按钮点击后置灰,不允许连续点击

    <script> document.addEventListener("mouseup", upHandler, true); function upHandler(e ...

  3. 使用CSS将图片转换成黑白(灰色、置灰)z转

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.c ...

  4. 小tip: 使用CSS将图片转换成黑白(灰色、置灰)[转]

        小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 ...

  5. 利用C语言结构体模拟一个简单的JavaBean

    利用C语言模拟一个Javabean 仅封装了,“无参构造函数”,“带参构造函数”,"toString方法" #include <stdio.h> struct User ...

  6. 利用R语言打造量化分析平台

    利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...

  7. 利用R语言进行交互数据可视化(转)

    上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个 ...

  8. 【有意思的BUG】默认置灰的属性的值传递

    数据由Client发送给Server,如下图所示,Server在收到请求后会响应Client. 比如Client发送给Server一组数据:Name:sean&Hobby:movies& ...

  9. Button 使用Command 按钮置灰未更新

    当Button绑定了Command,按钮在窗口弹出.或者其它事件时,会自动置灰. 有时,异步执行时间较长时,界面一些绑定了命令的Button,State不会变化,会一直置灰. 直到再次转移Focus. ...

随机推荐

  1. VJP1071新年趣事之打牌(背包+输出路径)

    简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下 #include <iostream> #include<cstdio> #include<cs ...

  2. 抽离CodeIgniter的数据库访问类 可以独立使用

    好吧,因为组织需要,最近又开始转战php了,业务逻辑都还好说,主要是老大要求在数据访问层上加上登录态验证.其实这种要求也是合理的,互联网服务要求上层保护下层,但下层不能完全相信上层.但是问题也就来了, ...

  3. ASP.NET MVC 3.0 Controller基础

    ASP.NET MVC 3.0 Controller基础   1.Controller类与方法 Controller(控制器)是ASP.NET MVC的核心,负责处理浏览器请求,并作出响应.Cotro ...

  4. Android使用HttpClient实现文件上传到PHP服务器,并监控进度条

    上传 服务器端PHP 代码如下 : <?php $target_path = "./tmp/";//接收文件目录 $target_path = $target_path.($ ...

  5. POJ 3169 Layout 差分约束系统

    介绍下差分约束系统:就是多个2未知数不等式形如(a-b<=k)的形式 问你有没有解,或者求两个未知数的最大差或者最小差 转化为最短路(或最长路) 1:求最小差的时候,不等式转化为b-a>= ...

  6. Content-Type伪装 - 将jsp伪装成css

    一.前期理论准备 1)目的:  在jsp中动态生成css语句,然后输出给浏览器解析.渲染. 2)浏览器解析文件的依据:  页面加载后,浏览器会发起各个请求去下载各种资源.  比如下载css文件,然后根 ...

  7. 【Java基础】增强for循环要注意陷阱

    什么是增强for循环 增强for循环是一种简单模式的for循环,为了方便数组和集合的遍历而存在. int[] arr = new int[]{1, 2, 3, 4, 5, 6}; for (int a ...

  8. Codeforces182D - Common Divisors(KMP)

    题目大意 如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S1和S2,求它们的公共因子个数 题解 如果它们有公共因子,那么显然它们的最小公共因子肯定是 ...

  9. CentOS搭建VSFTP

    1.先看看有没有安装 rpm -qa | grep vsftpd 如果没有提示,说明没有安装.接下来,我们安装一个ftp. 2.yum安装vsftpd: yum -y install vsftpd 安 ...

  10. 问题-[DelphiXE2]编译程序体积大的问题

    作者:cashfly 发布:2012-03-27 15:12 最近准备换Delphi高版本来写程序,以前一直用7.想体验一下新版本带来的便捷,首先有一个体积问题,看下文介绍. 首先,在IDE里可以直接 ...