看雪论坛
发新帖
1

[分享]驱动模拟键鼠,支持64位,附代码。

halflifezy 2015-2-1 15:55 37200
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (94)
sywjh 2015-3-6 17:52
51
mark, 好好学习
一缕忧伤 2015-3-6 20:49
52
感谢楼主分享,这个用得到啊。。
sinmon 2015-3-7 01:26
53
Mark
wwzyspp 2015-3-17 21:56
54
谢谢!!!
从来没有写过windows驱动,为了实现键鼠虚拟输入,苦苦折腾了好几天,现在终于实现了,真是感激涕零!
itcbx 2015-3-20 19:41
55
这个不知道能不能后台模拟呢?
wlks 2015-3-26 15:16
56
这个能后台么?
1
halflifezy 2015-3-30 19:16
57
只能前台,不能后台。以后也没有可以后台的可能。
kangcin 2015-3-30 19:37
58
驱动模拟键鼠,支持64位,代码
Mark
7
无名侠 2015-3-30 21:11
59
mark..
dbfud 2015-3-30 21:31
60
谢谢分享
tiandihuik 2015-3-31 21:16
61
留个记号 备用
lwykj 2015-4-1 16:57
62
MARK 留名
youyoukaka 2015-4-16 12:37
63
mark
艾米哈柏 2015-4-18 23:31
64
mark下。。
zzsyue 2015-4-19 01:00
65
嗯嗯,666666666
zzsyue 2015-4-19 07:37
66
。。。。。。。。。。。
duhefei 2015-4-30 13:01
67
源码已经下载了,正在自己加注释,对我等新手来说,完全注释完也是不小的工程。
谢谢楼主分享
恶魔天尊 2015-5-3 08:27
68
亲应该加一个卸载驱动的哈。。。。
musics 2015-5-4 13:25
69
源码已经下载了,谢谢楼主分享
肖烈 2015-5-19 19:00
70
正好在找这个,谢谢分享。
gob 2015-10-21 15:07
71
谢谢楼主分享
KingOQ 2015-11-12 23:17
72
Nice!收藏了
wbflike 2016-5-7 18:38
73
大兄弟,能加企鹅交流一下么。
哇咔咔zs 2016-6-18 05:12
74
64驱动不稳定,,,偶尔死机 不过还是谢谢分享
pholon 2016-9-14 16:34
75
请问64位下需要数字证书吗?我测试没有成功。
lhb天羽 2016-9-14 18:03
76
很流弊的东西!
skzhe 2016-9-19 15:12
77
Mark
KingOQ 2016-10-6 17:28
78
大牛能对应新系统更新下吗
1
myqqi 2016-10-12 15:26
79
请问一下,我在虚拟机里面加载楼主的64位驱动,显示PS和USB借口的鼠标同时存在,但是为什么我仿照写了之后就一个都检测不到呢?代码如下
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString) { NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING ustrLinkName; UNICODE_STRING ustrDevName; PDEVICE_OBJECT pDevObj; //设置分发函数和卸载例程 pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl; pDriverObj->DriverUnload = DriverUnload; //创建一个设备 RtlInitUnicodeString(&ustrDevName, DEVICE_NAME); status = IoCreateDevice(pDriverObj, 0, &ustrDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDevObj); if(!NT_SUCCESS(status)) return status; status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName); if(!NT_SUCCESS(status)) { IoDeleteDevice(pDevObj); return status; } DbgPrint("DriverEntry\n"); pDevObj->Flags |= DO_DIRECT_IO; pDevObj->AlignmentRequirement = FILE_WORD_ALIGNMENT; status = SearchMouServiceCallBack(pDriverObj); if (!NT_SUCCESS(status)) { KdPrint(("MOUSE_DEVICE ERROR, error = 0x%08lx\n", status)); return status; } //返回加载驱动的状态(如果返回失败,驱动讲被清除出内核空间) pDevObj->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; } NTSTATUS SearchMouServiceCallBack(PDRIVER_OBJECT DriverObject) { //定义用到的一组全局变量,这些变量大多数是顾名思义的 NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING uniNtNameString; PDEVICE_OBJECT pTargetDeviceObject = NULL; PDRIVER_OBJECT KbdDriverObject = NULL; PDRIVER_OBJECT KbdhidDriverObject = NULL; PDRIVER_OBJECT Kbd8042DriverObject = NULL; PDRIVER_OBJECT UsingDriverObject = NULL; PDEVICE_OBJECT UsingDeviceObject = NULL; PVOID UsingDeviceExt = NULL; //这里的代码用来打开USB键盘端口驱动的驱动对象 RtlInitUnicodeString(&uniNtNameString, L"\\Driver\\mouhid"); status = ObReferenceObjectByName(&uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDeviceObjectType, KernelMode, NULL, (PVOID *)&KbdhidDriverObject); if (!NT_SUCCESS(status)) { DbgPrint(("Couldn't get the USB Mouse Object\n")); } else { ObDereferenceObject(KbdhidDriverObject); DbgPrint(("get the USB Mouse Object\n")); } //打开PS/2键盘的驱动对象 RtlInitUnicodeString(&uniNtNameString, L"\\Driver\\i8042prt"); status = ObReferenceObjectByName(&uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDeviceObjectType, KernelMode, NULL, (PVOID *)&Kbd8042DriverObject); if (!NT_SUCCESS(status)) { DbgPrint(("Couldn't get the PS/2 Mouse Object \n")); } else { ObDereferenceObject(Kbd8042DriverObject); DbgPrint(("get the PS/2 Mouse Object\n")); } //如果两个设备都没有找到 if (!Kbd8042DriverObject && !KbdhidDriverObject) { return STATUS_SUCCESS; } //如果USB键盘和PS/2键盘同时存在,使用USB鼠标 if (KbdhidDriverObject) { UsingDriverObject = KbdhidDriverObject; } else { UsingDriverObject = Kbd8042DriverObject; } RtlInitUnicodeString(&uniNtNameString, L"\\Driver\\mouclass"); status = ObReferenceObjectByName(&uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDeviceObjectType, KernelMode, NULL, (PVOID *)&KbdDriverObject); if (!NT_SUCCESS(status)) { //如果没有成功,直接返回即可 DbgPrint(("MyAttach: Coundn't get the Mouse driver Object\n")); return STATUS_UNSUCCESSFUL; } else { ObDereferenceObject(KbdDriverObject); } //遍历KbdDriverObject下的设备对象 UsingDeviceObject = UsingDriverObject->DeviceObject; while (UsingDeviceObject) { status = SearchServiceFromMouExt(KbdDriverObject, UsingDeviceObject); if (status == STATUS_SUCCESS) { break; } UsingDeviceObject = UsingDeviceObject->NextDevice; } if (g_KoMCallBack.MouDeviceObject && g_KoMCallBack.MouseClassServiceCallback) { DbgPrint(("Find MouseClassServiceCallback\n")); } return status; }
1
myqqi 2016-10-14 11:40
80
好吧,终于找到地方了,不知道以前从哪个地方抄的代码:
extern POBJECT_TYPE *IoDeviceObjectType;

应该是
extern POBJECT_TYPE *IoDriverObjectType;

多谢楼主的代码和开源精神,赞一个
chaselife 2016-12-14 11:56
81
WIN7 64可以用不?
看雪guitar 2017-1-16 16:12
82
我用这个驱动已成功向WinKawaks游戏模拟器发送模拟按键,但遇到这样一个问题:比如当按住了键盘A键时,这时我发送一个连招的模拟按键,但模拟器会一直响应我按住的A键,导致我的连招没效果,但当没有操作键盘的时候,这里发送模拟按键能100%成功。我也试过先模拟发送A键的抬起,但是抬起后还是继续响应按住的A键。请问有什么方法可以实现先交出键盘的控制权,等我的模拟按键结束后再响应回实际的键盘按键?最好可以给出代码哈,本人较菜。
sning 2017-1-16 21:59
83
绝对的用得到,留个位置以后好来下
1
halflifezy 2017-1-30 18:23
84
一键连招的辅助我也做过。其实没什么复杂的,你按下按键,然后弹起,中间加一个比较短的延时
然后再按下另外一个键再弹起。这样就有效果了。至于延时多少具体自己试。
luckyyan 2017-3-7 00:17
85
长知识了
4
hanbingxzy 2017-3-7 09:38
86
好多人跟我一样啊,一看到键鼠模拟就想到用于游戏啊。。。 可以改成网络版,这样可以远程控制电脑里的键鼠了,比如用手机远程控制电脑
wanc 2017-3-14 21:54
87
感谢楼主分享
御剑残风 2017-3-14 23:48
88
赞,辛苦哦了
初学者一长剑 2017-6-4 16:30
89
mark
bbkidd 2017-7-8 16:49
90

尝试用C#调用

[DllImport(“kernel32.dll”)]
public  static  extern  IntPtr  LoadLibrary(string  dllToLoad);

IntPtr  pDll  =  NativeMethods.LoadLibrary(@”PathToYourDll.DLL”);
返回值为IntPtr.Zero

原来是64位build的问题,改成32位build就好了


bbkidd 2017-7-9 02:27
91

发现一个问题

win7 64位 

C# 调用dll

MouseMoveRELATIVE 只能移动X轴

1
halflifezy 2017-7-10 16:13
92
楼上的小哥,请使用MouseMoveABSOLUTE,这个是绝对坐标移动,你用的那个是相对坐标移动。
1
halflifezy 2017-8-11 18:36
93
有没有哪位兄台能越过64位系统驱动签名的?分享一下吧。
1
halflifezy 6天前
94
今天试着把该程序放到VS2015+WDK10下编译,发现只有32位的可以编译成功,X64的出现一堆的错误。有没有人会修改?
1
halflifezy 6天前
95
win10下64位编译的问题解决了,但是还是要在开机选禁用驱动签名。头疼。。
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 微信公众号:ikanxue
Time: 0.016, SQL: 14 / 京ICP备10040895号-17