遇到了奇葩的进程通信方式,我该怎么办?

2018-11-15 20:43:06 +08:00
 ruoyu0088

12000 元买了两个陀螺仪传感器,它提供的驱动程序是这样把数据传送给用户程序的:

  1. 调用 WindowFromPoint 获取某固定坐标对应的窗口句柄
  2. 使用 PostMessage 向该窗口发送大量的 Windows 消息

这样做有如下好处:

  1. 一条消息只能发送 64bit 的数据,一组数据需要分 4 次发送,因此在最快取样频率 100Hz 下,一秒钟要接受 400 条 Windows 消息
  2. 用户窗口必须放在指定的位置,并且保持可见。一旦用户窗口被其他窗口覆盖,消息就发送到不相干的窗口去了。如果该窗口恰好也有处理相应消息 ID 的程序,该窗口就会发生不可知的动作
  3. 无法在一台电脑上同时读取两个传感器,因为消息中没有传感器 ID,并且都发送到同一个坐标的窗口。因此为了同时读取,我还要再配备两台电脑

有什么办法处理这么疯的程序吗。也许可以开两个虚拟机,让它们在虚拟机里面向各自的用户窗口发送数据,然后用户窗口通过网络传送到虚拟机外面的接收程序?

8030 次点击
所在节点  
9 条回复
ech0x
2018-11-15 20:52:56 +08:00
听说过有这样的程序,没想到真的存在。
GDC
2018-11-15 21:47:51 +08:00
好屌的程序……
wafm
2018-11-15 21:58:56 +08:00
好处?是不是打错字了?

如果没有传感器 ID 那你就无法区分到底是哪一个传感器过来的消息呀?

N 年前曾经写过 API HOOK 我说个思路不知道可不可行

你可以把消息转到自己的程序中处理再返回给系统
WordTian
2018-11-15 21:59:55 +08:00
666
ruoyu0088
2018-11-15 22:10:16 +08:00
@wafm 当然是打引号的"好处",不过对我来说就是又有活干了,也算一个真的好处。

能用 API HOOK 把那个 PostMessage 换成我自己的函数吗。如果这样能行的话,就可以比较好地解决了。我原本打算复制并直接修改 exe 程序,把坐标换一个地方,这样我可以在不同的地方放窗口分别接收消息。但是窗口一移动就会出问题。能 HOOK 最好。
ruoyu0088
2018-11-15 22:12:03 +08:00
厂家提供的程序有设置端口的地方,可以启动两次分别与两个传感器通信,只是用户程序无法区分传感器。
wafm
2018-11-15 23:26:56 +08:00
@ruoyu0088 理论上来说 API HOOK 本来就是可以拦截函数并自行处理 所以得实践 基本上就是复写 API
mcdull619
2018-11-16 14:25:33 +08:00
看上去很厉害的样子 , 点赞 .
flowfire
2018-11-19 10:30:20 +08:00
为什么我觉得反编译硬件驱动都比找解决方案要靠谱🤣🤣🤣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508271

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX