Àú¼öÁØ Å°º¸µå¶û ÈÄÅ·ÇÏ´Â ¹æ¹ýÀÌ °ÅÀÇ °°½À´Ï´Ù.
Å¥¿¡¼ ¸Þ½ÃÁö¸¦ ²¨³»±â Àü¿¡ º¼ ¼ö ÀÖ¾î DLLÀÌ ¾ø¾îµµ Àü¿ª ÈÄÅ· °¡´ÉÇϰí
¸ðµç ¸Þ½ÃÁö¸¦ ´Ù µé¿©´Ù º¼ ¼ö ÀÖ½À´Ï´Ù.
ÀϺΠ¸Þ½ÃÁö¸¦ ¸Ô¾î ¹ö¸± ¼öµµ ÀÖ°í¿ä.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass = TEXT("MouseHookLL");
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
, _In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
hWndMain = hWnd;
while (GetMessage(&Message, NULL, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
HHOOK hMouseHookLL = NULL;
TCHAR MesName[111];
TCHAR log[256];
TCHAR output[65000];
DWORD lastMsg = 0;
LRESULT CALLBACK MouseHookProcLL(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0) {
MSLLHOOKSTRUCT* ms = (MSLLHOOKSTRUCT*)lParam;
lstrcpy(MesName, "Other");
if (wParam == WM_LBUTTONDOWN) lstrcpy(MesName, "LDown");
if (wParam == WM_LBUTTONUP) lstrcpy(MesName, "LUp");
if (wParam == WM_RBUTTONDOWN) lstrcpy(MesName, "RDown");
if (wParam == WM_RBUTTONUP) lstrcpy(MesName, "RUp");
if (wParam == WM_MOUSEMOVE) lstrcpy(MesName, "Move");
if (wParam == WM_MOUSEWHEEL) lstrcpy(MesName, "Wheel");
wsprintf(log, "%s (%d, %d), flag=%x, time = %d\r\n",
MesName, ms->pt.x, ms->pt.y, ms->flags, ms->time);
// Move µÎ¹ø ¿¬¼ÓÀº ±â·ÏÇÏÁö ¾Ê´Â´Ù.
if (wParam != WM_MOUSEMOVE || lastMsg != WM_MOUSEMOVE) {
lstrcat(output, log);
InvalidateRect(hWndMain, NULL, TRUE);
}
lastMsg = WM_MOUSEMOVE;
// 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÏ¿© ¸¶¿ì½º Ŭ¸¯À» ¸Ô¾î ¹ö¸°´Ù.
// ȸé Á»ó´Ü ÁöÁ¡¿¡¼´Â ¿À¸¥ÂÊ ¸¶¿ì½º Ŭ¸¯À» ±ÝÁöÇÑ´Ù.
if (ms->pt.x < 200 && ms->pt.y < 200 && (wParam == WM_RBUTTONDOWN || wParam == WM_RBUTTONUP)) {
return 1;
}
}
return CallNextHookEx(hMouseHookLL, nCode, wParam, lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT crt;
switch (iMessage) {
case WM_CREATE:
hMouseHookLL = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcLL, g_hInst, NULL);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &crt);
DrawText(hdc, output, -1, &crt, 0);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
if (hMouseHookLL != NULL) UnhookWindowsHookEx(hMouseHookLL);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
(200, 200) ¾ÈÂÊÀÇ Á»ó´Ü ¹ÙÅÁ ȸéÀ» ¿ìŬ¸¯ÇÒ ¶§´Â ÆË¾÷ ¸Þ´º°¡ ¶ßÁö ¾Êµµ·Ï Çß½À´Ï´Ù.
ÀÌ·± ¿ëµµº¸´Ù´Â ÁÖ·Î ¸Þ½ÃÁö¸¦ »ìÆì º¸´Â ¿ëµµ·Î¸¸ ¾²´Â°Ô ¹Ù¶÷Á÷ÇÕ´Ï´Ù.
|
|