了解一下Windows Cracker
Windows Cracker
消息拆析宏
可以为消息进行参数分解
无需记住或查阅资料来了解WParam和lParam的意义
可以忘记旧的消息处理方式:switch/case
不适合于大型复杂的需要处理大量消息的应用: coding is slow and program debugging and maintenance become slow as the application grows.
WindowsX.h
包含三种类型的宏: Macro APIs, window message crackers, Control APIs
优点:
1)减少强制类型转换数量,避免强制类型转换出错;
2)程序可读性增强;
3)16位和Win32 API之间的转换;
4)简便易懂(宏);
5)容易与现存代码结合;
6)可用于C语言和C++语言;
7)可效仿编制自己的宏;
8) 使用这些宏,你不必关心和了解隐含的Windows结构。
代码Demo:
#include <windows.h>
#include <windowsx.h>
#include <tchar.h>
#include <cstdio>
FILE* fp = NULL; /* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
//#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)
//#define FORWARD_WM_CREATE(hwnd, lpCreateStruct, fn) (BOOL)(DWORD)(fn)((hwnd), WM_CREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct)) BOOL fnWndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
fprintf(fp," Entering fnWndProc_OnCreate()\n");
fprintf(fp," hWnd = %u\n",(unsigned)hWnd);
fprintf(fp," Leaving fnWndProc_OnCreate()\n\n"); /* MSDN states WM_CREATE should return 0 to continue and -1 for failure */
//return FALSE; /* but the HANDLE_WM_CREATE macro translates return values greater than zero to 0, and the rest to -1. */
return TRUE;
} /* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */
// #define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
// #define FORWARD_WM_SIZE(hwnd, state, cx, cy, fn) (void)(fn)((hwnd), WM_SIZE, (WPARAM)(UINT)(state), MAKELPARAM((cx), (cy))) void fnWndProc_OnSize(HWND hWnd, UINT state, int cx, int cy)
{
fprintf(fp," Entering fnWndProc_OnSize()\n");
fprintf(fp," Width = %d\tHeight = %d\n",cx,cy);
fprintf(fp," Leaving fnWndProc_OnSize()\n\n");
} /* void Cls_OnPaint(HWND hwnd) */
// #define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
// #define FORWARD_WM_PAINT(hwnd, fn) (void)(fn)((hwnd), WM_PAINT, 0L, 0L) void fnWndProc_OnPaint(HWND hWnd)
{
PAINTSTRUCT ps;
HDC hDC; fprintf(fp," Entering fnWndProc_OnPaint()\n");
hDC=BeginPaint(hWnd,&ps);
fprintf(fp," Painting Window!\n");
fprintf(fp," ps.rcPaint.right = %d\n",(int)ps.rcPaint.right);
fprintf(fp," ps.rcPaint.bottom = %d\n",(int)ps.rcPaint.bottom);
EndPaint(hWnd,&ps);
fprintf(fp," Leaving fnWndProc_OnPaint()\n\n");
} /* void Cls_OnClose(HWND hwnd) */
// #define HANDLE_WM_CLOSE(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
// #define FORWARD_WM_CLOSE(hwnd, fn) (void)(fn)((hwnd), WM_CLOSE, 0L, 0L) void fnWndProc_OnClose(HWND hWnd)
{
fprintf(fp," Entering fnWndProc_OnClose()\n");
fprintf(fp," hWnd = %u\n",(unsigned)hWnd);
DestroyWindow(hWnd);
fprintf(fp," Leaving fnWndProc_OnClose()\n");
} /* void Cls_OnDestroy(HWND hwnd) */
// #define HANDLE_WM_DESTROY(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
// #define FORWARD_WM_DESTROY(hwnd, fn) (void)(fn)((hwnd), WM_DESTROY, 0L, 0L) void fnWndProc_OnDestroy(HWND hWnd)
{
fprintf(fp," Entering fnWndProc_OnDestroy()\n");
fprintf(fp," hWnd = %u\n",(unsigned)hWnd);
PostQuitMessage();
fprintf(fp," Leaving fnWndProc_OnDestroy()\n");
} LRESULT CALLBACK fnWndProc(HWND hwnd, unsigned int msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd, WM_CREATE, fnWndProc_OnCreate);
HANDLE_MSG(hwnd, WM_SIZE, fnWndProc_OnSize);
HANDLE_MSG(hwnd, WM_PAINT, fnWndProc_OnPaint);
HANDLE_MSG(hwnd, WM_CLOSE, fnWndProc_OnClose);
HANDLE_MSG(hwnd, WM_DESTROY, fnWndProc_OnDestroy);
default:return (DefWindowProc(hwnd, msg, wParam, lParam));
}
} int WINAPI WinMain(HINSTANCE hIns, HINSTANCE hPrevIns, LPSTR lpszArgument, int nShow)
{
TCHAR szClassName[] = _T("Debugging Windows Programs");
WNDCLASSEX wc;
MSG messages;
HWND hWnd; wc.lpszClassName = szClassName; wc.lpfnWndProc=fnWndProc;
wc.cbSize = sizeof(WNDCLASSEX); wc.style=CS_DBLCLKS;
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hInstance=hIns;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_BTNSHADOW; wc.cbWndExtra=;
wc.lpszMenuName = NULL; wc.cbClsExtra=;
RegisterClassEx(&wc);
fp = fopen("Output.txt","w");
fprintf(fp,"Output.txt Opened In WinMain()\n");
hWnd = CreateWindowEx(,szClassName,szClassName,WS_OVERLAPPEDWINDOW,,,,,HWND_DESKTOP,,hIns,);
ShowWindow(hWnd,nShow);
while(GetMessage(&messages,NULL,,))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
fprintf(fp,"Output.txt Closed In WinMain()\n");
fclose(fp); return messages.wParam;
}
输出Output.txt
Output.txt Opened In WinMain()
Entering fnWndProc_OnCreate()
hWnd = 658154
Leaving fnWndProc_OnCreate() Entering fnWndProc_OnSize()
Width = 304 Height = 267
Leaving fnWndProc_OnSize() Entering fnWndProc_OnPaint()
Painting Window!
ps.rcPaint.right = 304
ps.rcPaint.bottom = 267
Leaving fnWndProc_OnPaint() Entering fnWndProc_OnClose()
hWnd = 658154
Entering fnWndProc_OnDestroy()
hWnd = 658154
Leaving fnWndProc_OnDestroy()
Leaving fnWndProc_OnClose()
Output.txt Closed In WinMain()
参考:http://www.cplusplus.com/forum/windows/59737/
http://www.softpedia.com/get/Programming/SDK-DDK/Message-Cracker-Wizard.shtml (Message Cracker Wizard)
An innovative tool makes every Windows developer forget about the old way of handling messages!
百度云:http://pan.baidu.com/s/1dFkTds9%20 密码:8q7o
了解一下Windows Cracker的更多相关文章
- Windows下底层数据包发送实战
1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...
- 基于Windows环境下Myeclipse10.0下载安装破解及jdk的下载安装及环境变量的配置
jdk的安装及环境变量的配置 1.安装JDK开发环境 附上jdk安装包的百度云链接 链接:http://pan.baidu.com/s/1mh6QTs8 密码:jkb6(当然自行去官网下载最好哒,可以 ...
- 7 Best Free RAR Password Unlocker Software For Windows
Here is the list of Best Free RAR Password Unlocker Software for Windows. These software run differe ...
- Windows Server2003 IIS服务器安全配置整理
一.系统的安装 1.按照Windows2003安装光盘的提示安装,默认情况下2003没有把IIS6.0安装在系统里面.2.IIS6.0的安装 开始菜单—>控制面板—>添加或删除程序—& ...
- WINDOWS常用端口列表
按端口号可分为3大类: (1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务.通常这些端口的通讯明确表明了某种服务的协议.例如:80端口实际上总 ...
- 我是如何破解你的WINDOWS密码的 ?(2)
介绍 在这个系类的第一部分中,我们揭示了windows创建和储存密码的机制.我们也涉猎了一点两种加密方法的弱点和破解的方法.在这系列的第二篇也是最后一篇文章中,我会实战用网上免费的工具一步一步的来破解 ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- C# 注册 Windows 热键
闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...
随机推荐
- cocos2d-x 父节点和子节点执行不同动作
Test6::Test6() { CCSprite* sp1 = CCSprite::create(s_pPathSister1); CCSprite* sp11 = CCSprite::create ...
- Java 9和Java 10的新特性
http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...
- 委托事件和jquery中的delegate方法
利用事件冒泡的特性,给父元素绑定事件,然后判断事件对象,来给父元素的每个子元素添加事件,而不是直接在所有的子元素上绑定事件: <ul> <li></li> < ...
- 每日英语:Skull Shakes Up Human Family Tree
A newly discovered 1.8 million-year-old skull offers evidence that humanity's early ancestors emerge ...
- 通过命令来查看NameNode的状态(是Active还是Standby)
通过浏览器虽然可以查看HDFS的NameNode的状态,如果感觉不方便,可以直接使用命令来查看(前提是HDFS已经启动): [root@hadoop01 ~]# hdfs haadmin -getSe ...
- ehcache OR Memcache
ehcache是纯java编写的,通信是通过RMI方式,适用于基于java技术的项目.memcached服务器端是c编写的,客户端有多个语言的实现,如c,php(淘宝,sina等各大门户网站),pyt ...
- 面向对象 之 [C++面试题]
说到面向对象,大家第一反应应该就是它的三大特性:封装性.继承性和多态性.那么我们先简单的了解一下这三大特性: (1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的 ...
- dp之混合背包poj1742(推荐)
题意:给你价值为a1,a2.....的货币,每种有c1,c2.......个,求这些货币所能组成的价值小于等于m有多少个..... 思路:很像一道多重背包题?那我一开始的确是用多重背包的思路编写的.. ...
- C语言 · 拿糖果
算法提高 拿糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不 ...
- 基于Discuz的原生态MVC框架Uxf
前言 国内大量网站在使用Discuz程序,当然,大多数网站只将其作为一款论坛程序,少量的将其作为一款完整的社区程序.因此,授权不授权的情况撇开不谈,很多人都会基于该款程序进行二次开发. Discuz二 ...