了解一下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 整 ...
随机推荐
- ccTouchBegan
CCLayer中的setTouchEnabled(true)会开启多点触摸. 如果使用CCDirector::sharedDirector()->getTouchDispatcher()-> ...
- Oracle PLSQL Demo - 02.SELECT INTO单行赋值[SELECT INTO variables]
declare v_sal number; begin ; dbms_output.put_line(v_sal); end;
- Ubuntu 12.04下jdk的安装与配置
由于要开始在linux下学习jsp的开发,所以就准备自己动手配置一下jdk和tomcat jdk 下载地址: http://www.oracle.com/technetwork/java/javase ...
- 教程-Delphi中比较两个对象是否一致及地址是否相同
资料说明: 1.http://blog.csdn.net/diligentcatrich/article/details/7077294 说明: 实例代码: procedure TForm1.btn1 ...
- python学习笔记(12)--爬虫下载煎蛋网图片
说明: 1. 这个其实是在下载漫画之前写的,比那个稍微简单点,之前忘放到博客备份了. 2. 不想说啥了,总结放到漫画那个里面吧! import urllib.request import re imp ...
- 【Visual Studio】“诊断工具”窗口不支持当前的调试配置
问题:在运行Debug后,无法使用诊断工具. 解决办法: http://stackoverflow.com/questions/32167640/visual-studio-2015-diagnost ...
- 【WPF】使用Popup控件做浮窗/提示框
需求:当鼠标移入某个区域时,弹出一个浮窗,以便用户进行下一步操作. 效果如下图: 当鼠标移入左上角的[多选显示]框内,出现下面的浮窗(悬浮在原UI之上).当在浮窗外点击鼠标左键时,隐藏该浮窗. 由于该 ...
- js实现分页的几个源码,看完基本就懂了
第一种: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...
- Ubuntu 12.04下NFS安装配置图解
以前就听说过nfs服务,但是一直没有用,在学习制作根文件系统的时候,才算是真正用上它了,我感觉它还不错,通过它“挂载”制作好的根文件系统.它在嵌入式中的角色就用下面的一张图说明吧! 用网线将主机与开发 ...
- Android——网格视图 GridView
activity_activitygrid.xml <?xml version="1.0" encoding="utf-8"?> <GridV ...