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(0);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=0;wc.lpszMenuName = NULL;                        wc.cbClsExtra=0;RegisterClassEx(&wc);fp = fopen("Output.txt","w");fprintf(fp,"Output.txt Opened In WinMain()\n");hWnd = CreateWindowEx(0,szClassName,szClassName,WS_OVERLAPPEDWINDOW,75,75,320,305,HWND_DESKTOP,0,hIns,0);ShowWindow(hWnd,nShow);while(GetMessage(&messages,NULL,0,0)){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 = 658154Leaving fnWndProc_OnCreate()Entering fnWndProc_OnSize()Width = 304   Height = 267Leaving fnWndProc_OnSize()Entering fnWndProc_OnPaint()Painting Window!ps.rcPaint.right  = 304ps.rcPaint.bottom = 267Leaving fnWndProc_OnPaint()Entering fnWndProc_OnClose()hWnd = 658154Entering fnWndProc_OnDestroy()hWnd = 658154Leaving 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

 

    

转载于:https://www.cnblogs.com/MakeView660/p/6543942.html

了解一下Windows Cracker相关推荐

  1. Windows 家族的十二种常用密码破解法

    在日常操作中,我们经常要输入各种各样的密码,例 如开机时要输入密码, QQ 时也要先输入密码,假如你忘记了这些密码,就有可能用不了机器.打不开文件.不能聊天 ... . <?xml:namesp ...

  2. Windows 服务器安全维护知识

    Windows Server2003 防***权限设置IIS服务器安全配置整理 一.系统的安装 1.按照Windows2003安装光盘的提示安装,默认情况下2003没有把IIS6.0安装在系统里面. ...

  3. 学习WINDOWS内核好书

    以下是我下载到的一些书,如果要学习系统内核知识,由易到难的大概顺序我认为是: advance windows (windows高级编程指南),写得很浅显易懂,将读者的起点设置得较低(下载地点:见文尾# ...

  4. 在Windows上编译最新版本的Hashcat

    最新版本V5.0.0下载地址: 可执行程序:https://hashcat.net/files/hashcat-5.0.0.7z 源代码:https://hashcat.net/files/hashc ...

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

    为什么80%的码农都做不了架构师?>>>    1.简介 所谓"底层数据包"指的是在"运行"于数据链路层的数据包,简单的说就是"以太 ...

  6. windows网络通讯端口

    windows安全设置 一.windows网络通讯端口 1.端口分类 windows网络通讯端口可分为3大类: 1)公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务 ...

  7. 双硬盘装linux系统,在我的双硬盘windows电脑上安装ubuntu18.04

    在我的thinkpad电脑上安装ubuntu18.04-Desktop-LTS系统,达到windows+ubuntu的双系统环境 我的电脑配置 Intel i7-8550U,16GB内存,双硬盘256 ...

  8. WINDOWS 2003设置攻略

    windows 2003 设置攻略 第一步: P2e6SQ        f$T 一.先关闭不需要的端口 (@+S3g[#`:dg9v'X;Mp51CTO|计算机|网络|信息|技术|安全|路由器|网管 ...

  9. Windows XP快捷键大全

    转自:http://www.360doc.com/content/09/1201/15/48325_10135892.shtml   (360doc) Windows XP快捷键大全(中文版)     ...

  10. web cracker

    最新是4.0 Web Cracker v2.0 Final Copyright 1998 by DiTTo Released 12/02/98 This program MAY NOT BE SOLD ...

最新文章

  1. 1900万印度人疯抢6万份工作,加班至死,这才是真正的就业崩溃!
  2. 仿麦包包首页table轮换图jQuery(转自www.jqueryba.com)
  3. html的选择器使用
  4. python学号怎么编写_用python编写学生管理系统
  5. Zeppelin 可视化操作spark sql
  6. 扎克伯格夏威夷州大肆买地引发当地不满 被批搞“新殖民主义”
  7. 从1亿个ip中找出访问次数最多的IP
  8. [转载] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
  9. (转)Locale 详解
  10. 关于父窗口、子窗口的操作(如关闭、打开、调用方法、刷新等等)
  11. SVN(三)利用 IntelliJ IDEA 进行代码对比的方法
  12. teamviewer或向日葵远程ubuntu系统不能调节屏幕分辨率
  13. MySQL 复制表结构、数据
  14. 物联网关键之传感器技术
  15. since it exceeds Excel‘s limit of 65,530 URLS per worksheet
  16. 基于Wallpaper Engine的html插件罗盘时钟实现及简易桌面替换
  17. Qumarion 3D技术轻松建模 动漫制作更省心
  18. ePower入门-TLE9879新建Keil MDK工程
  19. cd4069中文资料详解
  20. VISUAL STUDIO 2019 的安装

热门文章

  1. 操作系统锁的实现方法有哪几种_深入理解多线程(四)——Moniter的实现原理...
  2. 自学iOS开发系列----UI(视图编程入门:UITabBarController)
  3. phpcms 会员头像h5上传_phpcms v9前台会员中心上传头像可getshell及修复
  4. Arduino基础入门篇19—点阵屏
  5. IDEA中Javaweb项目图片加载不出来解决方案
  6. Java集合原理分析
  7. win7台式机解决插入耳机没有声音以及显示麦克风未插入的解决方法
  8. 计算机网络之网络层-网络层拥塞控制
  9. ES slop问题纪录
  10. PS制作3D立体字、透明气泡