C++ 使用 GetRawInputData 获取鼠标键盘信息并保存
C++ 使用 GetRawInputData 获取鼠标键盘信息并保存
本文介绍了使用 GetRawInputData 获取鼠标和键盘信息,并将其保存到文本中。以下是实现代码,其中包含关键代码解析,并修正了示例代码中数据类型转换的错误。
LRESULT CALLBACK MainWindow::func_Message(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg==WM_INPUT){
UINT dwSize = 48;
LONGLONG inTime=0;
QString nowTimeText;
POINT lpPint;
// 第一次调用函数传NULL获取需要的缓冲区大小 已经知道了就直接填48
//GetRawInputData((HRAWINPUT)lParam, (UINT)RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
//分配指定的缓冲区大小
LPBYTE lpbBuffer = new BYTE[dwSize];
// 取数据到缓冲区
GetRawInputData((HRAWINPUT)lParam, (UINT)RID_INPUT, (LPVOID)lpbBuffer, (PUINT)&dwSize, (UINT)sizeof(RAWINPUTHEADER));
RAWINPUT* rawdata = (RAWINPUT *)lpbBuffer;
qDebug() << "键盘数据到达" << rawdata->data.keyboard.Message<< rawdata->data.keyboard.VKey<<inTime;
if(rawdata->header.dwType==RIM_TYPEKEYBOARD){
inTime=updateIntervalKeyboard();
switch(rawdata->data.keyboard.VKey){
case(VK_F8):{
if(rawdata->data.keyboard.Message==WM_KEYUP){
if(isRec==false)
{
if(isRecall==true){
goto endCall;
}
//按下F8开始录制
isRec =true;
isRecall=false;
nowTimeText=lanrenAPI::getNowTimeText();
GetCursorPos(&lpPint);//获取当前鼠标相对于桌面的位置
if(isResetRec==false){
jbText=pThis->ui->pte_jb->toPlainText();
// 这里修改了数据类型转换方式
jbText += jbText + '##' + nowTimeText + '##' + '\n鼠标初始 ' + QString::number(lpPint.x) + ' ' + QString::number(lpPint.y) + '\n';
}
pThis->ui->pte_jb->setPlainText(jbText);
qDebug() << jbText;
}
}
}
}
}else if(rawdata->header.dwType==RIM_TYPEMOUSE){
inTime=updateIntervalMose();
qDebug() << "鼠标数据到达"<<rawdata->data.mouse.lLastX<<rawdata->data.mouse.lLastY<<rawdata->data.mouse.ulButtons<< rawdata->data.mouse.ulExtraInformation<<inTime;
}
}
endCall:
return CallWindowProcA (lpPrevWndFunc, hwnd, uMsg, wParam, lParam);
}
代码解析:
-
获取原始输入数据:
- 使用
GetRawInputData获取鼠标或键盘的原始输入数据,并将其存储到RAWINPUT结构体中。
- 使用
-
处理键盘事件:
- 当检测到键盘事件时,使用
switch语句判断按键的VKey,并根据不同的按键执行不同的操作。 - 当按下
F8键时,将开始录制鼠标和键盘操作,并将相关信息保存到文本中。
- 当检测到键盘事件时,使用
-
处理鼠标事件:
- 当检测到鼠标事件时,获取鼠标的移动坐标、按钮状态等信息。
-
保存数据到文本:
- 在录制过程中,将鼠标和键盘操作的信息保存到一个名为
jbText的 QString 对象中,并将信息追加到pte_jb文本编辑框中。
- 在录制过程中,将鼠标和键盘操作的信息保存到一个名为
修改说明:
- 示例代码中使用了
QString::number()函数将lpPint.x和lpPint.y转换为字符串,以避免直接使用(char[])方式进行数据类型转换,避免潜在的错误。
总结:
本文介绍了使用 GetRawInputData 获取鼠标键盘信息,并将其保存到文本中。代码示例详细说明了各个步骤,并对示例代码进行了修正。希望本文可以帮助您更好地理解和应用 GetRawInputData 函数。
更多内容:
原文地址: https://www.cveoy.top/t/topic/nsLe 著作权归作者所有。请勿转载和采集!