DirectInput怎样用来实时监控键盘输入???

skyair624 2008-05-23 02:51:55
DirectInput怎样用来实时监控键盘输入???
请大虾赐教赐教!!!
...全文
182 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyair624 2008-05-28
  • 打赏
  • 举报
回复
怎么没有回复了??????
skyair624 2008-05-26
  • 打赏
  • 举报
回复
LZ还在啊!!!!
skyair624 2008-05-25
  • 打赏
  • 举报
回复
那QQ是怎么读取键盘输入的呢??
sandbeike 2008-05-24
  • 打赏
  • 举报
回复
应用程序的消息都发生在应用程序内部,如果要接收程序外的消息只能用Hook了,在Dll中处理键盘消息,
而且HOOK要定义成全局的
skyair624 2008-05-24
  • 打赏
  • 举报
回复
楼上的代码我知道啊,我做的代码的协作模式是非独占模式,但是在切换到其他的程序的时候没有任何反应。
刚试了一下设置成独占模式,还是不行!!
DInput不是直接访问键盘驱动程序吗?
为什么起不到拦截的作用???
FatherOfCodingMan 2008-05-24
  • 打赏
  • 举报
回复
那个不是简单的消息机制拉

以下是DirectX9入门教程-[Beginning.DirectX9][EN]中第9章的代码片段

char buffer[256];
#define KEYDOWN(name, key) (name[key] & 0x80)

function(){
// Create the DirectInput object.
hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&g_lpDI, NULL);

if FAILED(hr) return FALSE;

// Retrieve a pointer to an IDirectInputDevice8 interface
hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL);

hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);

if FAILED(hr) {
return FALSE;
}

// Set the cooperative level
hr = g_lpDIDevice->SetCooperativeLevel(wndHandle,
DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
if FAILED(hr)
{
return FALSE;
}

// Get access to the input device.
hr = g_lpDIDevice->Acquire();
if FAILED(hr)
{
return FALSE;
}
hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer); //获取设备状态
if (KEYDOWN(buffer, DIK_LEFT)) //判断是那个键
src.left = (48 * LEFT_ARROW);

}
蒋晟 2008-05-23
  • 打赏
  • 举报
回复
这个只有在驱动层做吧
skyair624 2008-05-23
  • 打赏
  • 举报
回复
不用HOOK
scq2099yt 2008-05-23
  • 打赏
  • 举报
回复
hook
skyair624 2008-05-23
  • 打赏
  • 举报
回复
这个程序只要运行,不论是在其它的什么程序界面下都可以截获相应的按键信息。
cnzdgs 2008-05-23
  • 打赏
  • 举报
回复
“实时监控”要怎么理解?

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧