首页
社区
课程
招聘
[求助]keymouse通用键鼠模拟老出错。请大家帮看看哪里有问题?
发表于: 2014-11-23 13:36 7496

[求助]keymouse通用键鼠模拟老出错。请大家帮看看哪里有问题?

2014-11-23 13:36
7496
keymouse通用键鼠模拟老出错。请大家帮看看哪里有问题?
deviceiocontrol函数老是提示错误87
代码传上来了。请帮看看吧。非常感谢各位了。DELPHI的
记得请在虚拟机里面用。开还原功能。不然会安装驱动到系统。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 32
活跃值: (34)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
Delphi版的,没放帮你了。
2014-11-23 13:52
0
雪    币: 85
活跃值: (51)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
网上c版的也不少,为啥要用delphi
2014-11-23 14:36
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
驱动是C程序的,应用层调用是delphi的。
2014-11-23 15:38
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
关键代码如下
procedure key(VirtualKey:WORD );
var
    //kid:KEYBOARD_INPUT_DATA;
    error:boolean;
    BytesReturned:DWORD;
    //Buffer:array[0..2]of byte;
    //pBuffer:pword;
     //dwOutput:DWORD;
     MakeCode:Cardinal;
begin
    //system.FillChar(kid,sizeof(kid),0);
    //kid.Flags:=Flags;
    MakeCode := WORD(MapVirtualKey(VirtualKey, 0));
    //MakeCode:=$30;
    error := DeviceIoControl(KeyMouse_Handle,
                            cardinal(IOCTL_KEY_DOWN),
                            @MakeCode,
                            sizeof(MakeCode),
                            nil,
                            0,
                            BytesReturned,
                            nil);
    Sleep(100);
    MakeCode := WORD(MapVirtualKey(VirtualKey, 0));
    error := DeviceIoControl(KeyMouse_Handle,
                            cardinal(IOCTL_KEY_UP),
                            @MakeCode,
                            sizeof(MakeCode),
                            nil,
                            0,
                            BytesReturned,
                            nil);

    if (not error) then showmessagefmt('从KeyMouse输入端口数据时出错:%d',[GetLastError]);
    //result:=Buffer[0];
end;

执行DeviceIoControl老是返回错误87。不知道哪里有问题。驱动程序编译了,也启动了。
测试系统是WINXP SP2和WINXP SP3
2014-11-23 15:42
0
雪    币: 85
活跃值: (51)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
帮你查了一下,87号是参数错误!结果已经很明显了,我不懂d,所以没法帮你排错...
死死盯着几个参数,反复推敲,一定会发现的,希望可以帮到你
2014-11-23 17:38
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
谢谢回帖,搞不懂了,那个‘我做的模拟挂’这个帖子的代码运行没问题。但是现在这个就出错了。
里面的调用方法都差不的,我之所以想用这个是想做成64位的。
2014-11-23 17:52
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
64位下加载驱动搞定了吗
2014-11-23 17:59
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
问题解决了,原因是因为开始定义数据的时候弄错了。改了就好了。谢谢各位的关注。

  IOCTL_KEY_DOWN  = (FILE_DEVICE_KEYMOUSE shl 16) +
    ($800 shl 2) +        <=========这里错了。
    METHOD_BUFFERED +
    (FILE_ANY_ACCESS shl 14);
这个地方弄错了。
2014-11-23 18:23
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
开机F8选"禁用驱动签名强制"启动就可以加载驱动了,现在的最主要问题是,如何跟踪kbdclass.sys中的
函数的特征码,我还不知道怎么弄。
2014-11-23 18:26
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主好人啊,弄好了再发个给我们学习下吧
2014-11-23 18:49
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
发就发吧。留着也是留着,造福大家算了。记得在·有还原软件的系统中使用。不然驱动会被永久安装。
测试系统是winxp
上传的附件:
2014-11-23 21:05
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢了,64位下可以用吗
2014-11-24 13:09
0
雪    币: 32
活跃值: (34)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
经我测试,貌似32位驱动不能在64位下加载...
2014-11-24 17:32
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看了下只有键盘的模拟,
2014-11-24 18:13
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习一下!
2014-12-2 21:56
0
雪    币: 199
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
太好了,正要用这个呢
2015-8-26 23:21
0
游客
登录 | 注册 方可回帖
返回
//