因为平时时间不多, 在此只提供代码和代码内注释,如果想要深入了解,可以自行百度,这里提供一个很简单的例子用于做键盘全局钩子,当你书写完毕,就可以自己添加快捷方式来打开应用程序
#include <Windows.h>
#include <WinUser.h>
#include <iostream>
#include <sstream>
#include <process.h>
#include <fstream>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"wmainCRTStartup\"") //改变程序入口点。此时窗口被隐藏
HHOOK g_hook; //全局键盘钩子
LPKBDLLHOOKSTRUCT kbdStruct; //保存键盘输入事件的信息
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
/// 回调函数 需要加上CALLBACK
/// nCode 为Hook代码。Hook使用它来确定任务
LRESULT CALLBACK keyboardProc(int nCode, WPARAM wParam, LPARAM lParam) //键盘处理函数
{
if (nCode >= 0) //当nCode大于等于0的时候.此时表现正常,可以调用CallNextHookEx返回也可以返回0
{
/// 需要注意 现在的扫描键码值前缀都要添加上L 也就是说之前的VK_MEAU需要变为VK_LMEAU才是现在的扫描码
/// ALT是系统按键 扫描码值为 56 宏定义为VK_LMEAU
///当系统按键被按下
kbdStruct = (LPKBDLLHOOKSTRUCT)lParam;
if (wParam == WM_SYSKEYDOWN)
{
if (kbdStruct->vkCode == 0x41) //如果按下alt+A 打开截图
{
TCHAR appPath[] = TEXT("C:/Users/13959/Desktop/QtWorkSpace/Sceenshot/release/Sceenshot.exe");
CreateProcess(appPath, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
// std::cout << "ALT+A" << std::endl;
}
//std::cout << std::hex<< kbdStruct->vkCode << std::endl;
}
//VK_SHIFT
///当非系统按键被按下
else if (wParam == WM_KEYDOWN)
{
//std::cout << std::hex<< kbdStruct->vkCode << std::endl;
}
}
return CallNextHookEx(g_hook, nCode, wParam, lParam);
}
void setHook() //设置钩子监视全局键盘
{
/// 监视全局键盘的全局钩子。 回调函数为keyboardProc, 与当前进程绑定。
if (!(g_hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardProc, NULL, 0))) //钩子程序错误时候执行
{
char strCode[4];
std::stringstream strm;
strm << GetLastError();
strm >> strCode;
MessageBoxA(NULL, strCode, "Error", MB_OK);
}
}
/* 释放键盘钩子 */
void ReleaseHook()
{
UnhookWindowsHookEx(g_hook);
}
int wmain()
{
HANDLE hMutex;
//设置一个互斥量,来放置程序多开,只需要一个钩子程序监测键盘即可。
hMutex = CreateMutexA(NULL, FALSE, "GlobalKeyboard");
if (GetLastError() == ERROR_ALREADY_EXISTS) //单实例程序
return 0;
setHook(); //设置监视全局键盘信息的钩子
MSG * msg = nullptr;
bool bRet;
while ((bRet = GetMessage(msg, NULL, 0, 0)))
{
}
ReleaseHook();
return 0;
}
需要注意的就是, 代码运行环境在 vs2015中,隐藏窗口代码可以忽略并注释, 如果想要具体知道代码的用处,请百度!因为介绍的篇幅会过长影响阅读–