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的更多相关文章

  1. Windows下底层数据包发送实战

    1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...

  2. 基于Windows环境下Myeclipse10.0下载安装破解及jdk的下载安装及环境变量的配置

    jdk的安装及环境变量的配置 1.安装JDK开发环境 附上jdk安装包的百度云链接 链接:http://pan.baidu.com/s/1mh6QTs8 密码:jkb6(当然自行去官网下载最好哒,可以 ...

  3. 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 ...

  4. Windows Server2003 IIS服务器安全配置整理

    一.系统的安装   1.按照Windows2003安装光盘的提示安装,默认情况下2003没有把IIS6.0安装在系统里面.2.IIS6.0的安装 开始菜单—>控制面板—>添加或删除程序—& ...

  5. WINDOWS常用端口列表

    按端口号可分为3大类: (1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务.通常这些端口的通讯明确表明了某种服务的协议.例如:80端口实际上总 ...

  6. 我是如何破解你的WINDOWS密码的 ?(2)

    介绍 在这个系类的第一部分中,我们揭示了windows创建和储存密码的机制.我们也涉猎了一点两种加密方法的弱点和破解的方法.在这系列的第二篇也是最后一篇文章中,我会实战用网上免费的工具一步一步的来破解 ...

  7. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  8. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  9. C# 注册 Windows 热键

    闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...

随机推荐

  1. .NET url 的编码与解码

    举例: aaa.aspx?tag=.net%bc%bc%ca%f5 aaa.aspx?tag=.net%e6%8a%80%e6%9c%af看起来好像是不一样,其实他们都是对".net技术&q ...

  2. Can you share some Scala List class examples?

    Scala List FAQ: Can you share some Scala List class examples? The Scala List class may be the most c ...

  3. Maven工程pom.xml文件秒变gradle工程的命令

    下面是一个maven工程,我想把它转成gradle项目,怎么办? 打开cmd命令行窗口,切换到你的maven工程的pom.xml文件所在目录,然后执行如下命令: gradle init --type ...

  4. 国际化的工具类ognl utils

    package yycg.util; import java.io.Serializable;import java.text.MessageFormat;import java.util.Array ...

  5. c++之——重载、重写、重定义

    函数重载: 必须在同一个类中进行: 子类无法重载父类的函数,父类同名函数将被子类名称覆盖: 重载是在编译期间根据参数类型和个数决定函数的调用(静态联编). 函数重写与重定义: 重写: 必须发生在基类和 ...

  6. 支持移动触摸设备的简洁js幻灯片插件

    lory是一款支持移动触摸设备的简洁的js幻灯片插件.该幻灯片插件可以通过纯js调用,也可以将该幻灯片插件作为jQuery插件来使用.该幻灯片的过渡动画具有硬件加速功能,并且可以定制是否使用easin ...

  7. draw sin

    draw sin Steps 导入包 生成X轴,Y轴的数据点 设置输出图大小,像素,前景色 指定线宽,线型,绘制曲线 设置坐标轴范围 显示图形. Code #!/usr/bin/env python ...

  8. uart 超声波传感器数据读取

    传感器选择 淘宝上搜索 US-100 , 价格大概在17块人民币左右. 读取数据的代码如下: // include/aplex_tty.h #ifndef _APLEX_TTY_H__ #define ...

  9. wireshark error: There are no interfaces on which a capture can be done.

    一.Linux环境:1.root用户启动 01.启动一个shell 02.sudo wireshark (需要root权限) 2.普通用户启动 从Linux中第一次启动Wireshark的时候,可能会 ...

  10. 错误将UIViewController当做UITableViewController来用