°­ÁÂ¿Í ÆÁ

Àú¼öÁØ ¸¶¿ì½º ÈÄÅ· ¿¹Á¦ ³¯Â¥:2022-3-15 10:30:27 Á¶È¸¼ö:460
ÀÛ¼ºÀÚ : daypark
Æ÷ÀÎÆ® : 1079
°¡ÀÔÀÏ : 2020-02-14 10:42:05
¹æ¹®È½¼ö : 227
±Û 160°³, ´ñ±Û 26°³
¼Ò°³ : ÀÚ±â¼Ò°³¸¦ ÀÔ·ÂÇϽʽÿÀ.
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
Àú¼öÁØ Å°º¸µå¶û ÈÄÅ·ÇÏ´Â ¹æ¹ýÀÌ °ÅÀÇ °°½À´Ï´Ù. 
Å¥¿¡¼­ ¸Þ½ÃÁö¸¦ ²¨³»±â Àü¿¡ º¼ ¼ö ÀÖ¾î 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) ¾ÈÂÊÀÇ Á»ó´Ü ¹ÙÅÁ È­¸éÀ» ¿ìŬ¸¯ÇÒ ¶§´Â ÆË¾÷ ¸Þ´º°¡ ¶ßÁö ¾Êµµ·Ï Çß½À´Ï´Ù. 
ÀÌ·± ¿ëµµº¸´Ù´Â ÁÖ·Î ¸Þ½ÃÁö¸¦ »ìÆì º¸´Â ¿ëµµ·Î¸¸ ¾²´Â°Ô ¹Ù¶÷Á÷ÇÕ´Ï´Ù.

 

¸ñ·Ïº¸±â »èÁ¦ ¼öÁ¤ ½Å°í ½ºÅ©·¦


·Î±×ÀÎÇÏ¼Å¾ß ´ñ±ÛÀ» ´Þ ¼ö ÀÖ½À´Ï´Ù.