// 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;