瞭解一下Windows Cracker

來源:互聯網
上載者:User

標籤:參考   http   意義   end   nap   包含   struct   c++語言   密碼   

  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 = 304Height = 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.