【C语言】【windows】【入门笔记】 第五课--灰色按钮突破专家
erbi_lucifer吧
全部回复
仅看楼主
level 10
堕erbi 楼主

一楼度娘……[紧张]



2012年05月29日 14点05分 1
level 10
堕erbi 楼主

应用前几节课的知识开始制作一个简单版的【灰色按钮突破专家】……
需要:
001.知道主函数。
【C语言】【windows】【入门笔记】 第一课--主函数
https://tieba.baidu.com/p/1545781680
002.会使用宽字符
【C语言】【windows】【入门笔记】 第二课--宽字符
https://tieba.baidu.com/p/1545995727
003.会弹出对话框,进行按钮按下操作
【C语言】【windows】【入门笔记】 第三课--对话框
https://tieba.baidu.com/p/1569538194
004.会加载使用皮肤文件
【C语言】【windows】【入门笔记】 第四课--通用换肤
https://tieba.baidu.com/p/1569688211
再加上一些api函数的调用,还有控件的拖动与其属性的设置即可……
[撒花]

2012年05月29日 14点05分 2
level 10
堕erbi 楼主

这是效果:
2012年05月29日 15点05分 3
level 10
堕erbi 楼主

/*************************************************************************************
一些准备……[人呢]
**************************************************************************************/
按照第三课,新建空的工程,加入CPP文件和对话框资源,写入代码。
得到的效果是:
第三课很重要,完成的话这个第四课就简单了……

2012年05月29日 15点05分 4
level 10
堕erbi 楼主

调整对话框,控件的大小与位置,自己喜欢即可……[看楼上]
调整属性:
对话框:
Caption:灰色按钮突破
Center:true (中央显示)
Maximize Box:true (最大化按钮)
Minimize Box:true (最小化按钮)
取消按钮(ID是IDCANCEL):
Disabled:true (禁用这个)
标签(就是第三课上显示“我是标签”的那个,用于显示文字提示):
Caption:程序运行后,界面会自动隐藏,直接用鼠标选择需要进行突破的按钮所在的窗体即可

2012年05月29日 15点05分 5
level 10
堕erbi 楼主

工程:
2012年05月29日 15点05分 6
level 10
堕erbi 楼主

最后往资源文件加入一个图标(ico格式):
添加资源:
弹出:
选择图标,然后按下“导入”!这样子你可以选择你想要加入的图标文件……对于图标文件(.ico)直接导入就会在对话框程序编译时自动加上。你在vs2010写黑窗体的控制台程序依旧可以用这个方法加入图标……O(∩_∩)O哈哈~

2012年05月29日 15点05分 7
level 10
堕erbi 楼主

/*************************************************************************************
界面准备完成![傻兮兮]
**************************************************************************************/

2012年05月29日 15点05分 8
level 10
堕erbi 楼主

/*************************************************************************************
开始整代码![撞玻璃]
**************************************************************************************/

2012年05月29日 15点05分 9
level 10
堕erbi 楼主

重温下第四课(好吧,4楼口误了,是这第五课)……
以下是到了第四课的所有代码:
#include <windows.h>
#include "resource.h"
extern "C" __dec
lsp
ec(dllimport) int __stdcall SkinH_Attach();
#pragma comment(lib,"SkinH.lib")
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg)
{
case WM_INITDIALOG :
{ //初始化的消息
}
break;
case WM_COMMAND : //按钮被按下的消息
{
switch (wParam)
{
case IDOK ://就是新建对话框的时带有的那个 确定 按钮
{
//ID是 IDOK 的按钮被按下
MessageBox(hwndDlg,TEXT("按钮按下"),TEXT("信息"),MB_OK);
}
break;
case IDCANCEL:
{ /
/ID是 IDCANCEL 的按钮被按下,即 取消 按钮 和右上方的 ‘X’关闭程序按钮
EndDialog(hwndDlg, IDCANCEL);//结束对话框
}
break;
default:break;
}
}
default:break;
}
return 0;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
//代码
SkinH_Attach();//加载当前目录下名为“skinh.she”皮肤
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); //弹出对话框
return 0 ;
}
[投降]
使用皮肤是记得带以下文件(见第四课):
皮肤文件 skinh.she
动态链接库 SkinH.dll
静态连接库 SkinH.lib

2012年05月29日 15点05分 10
level 10
堕erbi 楼主

[人呢]
计时器的专用函数(回调函数)里面的所有代码:
VOID CALLBACK TimerProc(HWND hwnd,UINT message,UINT timerID,DWORD TIME)
{
EnumChildWindows(GetForegroundWindow(),EnumChildPro,NULL);
SetWindowText(GetForegroundWindow(),TEXT("OK!【erbi_lucifer吧--光影】"));
}
EnumChildWindows可以枚举某个窗体的子控件。
参数一是:窗体的句柄,这里使用GetForegroundWindow()是得到最前面窗体的句柄。
参数二是:它的专用函数(回调函数)。
参数三是:传给专用函数的参数,这里不用传参数,直接给NULL。
SetWindowText是设置窗体的标题,用来看看程序是否在这个窗口起作用了……
参数一是:窗体句柄。
参数二是:要显示的文字。
这个计时器的回调函数的作用就是将最前面的窗体的标题改成 "OK!【erbi_lucifer吧--光影】",然后枚举窗体的控件……
[偷笑]

2012年05月29日 15点05分 12
level 10
堕erbi 楼主

上面的EnumChildWindows也有她自己的专用函数(每枚举一个控件就调用一次,知道所有控件全部枚举完成……),我们来看看,这个函数也是最后一个函数了……程序快完成了……[卷被]
专用函数(回调函数)的参数都是固定的,不要去更改……
BOOL CALLBACK EnumChildPro(HWND hwnd,LPARAM lParam){
if(!IsWindowEnabled(hwnd)){
EnableWindow(hwnd,true);
}
return TRUE;
}
hwnd是EnumChildWindows枚举控件时传进来的控件句柄。
IsWindowEnabled(句柄)是判断这个句柄说指向的窗体(控件也是一种窗体)是不是可以使用,(也就是判断是不是灰色按钮)……
EnableWindow(句柄,可以使用不?)
是设置一个窗体(控件)是否可以使用。
这两句就是说判断一个控件是否是灰色按钮,是的话就激活它……
if(!IsWindowEnabled(hwnd)){
EnableWindow(hwnd,true);
}

2012年05月29日 15点05分 13
level 10
堕erbi 楼主

/*************************************************************************************我是分割线
在对话框左上角加上图标……[揉脸]
case WM_INITDIALOG ://对话框初始化消息
{
HICON hIcon = LoadIcon((HINSTANCE) GetWindowLong(hwndDlg, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICON1));
SendMessage(hwndDlg, WM_SETICON, TRUE, (LPARAM)hIcon);
}
break;
//初学的话如果看不懂的话这个直接使用,以后在理解也可以……
加载图标 LoadIcon(程序实例化句柄,从资源ID得到路径)
发送显示图标消息 SendMessage(窗体句柄,设置图标WM_SETICON,立刻,图标句柄)
[鲁拉]
2012年05月29日 15点05分 14
level 10
堕erbi 楼主

/*************************************************************************************
整代码完成![撞玻璃]
**************************************************************************************/

2012年05月29日 15点05分 15
level 10
堕erbi 楼主

我们编译运行程序,按下 ‘确定’:然后点击需要突破的程序窗口即可……

2012年05月29日 15点05分 16
level 10
堕erbi 楼主

[拍砖]快断网了,明天继续……
2012年05月29日 16点05分 17
level 10
堕erbi 楼主

[没有钱]
才发现隐藏功能也被我简化了,我们换成最小化吧,在按下‘确定’的时候最小化窗体……
ShowWindow(hwndDlg,SW_MINIMIZE);
参数一是:窗体句柄。
参数二是:窗体显示状态,SW_MINIMIZE是最小化的意思。

2012年05月30日 10点05分 18
level 10
堕erbi 楼主

完成程序后做一下测验:
一般单用户登陆计算机时,任务管理器中的发送信息按钮是灰色的&……
我们来突破一下……
发送信息可用:
接收信息:

2012年05月30日 10点05分 19
level 10
堕erbi 楼主

不过别想用这个东西来突破一些需要注册的安装软件,那些人家很多都是做了防备的……[思考者]
如使用while循环,如不输入正确注册码就一直让按钮不可用,按钮突破专家一边突破那里while循环一边灰色化……等等……[撞玻璃]

2012年05月30日 10点05分 20
level 10
堕erbi 楼主

/*************************************************************************************
以下是这节课的全部源代码:
/*************************************************************************************
#include <tchar.h>
#include <Windows.h>
#include "resource.h"
extern "C" __declspec(dllimport) int __stdcall SkinH_Attach();
#pragma comment(lib,"SkinH.lib")
HWND hwnd2;
BOOL CALLBACK EnumChildPro(HWND hwnd,LPARAM lParam){
if(!IsWindowEnabled(hwnd)){
EnableWindow(hwnd,true);
}
return TRUE;
}
VOID CALLBACK TimerProc(HWND hwnd,UINT message,UINT timerID,DWORD TIME)
{
EnumChildWindows(GetForegroundWindow(),EnumChildPro,NULL);
SetWindowText(GetForegroundWindow(),TEXT("OK!【erbi_lucifer吧--光影】"));
}

2012年05月30日 10点05分 21
1 2 尾页