VC directinput模拟按键

adbc_8899 2011-08-24 01:43:57
如题,发送消息,keybd_event();这些都不要给我,只要directinput模拟的,谢谢!
...全文
468 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
adbc_8899 2011-08-24
  • 打赏
  • 举报
回复
只知道方法是填充缓冲区,但具体如何实现不得而知,有没有知道的,给我相关的代码。
buyong 2011-08-24
  • 打赏
  • 举报
回复
msdn:
Diex3: DirectInput Nonexclusive Keyboard Input Sample


This DirectInput sample demonstrates an application which receives keyboard data in nonexclusive mode via a game loop.

adbc_8899 2011-08-24
  • 打赏
  • 举报
回复
谢谢ljmanage,winio我知道,我已经实现了,我要是用directipnut实现
李_军 2011-08-24
  • 打赏
  • 举报
回复
采用WINIO驱动方式

-------------------------------------------------------------------------------------
--------------------

什么WinIo.h VXD驱动自己找下吧

以下代码可以直接编译(在目录包含winio.h winio.sys winio.VXD winio.lib前提下)

code by TR

translate from delphi.

----------------------------------------------------------------------------------------------------------

#include<windows.h>
#include<stdio.h>
#include"WinIo.h"


#define KBC_CMD 0x64
#define KBC_DATA 0x60

void KBCWait4IBE()
{
DWORD dwVal=0;
do
{
GetPortVal(KBC_CMD,&dwVal,1);
}
while((&dwVal)&&(0x2)==0);
}
void KEY_DOWN(int vk_in)
{
int myscancode;
myscancode=MapVirtualKey(byte(vk_in),0);
KBCWait4IBE();
SetPortVal(KBC_CMD,0xD2,1);
KBCWait4IBE();
SetPortVal(KBC_DATA,0xE2,1);
KBCWait4IBE();
SetPortVal(KBC_CMD,0xD2,1);
KBCWait4IBE();
SetPortVal(KBC_DATA,myscancode,1);
}
void KEY_UP(int vk_in)
{
int myscancode;
myscancode=MapVirtualKey(byte(vk_in),0);
KBCWait4IBE();
SetPortVal(KBC_CMD,0xD2,1);
KBCWait4IBE();
SetPortVal(KBC_DATA,0xE0,1);
KBCWait4IBE();
SetPortVal(KBC_CMD,0xD2,1);
KBCWait4IBE();
SetPortVal(KBC_DATA,(myscancode|0x80),1);
}

void main()
{
bool br,br1;
//br=InitializeWinIo(); //in NT/XP no need
//if (br==false)
//{
// MessageBox(NULL,"初始化winio失败,程序自动关闭,请您不用担心~","XD友情提示1",MB_OK);
// ShutdownWinIo();
// exit(0);
//}
br1=InstallWinIoDriver("WinIo.sys");
if(br1==false)
{
MessageBox(NULL,"安装IO_device失败,程序自动关闭,请您不用担心~","XD友情提示2",MB_OK);
RemoveWinIoDriver();
ShutdownWinIo();
exit(0);
}
printf("安装成功1!!! press Enter to continue...");
getchar();
InitializeWinIo();
printf("安装成功2!!! press Enter to continue...");
getchar();

for (int ii=0;ii<=20;ii++)
{
KEY_DOWN(65);//模拟按键
Sleep(200);
KEY_UP(65);//
}

printf("done!!!");
getchar();

RemoveWinIoDriver();
ShutdownWinIo();
}


16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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