VC全局键盘钩子

// hodll.h : main header file for the HODLL DLL
//

#if !defined(AFX_HODLL_H__B2A458DC_71E2_47D5_9EA0_58385D558643__INCLUDED_)
#define AFX_HODLL_H__B2A458DC_71E2_47D5_9EA0_58385D558643__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
 #error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"  // main symbols

/
// CHodllApp
// See hodll.cpp for the implementation of this class
//
LRESULT __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(
                            int nCode,
                            WPARAM wParam,
                            LPARAM lParam);


BOOL __declspec(dllexport)__stdcall  installhook();

class CHodllApp : public CWinApp
{
public:
BOOL ExitInstance ();
 CHodllApp();
  BOOL InitInstance ();

// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CHodllApp)
 //}}AFX_VIRTUAL

 //{{AFX_MSG(CHodllApp)
  // NOTE - the ClassWizard will add and remove member functions here.
  //    DO NOT EDIT what you see in these blocks of generated code !
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

 

 

 

hodll.def如下
/

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_HODLL_H__B2A458DC_71E2_47D5_9EA0_58385D558643__INCLUDED_)

 

; hodll.def : Declares the module parameters for the DLL.

LIBRARY      "hodll"
DESCRIPTION  'hodll Windows Dynamic Link Library'

EXPORTS
    ; Explicit exports can go here
     KeyboardProc
  installhook

 

 

 

 

hodll.cpp如下:

//键盘钩子


#include "stdafx.h"
#include "hodll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma data_seg(".SHARDAT")
static HHOOK hkb=NULL;
#pragma data_seg()
HINSTANCE hins;

//#define   WM_MY_MESSAGE   (WM_USER+100)  
static   UINT   WM_MY_MESSAGE=RegisterWindowMessage("User");  
static   UINT   WM_CTRL = RegisterWindowMessage("User2");
static   UINT   WM_ALT = RegisterWindowMessage("User3");
static   UINT   WM_SHIFT = RegisterWindowMessage("User4");
static   UINT   WM_C = RegisterWindowMessage("User5");
static   UINT   WM_X = RegisterWindowMessage("User6");
static   UINT   WM_V = RegisterWindowMessage("User7");
static   UINT   WM_1 = RegisterWindowMessage("User8");
static   UINT   WM_2 = RegisterWindowMessage("User9");
static   UINT   WM_3 = RegisterWindowMessage("User10");
static   UINT   WM_4 = RegisterWindowMessage("User11");
static   UINT   WM_5 = RegisterWindowMessage("User12");
char szBuf[256];
char *p;
CString msg;

BEGIN_MESSAGE_MAP(CHodllApp, CWinApp) 
END_MESSAGE_MAP()

/
LRESULT __declspec(dllexport)__stdcall  CALLBACK KeyboardProc

(int nCode,WPARAM wParam,LPARAM lParam)

 if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
 {
  switch(wParam)
  {

    //    CWnd *pWnd=CWnd::FindWindow(NULL,str);
     case '1': 
   if(::GetKeyState(VK_CONTROL) < 0)
     SendMessage

(HWND_BROADCAST,WM_1,VK_MENU,0);
       break;
  case '2': 
      if(::GetKeyState(VK_CONTROL) < 0)
     SendMessage

(HWND_BROADCAST,WM_2,VK_MENU,0);
       break;
  case '3': 
       if(::GetKeyState(VK_CONTROL) < 0)
         SendMessage

(HWND_BROADCAST,WM_3,VK_MENU,0);
        break;
  case '4':
        if(::GetKeyState(VK_CONTROL) < 0)
    SendMessage

(HWND_BROADCAST,WM_4,VK_MENU,0);
       break;
  case '5': 
        if(::GetKeyState(VK_CONTROL) < 0)
      SendMessage

(HWND_BROADCAST,WM_5,VK_MENU,0);
         break;
        case 'C':
     if(::GetKeyState(VK_CONTROL) < 0)
    SendMessage

(HWND_BROADCAST,WM_C,VK_MENU,0);
       break;

        case 'X':
     if(::GetKeyState(VK_CONTROL) < 0)
    SendMessage

(HWND_BROADCAST,WM_X,VK_MENU,0);
       break;

  case 'V':
     if(::GetKeyState(VK_CONTROL) < 0)
    SendMessage

(HWND_BROADCAST,WM_V,VK_MENU,0);
       break;


  case VK_MENU:      
      SendMessage

(HWND_BROADCAST,WM_ALT,VK_MENU,0);
     break;
  case VK_SHIFT:    SendMessage

(HWND_BROADCAST,WM_SHIFT,VK_SHIFT,0); break;
  case VK_CONTROL: SendMessage

(HWND_BROADCAST,WM_CTRL,VK_CONTROL,0); break;
 
  }

   }

 LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam,

lParam ); 
 return  RetVal;
}
BOOL __declspec(dllexport)__stdcall installhook()
{
 hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)

KeyboardProc,hins,0);
 return TRUE;
}
BOOL __declspec(dllexport)  UnHook()
{    
 BOOL unhooked = UnhookWindowsHookEx(hkb);
 return unhooked;
}
BOOL CHodllApp::InitInstance ()

 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 hins=AfxGetInstanceHandle(); 
 return TRUE; 
}

 

BOOL CHodllApp::ExitInstance ()
{
 return TRUE;
}
CHodllApp::CHodllApp()
{
}
CHodllApp theApp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型大数据攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值