遇到了奇葩的进程通信方式,我该怎么办? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ruoyu0088
V2EX   

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

  •  1
     
  •   ruoyu0088 2018-11-15 20:43:06 +08:00 8423 次点击
    这是一个创建于 2522 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    这样做有如下好处:

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

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

    第 1 条附言    2018-11-15 22:22:27 +08:00
    厂家提供的程序有设置端口的地方,可以启动两个副本分别与两个传感器通信,只是用户程序无法区分传感器。

    多谢 @wafm 提醒,找到了一个用 DeviareCOM 做 HOOK 的例子,等有时间试试看。

    https://github.com/srw/windows-api-hooking-in-python-with-deviare-sample
    9 条回复    2018-11-19 10:30:20 +08:00
    ech0x
        1
    ech0x  
       2018-11-15 20:52:56 +08:00
    听说过有这样的程序,没想到真的存在。
    GDC
        2
    GDC  
       2018-11-15 21:47:51 +08:00
    好的程序……
    wafm
        3
    wafm  
       2018-11-15 21:58:56 +08:00
    好处?是不是打错字了?

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

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

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

    能用 API HOOK 把那个 PostMessage 换成我自己的函数吗。如果这样能行的话,就可以比较好地解决了。我原本打算复制并直接修改 exe 程序,把坐标换一个地方,这样我可以在不同的地方放窗口分别接收消息。但是窗口一移动就会出问题。能 HOOK 最好。
    ruoyu0088
        6
    ruoyu0088  
    OP
       2018-11-15 22:12:03 +08:00
    厂家提供的程序有设置端口的地方,可以启动两次分别与两个传感器通信,只是用户程序无法区分传感器。
    wafm
        7
    wafm  
       2018-11-15 23:26:56 +08:00
    @ruoyu0088 理论上来说 API HOOK 本来就是可以拦截函数并自行处理 所以得实践 基本上就是复写 API
    mcdull619
        8
    mcdull619  
       2018-11-16 14:25:33 +08:00
    看上去很厉害的样子 , 点赞 .
    flowfire
        9
    flowfire  
       2018-11-19 10:30:20 +08:00 via iPhone
    为什么我觉得反编译硬件驱动都比找解决方案要靠谱
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2613 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 06:19 PVG 14:19 LAX 23:19 JFK 02:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86