首页
社区
课程
招聘
[原创]Windows窗口消息分析
发表于: 2007-5-27 11:37 10327

[原创]Windows窗口消息分析

2007-5-27 11:37
10327
参考罗云彬的win32汇编代码改写成了C,先打开记事本(notepad),然后运行本程序…… 
 
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK MyWinProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

void SendtoNotepad(char * szBuffer);

void ShowMessage(UINT uMsg,WPARAM wParam,LPARAM lParam);

unsigned int WM_NUM[]={
             WM_NULL
            ,WM_CREATE
            ,WM_DESTROY
            ,WM_MOVE
            ,WM_SIZE
            ,WM_ACTIVATE
            ,WM_SETFOCUS
            ,WM_KILLFOCUS
            ,WM_ENABLE
            ,WM_SETREDRAW
            ,WM_SETTEXT
            ,WM_GETTEXT
            ,WM_GETTEXTLENGTH
            ,WM_PAINT
            ,WM_CLOSE
            ,WM_QUERYENDSESSION
            ,WM_QUIT
            ,WM_QUERYOPEN
            ,WM_ERASEBKGND
            ,WM_SYSCOLORCHANGE
            ,WM_ENDSESSION
            ,WM_SHOWWINDOW
            ,WM_WININICHANGE
            ,WM_DEVMODECHANGE
            ,WM_ACTIVATEAPP
            ,WM_FONTCHANGE
            ,WM_TIMECHANGE
            ,WM_CANCELMODE
            ,WM_SETCURSOR
            ,WM_MOUSEACTIVATE
            ,WM_CHILDACTIVATE
            ,WM_QUEUESYNC
            ,WM_GETMINMAXINFO
            ,WM_PAINTICON
            ,WM_ICONERASEBKGND
            ,WM_NEXTDLGCTL
            ,WM_SPOOLERSTATUS
            ,WM_DRAWITEM
            ,WM_MEASUREITEM
            ,WM_DELETEITEM
            ,WM_VKEYTOITEM
            ,WM_CHARTOITEM
            ,WM_SETFONT
            ,WM_GETFONT
            ,WM_SETHOTKEY
            ,WM_GETHOTKEY
            ,WM_QUERYDRAGICON
            ,WM_COMPAREITEM
            ,WM_COMPACTING
            ,WM_COMMNOTIFY
            ,WM_WINDOWPOSCHANGING
            ,WM_WINDOWPOSCHANGED
            ,WM_POWER
            ,WM_COPYDATA
            ,WM_CANCELJOURNAL
            ,WM_NOTIFY
            ,WM_INPUTLANGCHANGEREQUEST
            ,WM_INPUTLANGCHANGE
            ,WM_TCARD
            ,WM_HELP
            ,WM_USERCHANGED
            ,WM_NOTIFYFORMAT
            ,WM_CONTEXTMENU
            ,WM_STYLECHANGING
            ,WM_STYLECHANGED
            ,WM_DISPLAYCHANGE
            ,WM_GETICON
            ,WM_SETICON
            ,WM_NCCREATE
            ,WM_NCDESTROY
            ,WM_NCCALCSIZE
            ,WM_NCHITTEST
            ,WM_NCPAINT
            ,WM_NCACTIVATE
            ,WM_GETDLGCODE
            ,WM_SYNCPAINT
            ,WM_NCMOUSEMOVE
            ,WM_NCLBUTTONDOWN
            ,WM_NCLBUTTONUP
            ,WM_NCLBUTTONDBLCLK
            ,WM_NCRBUTTONDOWN
            ,WM_NCRBUTTONUP
            ,WM_NCRBUTTONDBLCLK
            ,WM_NCMBUTTONDOWN
            ,WM_NCMBUTTONUP
            ,WM_NCMBUTTONDBLCLK
            ,WM_KEYDOWN
            ,WM_KEYUP
            ,WM_CHAR
            ,WM_DEADCHAR
            ,WM_SYSKEYDOWN
            ,WM_SYSKEYUP
            ,WM_SYSCHAR
            ,WM_SYSDEADCHAR
            ,WM_KEYLAST
            ,WM_INITDIALOG
            ,WM_COMMAND
            ,WM_SYSCOMMAND
            ,WM_TIMER
            ,WM_HSCROLL
            ,WM_VSCROLL
            ,WM_INITMENU
            ,WM_INITMENUPOPUP
            ,WM_MENUSELECT
            ,WM_MENUCHAR
            ,WM_ENTERIDLE
            ,WM_CTLCOLORMSGBOX
            ,WM_CTLCOLOREDIT
            ,WM_CTLCOLORLISTBOX
            ,WM_CTLCOLORBTN
            ,WM_CTLCOLORDLG
            ,WM_CTLCOLORSCROLLBAR
            ,WM_CTLCOLORSTATIC
            ,WM_MOUSEMOVE
            ,WM_LBUTTONDOWN
            ,WM_LBUTTONUP
            ,WM_LBUTTONDBLCLK
            ,WM_RBUTTONDOWN
            ,WM_RBUTTONUP
            ,WM_RBUTTONDBLCLK
            ,WM_MBUTTONDOWN
            ,WM_MBUTTONUP
            ,WM_MBUTTONDBLCLK
            ,WM_MOUSELAST
            ,WM_PARENTNOTIFY
            ,WM_ENTERMENULOOP
            ,WM_EXITMENULOOP
            ,WM_MDICREATE
            ,WM_MDIDESTROY
            ,WM_MDIACTIVATE
            ,WM_MDIRESTORE
            ,WM_MDINEXT
            ,WM_MDIMAXIMIZE
            ,WM_MDITILE
            ,WM_MDICASCADE
            ,WM_MDIICONARRANGE
            ,WM_MDIGETACTIVE
            ,WM_MDISETMENU
            ,WM_DROPFILES
            ,WM_MDIREFRESHMENU
            ,WM_CUT
            ,WM_COPY
            ,WM_PASTE
            ,WM_CLEAR
            ,WM_UNDO
            ,WM_RENDERFORMAT
            ,WM_RENDERALLFORMATS
            ,WM_DESTROYCLIPBOARD
            ,WM_DRAWCLIPBOARD
            ,WM_PAINTCLIPBOARD
            ,WM_VSCROLLCLIPBOARD
            ,WM_SIZECLIPBOARD
            ,WM_ASKCBFORMATNAME
            ,WM_CHANGECBCHAIN
            ,WM_HSCROLLCLIPBOARD
            ,WM_QUERYNEWPALETTE
            ,WM_PALETTEISCHANGING
            ,WM_PALETTECHANGED
            ,WM_HOTKEY
            ,WM_PRINT
            ,WM_PRINTCLIENT
            ,WM_PENWINFIRST
            ,WM_PENWINLAST
            ,WM_NEXTMENU
            ,WM_SIZING
            ,WM_CAPTURECHANGED
            ,WM_MOVING
            ,WM_POWERBROADCAST
            ,WM_DEVICECHANGE
            ,WM_ENTERSIZEMOVE
            ,WM_EXITSIZEMOVE
            };

char *WM_Char[]={
             "WM_NULL                  "
            ,"WM_CREATE                "
            ,"WM_DESTROY               "
            ,"WM_MOVE                  "
            ,"WM_SIZE                  "
            ,"WM_ACTIVATE              "
            ,"WM_SETFOCUS              "
            ,"WM_KILLFOCUS             "
            ,"WM_ENABLE                "
            ,"WM_SETREDRAW             "
            ,"WM_SETTEXT               "
            ,"WM_GETTEXT               "
            ,"WM_GETTEXTLENGTH         "
            ,"WM_PAINT                 "
            ,"WM_CLOSE                 "
            ,"WM_QUERYENDSESSION       "
            ,"WM_QUIT                  "
            ,"WM_QUERYOPEN             "
            ,"WM_ERASEBKGND            "
            ,"WM_SYSCOLORCHANGE        "
            ,"WM_ENDSESSION            "
            ,"WM_SHOWWINDOW            "
            ,"WM_WININICHANGE          "
            ,"WM_DEVMODECHANGE         "
            ,"WM_ACTIVATEAPP           "
            ,"WM_FONTCHANGE            "
            ,"WM_TIMECHANGE            "
            ,"WM_CANCELMODE            "
            ,"WM_SETCURSOR             "
            ,"WM_MOUSEACTIVATE         "
            ,"WM_CHILDACTIVATE         "
            ,"WM_QUEUESYNC             "
            ,"WM_GETMINMAXINFO         "
            ,"WM_PAINTICON             "
            ,"WM_ICONERASEBKGND        "
            ,"WM_NEXTDLGCTL            "
            ,"WM_SPOOLERSTATUS         "
            ,"WM_DRAWITEM              "
            ,"WM_MEASUREITEM           "
            ,"WM_DELETEITEM            "
            ,"WM_VKEYTOITEM            "
            ,"WM_CHARTOITEM            "
            ,"WM_SETFONT               "
            ,"WM_GETFONT               "
            ,"WM_SETHOTKEY             "
            ,"WM_GETHOTKEY             "
            ,"WM_QUERYDRAGICON         "
            ,"WM_COMPAREITEM           "
            ,"WM_COMPACTING            "
            ,"WM_COMMNOTIFY            "
            ,"WM_WINDOWPOSCHANGING     "
            ,"WM_WINDOWPOSCHANGED      "
            ,"WM_POWER                 "
            ,"WM_COPYDATA              "
            ,"WM_CANCELJOURNAL         "
            ,"WM_NOTIFY                "
            ,"WM_INPUTLANGCHANGEREQUEST"
            ,"WM_INPUTLANGCHANGE       "
            ,"WM_TCARD                 "
            ,"WM_HELP                  "
            ,"WM_USERCHANGED           "
            ,"WM_NOTIFYFORMAT          "
            ,"WM_CONTEXTMENU           "
            ,"WM_STYLECHANGING         "
            ,"WM_STYLECHANGED          "
            ,"WM_DISPLAYCHANGE         "
            ,"WM_GETICON               "
            ,"WM_SETICON               "
            ,"WM_NCCREATE              "
            ,"WM_NCDESTROY             "
            ,"WM_NCCALCSIZE            "
            ,"WM_NCHITTEST             "
            ,"WM_NCPAINT               "
            ,"WM_NCACTIVATE            "
            ,"WM_GETDLGCODE            "
            ,"WM_SYNCPAINT             "
            ,"WM_NCMOUSEMOVE           "
            ,"WM_NCLBUTTONDOWN         "
            ,"WM_NCLBUTTONUP           "
            ,"WM_NCLBUTTONDBLCLK       "
            ,"WM_NCRBUTTONDOWN         "
            ,"WM_NCRBUTTONUP           "
            ,"WM_NCRBUTTONDBLCLK       "
            ,"WM_NCMBUTTONDOWN         "
            ,"WM_NCMBUTTONUP           "
            ,"WM_NCMBUTTONDBLCLK       "
            ,"WM_KEYDOWN               "
            ,"WM_KEYUP                 "
            ,"WM_CHAR                  "
            ,"WM_DEADCHAR              "
            ,"WM_SYSKEYDOWN            "
            ,"WM_SYSKEYUP              "
            ,"WM_SYSCHAR               "
            ,"WM_SYSDEADCHAR           "
            ,"WM_KEYLAST               "
            ,"WM_INITDIALOG            "
            ,"WM_COMMAND               "
            ,"WM_SYSCOMMAND            "
            ,"WM_TIMER                 "
            ,"WM_HSCROLL               "
            ,"WM_VSCROLL               "
            ,"WM_INITMENU              "
            ,"WM_INITMENUPOPUP         "
            ,"WM_MENUSELECT            "
            ,"WM_MENUCHAR              "
            ,"WM_ENTERIDLE             "
            ,"WM_CTLCOLORMSGBOX        "
            ,"WM_CTLCOLOREDIT          "
            ,"WM_CTLCOLORLISTBOX       "
            ,"WM_CTLCOLORBTN           "
            ,"WM_CTLCOLORDLG           "
            ,"WM_CTLCOLORSCROLLBAR     "
            ,"WM_CTLCOLORSTATIC        "
            ,"WM_MOUSEMOVE             "
            ,"WM_LBUTTONDOWN           "
            ,"WM_LBUTTONUP             "
            ,"WM_LBUTTONDBLCLK         "
            ,"WM_RBUTTONDOWN           "
            ,"WM_RBUTTONUP             "
            ,"WM_RBUTTONDBLCLK         "
            ,"WM_MBUTTONDOWN           "
            ,"WM_MBUTTONUP             "
            ,"WM_MBUTTONDBLCLK         "
            ,"WM_MOUSELAST             "
            ,"WM_PARENTNOTIFY          "
            ,"WM_ENTERMENULOOP         "
            ,"WM_EXITMENULOOP          "
            ,"WM_MDICREATE             "
            ,"WM_MDIDESTROY            "
            ,"WM_MDIACTIVATE           "
            ,"WM_MDIRESTORE            "
            ,"WM_MDINEXT               "
            ,"WM_MDIMAXIMIZE           "
            ,"WM_MDITILE               "
            ,"WM_MDICASCADE            "
            ,"WM_MDIICONARRANGE        "
            ,"WM_MDIGETACTIVE          "
            ,"WM_MDISETMENU            "
            ,"WM_DROPFILES             "
            ,"WM_MDIREFRESHMENU        "
            ,"WM_CUT                   "
            ,"WM_COPY                  "
            ,"WM_PASTE                 "
            ,"WM_CLEAR                 "
            ,"WM_UNDO                  "
            ,"WM_RENDERFORMAT          "
            ,"WM_RENDERALLFORMATS      "
            ,"WM_DESTROYCLIPBOARD      "
            ,"WM_DRAWCLIPBOARD         "
            ,"WM_PAINTCLIPBOARD        "
            ,"WM_VSCROLLCLIPBOARD      "
            ,"WM_SIZECLIPBOARD         "
            ,"WM_ASKCBFORMATNAME       "
            ,"WM_CHANGECBCHAIN         "
            ,"WM_HSCROLLCLIPBOARD      "
            ,"WM_QUERYNEWPALETTE       "
            ,"WM_PALETTEISCHANGING     "
            ,"WM_PALETTECHANGED        "
            ,"WM_HOTKEY                "
            ,"WM_PRINT                 "
            ,"WM_PRINTCLIENT           "
            ,"WM_PENWINFIRST           "
            ,"WM_PENWINLAST            "
            ,"WM_NEXTMENU              "
            ,"WM_SIZING                "
            ,"WM_CAPTURECHANGED        "
            ,"WM_MOVING                "
            ,"WM_POWERBROADCAST        "
            ,"WM_DEVICECHANGE          "
            ,"WM_ENTERSIZEMOVE         "
            ,"WM_EXITSIZEMOVE          "
            ,"Cann't find the message! "
        };

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int    nCmdShow           // show state
)
{

  WNDCLASS wndcls;
  wndcls.cbClsExtra=0;
  wndcls.cbWndExtra=0;
//  wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_PEN);
  wndcls.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
  wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
  wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);
  wndcls.hInstance=hInstance;
  wndcls.lpfnWndProc=MyWinProc;
  wndcls.lpszClassName="Mywin2007";
  wndcls.lpszMenuName=NULL;
  wndcls.style=CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;//CS_DBLCLKS双击

  RegisterClass(&wndcls);

  HWND hwnd;

  SendtoNotepad("Creating Window...\r");
  hwnd=CreateWindow("Mywin2007","为什么我的眼里常含泪水……",WS_OVERLAPPEDWINDOW/*|WS_HSCROLL|WS_VSCROLL*/,
    0,0,300,200,NULL,NULL,hInstance,NULL);
  SendtoNotepad("CreateWindow end\r");

  SendtoNotepad("Showing Window...\r");
  ShowWindow(hwnd,SW_SHOWNORMAL);
  SendtoNotepad("ShowWindow end\r");

  SendtoNotepad("Updating Window...\r");
  UpdateWindow(hwnd);
  SendtoNotepad("UpdateWindow end\r");

  MSG msg;
  char szBuffer[50];
  while(SendtoNotepad("Getting Message...\r"),GetMessage(&msg,NULL,0,0))
  {
    wsprintf(szBuffer,"[%04x]Message gotten\r",msg.message);
    SendtoNotepad(szBuffer);

    TranslateMessage(&msg);

    SendtoNotepad("Dispatching Message...\r");
    DispatchMessage(&msg);
    SendtoNotepad("DispatchMessage end\r");
  }
  return 0;
}

LRESULT CALLBACK MyWinProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
  ShowMessage(uMsg,wParam,lParam);

  switch(uMsg)
  {
  case WM_LBUTTONDOWN:
    HDC hdc;
    hdc=GetDC(hwnd);
    TextOut(hdc,0,50,"http://better0332.bog.sohu.com",strlen("http://better0332.bog.sohu.com"));
    ReleaseDC(hwnd,hdc);
    break;
  case WM_LBUTTONDBLCLK:
     MessageBox(hwnd,"mouse DBLCLKED","Hello",0);
     break;
  case WM_PAINT:
    HDC hDC;
    PAINTSTRUCT ps;
    hDC=BeginPaint(hwnd,&ps);
    TextOut(hDC,0,0,"Hello everyone!!",strlen("Hello everyone!!"));
    EndPaint(hwnd,&ps);
    break;
  case WM_CLOSE:
    if(IDYES==MessageBox(hwnd,"是否真的结束?","My VC++,Fighting!!",MB_YESNO))
    {
      DestroyWindow(hwnd);
    }
    break;
  case WM_DESTROY:
    PostQuitMessage(0);
    break;
  default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
  }
  return 0;
}

void SendtoNotepad(char *szBuffer)
{
  POINT pointclient={20,20};
  HWND hWinNotepad;
  hWinNotepad=FindWindow("Notepad",NULL);
  if(hWinNotepad)
  {
    hWinNotepad=ChildWindowFromPoint(hWinNotepad,pointclient);
    for(int i=0;i<strlen(szBuffer);i++)
      PostMessage(hWinNotepad,WM_CHAR,*(szBuffer+i),1);
  }

}

void ShowMessage(UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  int i;
  char szBuffer[100];
  for(i=0;i<171;i++)
  {
    if(WM_NUM[i]==uMsg)  break;
  }
  wsprintf(szBuffer,"WndProc: [%04x]%s %08x %08x\r",uMsg,WM_Char[i],wParam,lParam);
  SendtoNotepad(szBuffer);
}
 
上面的代码不知道有没有被论坛过滤,我是直接从VC复制的! 
VC++6.0下通过(不要直接编译,要先添加工程)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
不错,不过,翻录别人的代码是不能加精华的,期待你写出有自己特色的代码。
2007-5-27 11:43
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
麻烦bin和src打包上传
2007-5-27 13:43
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
论坛中好像我没有上传权限啊,我放在了我的网盘:
http://better0332.ys168.com中的My Program下
2007-5-27 17:02
0
雪    币: 305
活跃值: (36)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
5
盖茨的 SPY++ 源代码,里面十分详尽。
2007-5-28 08:36
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
我怎么不知道……
2007-5-28 22:20
0
游客
登录 | 注册 方可回帖
返回
//