vc监控鼠标键盘动作

#include <windows.h>
#include <stdio.h>

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

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_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ASTERISK);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="MouseKey";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

HWND hwnd;
hwnd=CreateWindow("MouseKey","键盘鼠标监控",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);

MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
PAINTSTRUCT ps ;
static POINT pt ;
TCHAR szBuffer[128];
static int x, y ;

switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"键盘输ASCII码为%d",wParam);
MessageBox(hwnd,szChar,"键盘动作",0);
break;
case WM_LBUTTONDOWN:
x = LOWORD( lParam ) ; //获取鼠标位置x坐标信息
y = HIWORD( lParam ) ; //获取鼠标位置y坐标信息
wsprintf( szBuffer, "鼠标左键被单击, 击中客户区坐标: (%i, %i)", x, y );
MessageBox( hwnd, szBuffer, TEXT("鼠标动作"), MB_OK ) ;
HDC hdcl;
hdcl=GetDC(hwnd);
ReleaseDC(hwnd,hdcl);
break;
case WM_RBUTTONDOWN:
x = LOWORD( lParam ) ; //获取鼠标位置x坐标信息
y = HIWORD( lParam ) ; //获取鼠标位置y坐标信息
wsprintf( szBuffer, "鼠标右键被单击, 击中客户区坐标: (%i, %i)", x, y );
MessageBox( hwnd, szBuffer, TEXT("鼠标动作"), MB_OK ) ;
HDC hdcr;
hdcr=GetDC(hwnd);
ReleaseDC(hwnd,hdcr);
break;
case WM_MOUSEMOVE:
GetCursorPos(&pt) ;
InvalidateRect( hwnd, NULL, TRUE ) ;
break;
case WM_PAINT:
HDC hDC;
hDC=BeginPaint(hwnd,&ps);
wsprintf( szBuffer, "屏幕坐标:(%i, %i)", pt.x, pt.y );
TextOut( hDC, 10, 10, szBuffer, lstrlen(szBuffer) ) ;
ScreenToClient( hwnd, &pt ) ; //将相对于屏幕的坐标转换为相对于窗口客户区的坐标
wsprintf( szBuffer, "客户区坐标:(%i, %i)", pt.x, pt.y );
TextOut( hDC, 10, 30, szBuffer, lstrlen(szBuffer) ) ;
EndPaint( hwnd, &ps ) ;
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","鼠标键盘监控测试",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

原文地址:https://www.cnblogs.com/vipwtl/p/4831617.html