注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

学了下鼠标钩子  

2013-03-26 16:52:08|  分类: 一些练习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

参照MSDN的API以及一些简单代码片段,用Windows编程里的HelloWin简单修改了下即可。

代码如下:

#include <windows.h>

HHOOK hhook;
HWND hwndMain;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
 static TCHAR szAppName[] = TEXT ("HOOKTEST") ;
 HWND   hwnd ;
 MSG    msg ;
 WNDCLASS wndclass ;
 wndclass.style        = CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc  = WndProc ;
 wndclass.cbClsExtra   = 0 ;
 wndclass.cbWndExtra   = 0 ;
 wndclass.hInstance    = hInstance ;
 wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
 wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
 wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
 wndclass.lpszMenuName  = NULL ;
 wndclass.lpszClassName= szAppName ;


 if (!RegisterClass (&wndclass))
 {
  MessageBox (NULL, TEXT ("This program requires Windows NT!"),
    szAppName, MB_ICONERROR);
  return 0;
 }
       
    hwnd = CreateWindow( szAppName,      // window class name
   TEXT ("HOOK TEST"),   // window caption
   WS_OVERLAPPEDWINDOW,  // window style
   CW_USEDEFAULT,// initial x position
   CW_USEDEFAULT,// initial y position
   CW_USEDEFAULT,// initial x size
   CW_USEDEFAULT,// initial y size
   NULL,                 // parent window handle
   NULL,            // window menu handle
   hInstance,   // program instance handle
   NULL);      // creation parameters

 hwndMain=hwnd;

 ShowWindow (hwnd, iCmdShow);

 UpdateWindow (hwnd);

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

 return msg.wParam;
}
       

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;

    switch (message)
    {
    case WM_CREATE:
  if (!hhook)
  {
   hhook = SetWindowsHookEx(WH_MOUSE,MouseProc,(HINSTANCE) NULL, GetCurrentThreadId());
  }
        return 0;

    case WM_PAINT:
  hdc = BeginPaint (hwnd, &ps);
  GetClientRect (hwnd, &rect);
  DrawText (hdc, TEXT ("HOOK TEST!"), -1, &rect,
   DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  EndPaint (hwnd, &ps);
  return 0 ;
       
 case WM_CHAR:
  break;

 case WM_DESTROY:
  if (hhook)
  {
     UnhookWindowsHookEx(hhook);
  }

  PostQuitMessage (0);
  return 0;

    }

 return DefWindowProc (hwnd, message, wParam, lParam) ;

}

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    CHAR szBuf[128];
    int cch;
 HDC hDC;
 
    if (nCode < 0)
 {
        return CallNextHookEx(hhook, nCode, wParam, lParam);
 }

 hDC=GetDC(hwndMain);

 cch = GetWindowText(hwndMain,szBuf,100);
 TextOut(hDC,0,0,szBuf,cch);

    cch = wsprintf(
  szBuf,
  "MOUSE - nCode: %d, x: %d, y: %d",
  nCode,
  ((MOUSEHOOKSTRUCT*)lParam)->pt.x,
  ((MOUSEHOOKSTRUCT*)lParam)->pt.y
  );

 //OutputDebugString(szBuf);

 TextOut(hDC,0,20,szBuf,cch);
 ReleaseDC(hwndMain,hDC);

    return CallNextHookEx(hhook, nCode, wParam, lParam);
}

  评论这张
 
阅读(196)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017