参考罗云彬的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直播授课