⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboardhookdlg.cpp

📁 使用键盘钩子实现按键发音程序
💻 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 + -