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. Linux下NDK的配置

    vim ~/.bashrc 在文件末尾添加如图两行代码 写下来方便复制export NDKROOT=/usr/ndk/android-ndk-r12bexport PATH=$NDKROOT:$PAT ...

  2. angular学习笔记(二十一)-$http.get

    基本语法: $http.get('url',{}).success(function(data,status,headers,config){}).error(function(data,status ...

  3. maven install 跳过test方法

    方式1:用命令带上参数 mvn install -Dmaven.test.skip=true 方式2:在pom.xml里面配置 <build> <defaultGoal>com ...

  4. JavaEE各种Javadoc的下载

    刚才突然发现,很多servlet的api都不熟悉,但是又没有给eclipse导入api,就google了一下 关键字,servlet api / doc 或者java ee api / doc 注意版 ...

  5. vim复制粘贴常用命令

    在Windows下我们习惯的操作,复制单个字符,复制单行多行,删除单行多行,在linux的vim中操作如下: G(shift+g+g):跳到文档尾 g+g:跳转到文档首 home键:光标移动到行首 e ...

  6. Jar/War/Ear等包的作用与区别详解

    以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.java中除了jar格式还有war和ear等包文 ...

  7. mysql的OFFSET实现分页

    使用limit 可以实现分页比如 limit 0,5  是从1到5条, limit 5,5  是从,6到10条, 使用limit offset 时 limit 5 offset 0 从 1 到5 条 ...

  8. 【Unity笔记】物体的Transform操作:速度、旋转、平移

    例如,通过按键/摇杆来操作飞机在三维空间的飞行状态.包括速度(大小,方向).位移. public class ExampleClass : MonoBehaviour { public float s ...

  9. system v进程间通信整理

    key_t键和ftok函数 三种类型的system v IPC使用key_t值作为他们的名字.头文件<sys/types.h> 把key_t这个数据类型定义为一个整数,它通常是一个至少32 ...

  10. Android——控件AutoCompleteTextView 自动提示

    Android:控件AutoCompleteTextView 自动提示 在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextV ...