📄 keyboardhookdlg.cpp
字号:
// KeyboardHookDlg.cpp : implementation file
//
#include "stdafx.h"
#include "KeyboardHook.h"
#include "KeyboardHookDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static HHOOK hHook=NULL; // 钩子句柄
// 键盘消息钩子处理函数
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
{
switch(wParam)
{
// ESC F1~F12
case VK_ESCAPE:sndPlaySound("sound\\f1.wav",SND_ASYNC);break;
case VK_F1:sndPlaySound("sound\\f1.wav",SND_ASYNC);break;
case VK_F2:sndPlaySound("sound\\f2.wav",SND_ASYNC);break;
case VK_F3:sndPlaySound("sound\\f3.wav",SND_ASYNC);break;
case VK_F4:sndPlaySound("sound\\f4.wav",SND_ASYNC);break;
case VK_F5:sndPlaySound("sound\\f5.wav",SND_ASYNC);break;
case VK_F6:sndPlaySound("sound\\f6.wav",SND_ASYNC);break;
case VK_F7:sndPlaySound("sound\\f7.wav",SND_ASYNC);break;
case VK_F8:sndPlaySound("sound\\f8.wav",SND_ASYNC);break;
case VK_F9:sndPlaySound("sound\\f9.wav",SND_ASYNC);break;
case VK_F10:sndPlaySound("sound\\f10.wav",SND_ASYNC);break;
case VK_F11:sndPlaySound("sound\\f11.wav",SND_ASYNC);break;
case VK_F12:sndPlaySound("sound\\f12.wav",SND_ASYNC);break;
// 0~9
case '1':sndPlaySound("sound\\1.wav",SND_ASYNC);break;
case '2':sndPlaySound("sound\\2.wav",SND_ASYNC);break;
case '3':sndPlaySound("sound\\3.wav",SND_ASYNC);break;
case '4':sndPlaySound("sound\\4.wav",SND_ASYNC);break;
case '5':sndPlaySound("sound\\5.wav",SND_ASYNC);break;
case '6':sndPlaySound("sound\\6.wav",SND_ASYNC);break;
case '7':sndPlaySound("sound\\7.wav",SND_ASYNC);break;
case '8':sndPlaySound("sound\\8.wav",SND_ASYNC);break;
case '9':sndPlaySound("sound\\9.wav",SND_ASYNC);break;
case '0':sndPlaySound("sound\\0.wav",SND_ASYNC);break;
case VK_NUMPAD1:sndPlaySound("sound\\1.wav",SND_ASYNC);break;
case VK_NUMPAD2:sndPlaySound("sound\\2.wav",SND_ASYNC);break;
case VK_NUMPAD3:sndPlaySound("sound\\3.wav",SND_ASYNC);break;
case VK_NUMPAD4:sndPlaySound("sound\\4.wav",SND_ASYNC);break;
case VK_NUMPAD5:sndPlaySound("sound\\5.wav",SND_ASYNC);break;
case VK_NUMPAD6:sndPlaySound("sound\\6.wav",SND_ASYNC);break;
case VK_NUMPAD7:sndPlaySound("sound\\7.wav",SND_ASYNC);break;
case VK_NUMPAD8:sndPlaySound("sound\\8.wav",SND_ASYNC);break;
case VK_NUMPAD9:sndPlaySound("sound\\9.wav",SND_ASYNC);break;
case VK_NUMPAD0:sndPlaySound("sound\\0.wav",SND_ASYNC);break;
// A~Z
case 'A':sndPlaySound("sound\\a.wav",SND_ASYNC);break;
case 'B':sndPlaySound("sound\\b.wav",SND_ASYNC);break;
case 'C':sndPlaySound("sound\\c.wav",SND_ASYNC);break;
case 'D':sndPlaySound("sound\\d.wav",SND_ASYNC);break;
case 'E':sndPlaySound("sound\\e.wav",SND_ASYNC);break;
case 'F':sndPlaySound("sound\\f.wav",SND_ASYNC);break;
case 'G':sndPlaySound("sound\\g.wav",SND_ASYNC);break;
case 'H':sndPlaySound("sound\\h.wav",SND_ASYNC);break;
case 'I':sndPlaySound("sound\\i.wav",SND_ASYNC);break;
case 'J':sndPlaySound("sound\\j.wav",SND_ASYNC);break;
case 'K':sndPlaySound("sound\\k.wav",SND_ASYNC);break;
case 'L':sndPlaySound("sound\\l.wav",SND_ASYNC);break;
case 'M':sndPlaySound("sound\\m.wav",SND_ASYNC);break;
case 'N':sndPlaySound("sound\\n.wav",SND_ASYNC);break;
case 'O':sndPlaySound("sound\\o.wav",SND_ASYNC);break;
case 'P':sndPlaySound("sound\\p.wav",SND_ASYNC);break;
case 'Q':sndPlaySound("sound\\q.wav",SND_ASYNC);break;
case 'R':sndPlaySound("sound\\r.wav",SND_ASYNC);break;
case 'S':sndPlaySound("sound\\s.wav",SND_ASYNC);break;
case 'T':sndPlaySound("sound\\t.wav",SND_ASYNC);break;
case 'U':sndPlaySound("sound\\u.wav",SND_ASYNC);break;
case 'V':sndPlaySound("sound\\v.wav",SND_ASYNC);break;
case 'W':sndPlaySound("sound\\w.wav",SND_ASYNC);break;
case 'X':sndPlaySound("sound\\x.wav",SND_ASYNC);break;
case 'Y':sndPlaySound("sound\\y.wav",SND_ASYNC);break;
case 'Z':sndPlaySound("sound\\z.wav",SND_ASYNC);break;
// 其他键
case VK_UP:sndPlaySound("sound\\up.wav",SND_ASYNC);break;
case VK_DOWN:sndPlaySound("sound\\down.wav",SND_ASYNC);break;
case VK_LEFT:sndPlaySound("sound\\left.wav",SND_ASYNC);break;
case VK_RIGHT:sndPlaySound("sound\\right.wav",SND_ASYNC);break;
case VK_TAB:sndPlaySound("sound\\tab.wav",SND_ASYNC);break;
case VK_MENU:sndPlaySound("sound\\alt.wav",SND_ASYNC);break;
case VK_SHIFT:sndPlaySound("sound\\shift.wav",SND_ASYNC);break;
case VK_CONTROL:sndPlaySound("sound\\contrl.wav",SND_ASYNC);break;
case VK_RETURN:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_ACCEPT:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_CLEAR:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_DELETE:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_CANCEL:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_CONVERT:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_DIVIDE:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_END:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_FINAL:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_HELP:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_HOME:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_INSERT:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_KANA:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_KANJI:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_MODECHANGE:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_MULTIPLY:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_NONCONVERT:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_PAUSE:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_SPACE:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_LWIN:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_CAPITAL:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_PRIOR:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
case VK_NEXT:sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);break;
}
//处理一些特殊按键
char KeyName[50];
ZeroMemory(KeyName,50);
GetKeyNameText(lParam,KeyName,50);
CString KeyNameStr=KeyName;
if(KeyNameStr=="`")
sndPlaySound("sound\\`.wav",SND_ASYNC);
if(KeyNameStr=="-")
sndPlaySound("sound\\-.wav",SND_ASYNC);
if(KeyNameStr=="=")
sndPlaySound("sound\\+.wav",SND_ASYNC);
if(KeyNameStr=="\\")
sndPlaySound("sound\\gan.wav",SND_ASYNC);
if(KeyNameStr=="Backspace")
sndPlaySound("sound\\gan.wav",SND_ASYNC);
if(KeyNameStr=="[")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="]")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr==";")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="'")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr==",")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr==".")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="/")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="Left Windows")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="Right Windows")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="Application")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="Scroll Lock")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="Num Lock")
sndPlaySound("sound\\aaaaaa.wav",SND_ASYNC);
if(KeyNameStr=="Num -")
sndPlaySound("sound\\num-.wav",SND_ASYNC);
if(KeyNameStr=="Num +")
sndPlaySound("sound\\num+.wav",SND_ASYNC);
if(KeyNameStr=="Num Del")
sndPlaySound("sound\\numdel.wav",SND_ASYNC);
}
// 将键盘消息转发给钩子链中下一个处理进程
LRESULT RetVal = CallNextHookEx( hHook, nCode, wParam, lParam );
return RetVal;
}
/////////////////////////////////////////////////////////////////////////////
// CKeyboardHookDlg dialog
CKeyboardHookDlg::CKeyboardHookDlg(CWnd* pParent /*=NULL*/)
: CDialog(CKeyboardHookDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CKeyboardHookDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CKeyboardHookDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKeyboardHookDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CKeyboardHookDlg, CDialog)
//{{AFX_MSG_MAP(CKeyboardHookDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKeyboardHookDlg message handlers
BOOL CKeyboardHookDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//阻止程序反复驻留内存
CreateMutex(NULL, FALSE, "KeySound");
if(GetLastError()==ERROR_ALREADY_EXISTS)
OnOK();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
// 加载键盘钩子
hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,NULL,AfxGetThread()->m_nThreadID);
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CKeyboardHookDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CKeyboardHookDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CKeyboardHookDlg::OnOK()
{
CDialog::OnOK();
}
void CKeyboardHookDlg::OnDestroy()
{
if(hHook)
UnhookWindowsHookEx(hHook);
CDialog::OnDestroy();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -