了解一下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(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 = 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

 

    

时间: 2025-01-14 17:10:30

了解一下Windows Cracker的相关文章

Windows API参考大全新编

书名:新编Windows API参考大全 作者:本书编写组 页数:981页 开数:16开 字数:2392千字 出版日期:2000年4月第二次印刷 出版社:电子工业出版社 书号:ISBN 7-5053-5777-8 定价:98.00元 内容简介 作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的.本书首先对Win32 API函数做完整的概述:然后收录五大类函数:窗口管理.图形设备接口.系统服务.国际特性以及网络服务:在附录部分,讲解如何

WINDOWS常用端口列表

按端口号可分为3大类: (1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务.通常这些端口的通讯明确表明了某种服务的协议.例如:80端口实际上总是HTTP通讯. (2)注册端口(Registered Ports):从1024到49151.它们松散地绑定于一些服务.也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的.例如:许多系统处理动态端口从1024左右开始. (3)动态和/或私有端口(Dynamic and/or Privat

基于windows平台的java+php+tomcat+apche+mysql+phpMyAdmin环境搭建

准备软件: jdk-8u31-windows-x64 mysql-installer-community-5.6.19.0 apache-tomcat-8.0.18-windows-x64 Apache HTTP server2.4_X64 myeclipse-pro-2014-GA-offline-installer-windows php-5.6.5-Win32-VC11-x64 phpMyAdmin-4.2.11-all-languages 详细说明: 1.jdk-8u31-windows

Windows下底层数据包发送实战

1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求,但是有些时候还是需要发送底层数据包的(例如SYN扫描),那么如何发送呢? 本文记录了我试图实现的过程中遇到的一些问题以及解决办法,需要注明:①本文只考虑Windows上的实现  ②本文主要目的是实现发送部分  ③本文假定读者理解网络分层结构和一些基本的网络编程方法  ④本文只是在讨论常规技术,切勿

Windows Server2003安全设置策略

Windows Server2003安全设置策略一.Windows Server2003的安装 1.安装系统最少两需要个分区,分区格式都采用NTFS格式 2.在断开网络的情况安装好2003系统   3.安装IIS,仅安装必要的 IIS 组件(禁用不需要的如FTP 和 SMTP 服务).默认情况下,IIS服务没有安装,在添加/删除Win组件中选择"应用程序服务器",然后点击"详细信息",双击Internet信息服务(iis),勾选以下选项: Internet 信息服务

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

jdk的安装及环境变量的配置 1.安装JDK开发环境 附上jdk安装包的百度云链接 链接:http://pan.baidu.com/s/1mh6QTs8 密码:jkb6(当然自行去官网下载最好哒,可以下载到最新版) 正规安装下载流程见下面操作: 百度搜索:jdk 你将看到以下界面: 下载网站:http://www.oracle.com/ 开始安装JDK: 修改安装目录如下: 确定之后,单击“下一步”. 注:当提示安装JRE时,可以选择不要安装. 2.配置环境变量: 对于Java程序开发而言,主要

windows 2003最完善最完美的权限及安全设置解决方案【转】

一.服务器安全设置 1. IIS6.0的安装和设置 1.1 开始菜单—>控制面板—>添加或删除程序—>添加/删除Windows组件 应用程序 ———ASP.NET(可选) |——启用网络 COM+ 访问(必选) |——Internet 信息服务(IIS)———Internet 信息服务管理器(必选) |——公用文件(必选) |——万维网服务———Active Server pages(必选) |——Internet 数据连接器(可选) |——WebDAV 发布(可选) |——万维网服务(

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

介绍 在这个系类的第一部分中,我们揭示了windows创建和储存密码的机制.我们也涉猎了一点两种加密方法的弱点和破解的方法.在这系列的第二篇也是最后一篇文章中,我会实战用网上免费的工具一步一步的来破解一次密码给你看. 注意!以下这些技术只为学习目的,请勿用于非法用途!   获取密码HASH 为了破解密码你应该先获取密码在windows中储存的位置,这些hash储存在windows在SAM文件中,这个文件在C:\Windows\System32\config不过在windows启动时这个文件是不能

Windows Server定时重启任务制定

[本篇以Windows Server 2012 R2为例] 第一步:编写重启脚步 其实就是一句话:shutdown /r 其他shutdown命令参考可以使用shutdown /?查阅 第二步:设置任务计划程序 1.再开始-所有应用中找到任务计划程序 2.展开任务计划程序库,这里对任务计划程序做了很多的分类,我们找到System Manager类,在此类下创建自动重启系统任务 3.选择窗口右侧的创建任务(也可以使用创建基本任务,它是以向导的方法创建) 4.常规页面用于定义任务名称及执行任务的用户