5、代码测试
5.1 代码1
#include "pch.h"
#include <Windows.h>
#include <iostream>
std::string get_time()
{
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	char time[255] = { 0 };
	sprintf_s(time, "[%4d/%02d/%02d %02d:%02d:%02d]", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond);
	return std::string(time);
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	/*
	typedef struct tagKBDLLHOOKSTRUCT {
	DWORD     vkCode;		// 按键代号
	DWORD     scanCode;		// 硬件扫描代号,同 vkCode 也可以作为按键的代号。
	DWORD     flags;		// 事件类型,一般按键按下为 0 抬起为 128。
	DWORD     time;			// 消息时间戳
	ULONG_PTR dwExtraInfo;	// 消息附加信息,一般为 0。
	}KBDLLHOOKSTRUCT,*LPKBDLLHOOKSTRUCT,*PKBDLLHOOKSTRUCT;
	*/
	KBDLLHOOKSTRUCT* ks = (KBDLLHOOKSTRUCT*)lParam;		// 包含低级键盘输入事件信息
	char buffer[255];
	DWORD code = ks->vkCode;
	std::string t = get_time();
	char state[20];
	if (wParam == WM_KEYDOWN)
	{
		strcpy_s(state, "按下");
	}
	else if (wParam == WM_KEYUP)
	{
		strcpy_s(state, "抬起");
	}
	sprintf_s(buffer, "[键盘]%s 键代码:%d %s", t.c_str(), code, state);
	std::cout << buffer << std::endl;
	//return 1;	// 拦截消息
	return CallNextHookEx(NULL, nCode, wParam, lParam);
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	/*
	typedef struct tagMOUSEHOOKSTRUCT {
		POINT   pt;					// Point数据
		HWND    hwnd;				// 接收鼠标消息的窗体的句柄
		UINT    wHitTestCode;		// 指定点击测试值
		ULONG_PTR dwExtraInfo;		// 指定和该消息相关联的附加信息。
	} MOUSEHOOKSTRUCT, FAR* LPMOUSEHOOKSTRUCT, * PMOUSEHOOKSTRUCT;
	*/
	MOUSEHOOKSTRUCT* ms = (MOUSEHOOKSTRUCT*)lParam;
	POINT pt = ms->pt;
	std::string time = get_time();
	char buffer[1024];
	char state[20] = "未知";
	if (wParam == WM_LBUTTONDOWN)
	{
		strcpy_s(state, "左键按下");
	}
	else if (wParam == WM_LBUTTONUP)
	{
		strcpy_s(state, "左键抬起");
	}
	else if (wParam == WM_RBUTTONDOWN)
	{
		strcpy_s(state, "右键按下");
	}
	else if (wParam == WM_RBUTTONUP)
	{
		strcpy_s(state, "右键抬起");
	}
	else if (wParam == WM_MOUSEMOVE)
	{
		strcpy_s(state, "移动");
	}
	sprintf_s(buffer, "[鼠标]%s 键代码:x:%d y:%d %s", time.c_str(), pt.x, pt.y, state);
	std::cout << buffer << std::endl;
	//return 1;	// 拦截消息
	return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
	HINSTANCE hM = GetModuleHandle(NULL), hK = GetModuleHandle(NULL);
	HHOOK g_Hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, hK, 0);
	HHOOK g_Hook2 = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, hM, 0);
	// 消息循环
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	UnhookWindowsHookEx(g_Hook);
	return 0;
}

结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!
 
 
                     
            
        













 
                    

 
                 
                    