【发布时间】:2016-10-26 10:45:20
【问题描述】:
情况如下:我有一个硬件通过串口连接到一台运行windows的PC上。此自定义硬件用于通过 GPIB 连接其他硬件。现在,需要在不触及中间硬件的情况下更改用于在 PC 端操作此设置的软件。问题在于获得正确的串行通信。用于通信的参数 - 将它们(特别是超时 - 波特率和比特都很好)设置为新软件中的任意值会导致很多通信错误,所以我想准确地知道它们。函数 GetCommTimeouts() 可以完成这项工作,但是您需要通讯句柄。通过调用 CreateFile() 获得的设备 - 只有原始软件可以访问它。所以问题是,是否可以从正在运行的旧应用程序之外获取这些设置?
谢谢, 喝酒的人
【问题讨论】:
-
我会推荐使用像 SysInternals 的 Process Monitor 这样的工具。您可以在应用程序中监控打开和配置串口的调用。
-
这看起来很有希望,所以我看了一下这个实用程序。我一直在寻找 CreateFile 操作,但这似乎没有携带有用的信息。我应该寻找什么?
-
我想我需要捕捉对 SetCommTimeouts 的调用 - 在 Proc Monitor 中是否可能?
-
好的。我让它工作了。我用 IDA 对傻瓜进行了反编译,结果发现旧程序是使用 National Instruments 的 CVI 构建的,因此只调用了 SetComTime 而不是 winapis 的 SetCommTimeouts(SetComTime 可能在内部调用它)。从压入堆栈的值中,我设法推断出超时参数。感谢@R.Beiboer 的帮助
标签: c++ windows winapi serial-port