Re: [问题] 如何抓到USB传来的讯号 (键盘)(更新)

楼主: iamrtp (:P)   2018-04-16 22:23:43
更新一下!hook失效的问题解决了,
我改用gma.useractivitymonitor.dll下的FUNCTION搞定
现在的问题是无法分辨"Enter"与"NumPad Enter"这两颗按键
已经试过以下方法:
1. bool isExtended = (bool) typeof(KeyEventArgs).InvokeMember("IsExtendedKey",
BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance,
null, e, null);
这个function无效,似乎已经没有IsExtendedKey功能可以存取。
2. protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
无法跟Hook共存,Hook存在的话就不会进入函式
3. 用DirectX.input 下的 Device.GetPressedKeys()
在Hook产生的事件中会抓到空值
不知道大大知不知道其他解法,感激!!!
各位大大好,本来我要抓的是长得像这样的讯号
http://www.perisoft.net/bushound/details.htm
后来找了大大回应的函示,还是没有成功,因此改成用HOOK来抓键盘输入
本来我的程式都完全达到目的,该抓该侦测的按键都有侦测到,
但是这支程式不知道为什么,执行到后来反应越来越慢,
甚至最后HOOK对KEYDOWN完全没反应了......
我一直在想是不是没有反安装HOOK的关系
因此反安装了几次,但还是无效,程式对KEYDOWN完全没反应
不然就是有侦测到输入,但是判定按钮没有按= =
程式码是参考
https://dotblogs.com.tw/huanlin/2008/04/23/3320

https://goo.gl/W6hAQY
恳请大大教我一下,让我了解一下是哪个步骤漏掉,才让HOOK渐渐失败
(我发现就算把HOOK相关程式码注解,原本FORM的自己的KEYDOWN事件也一样抓不到了)
是不是我应该把user32.dll这个档案备份才能做这只程式呢?
这只程式侦错时,会写资讯到登录档或是永久修改user32.dll吗?
希望大大能协助解答一下疑惑,让小弟能突破瓶颈,感激不尽
※ 引述《iamrtp (:P)》之铭言:
: 各位大大好,小弟目前在开发一只程式,
: 这只程式要能透过USB抓到电路板传来的机械码。
: 目前尝试使用
: SerialPort.GetPortNames();
: 但是我发现回传的Name数为0 =_=
: 看了一下登陆档,发现我的电脑在
: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\ 底下根本没有"SERIALCOMM"
: 这下我迷惘了!如果这条路走不通的话,
: 还有没有其他方式能侦测USB传来的机械码讯号呢?
: 找了很久还是没找到解法,希望这边大大开示,感激不尽!!

Links booklink

Contact Us: admin [ a t ] ucptt.com