在 windows 下通过 python 访问红外设备

打算尝试一下和手机作同步,在 Windows 下开发,语言显然只能选择 Python 了。首先下载了 fMA 的源代码(它是用 Delphi 写的),找到可能和 Irda 相关的文件,仔细看了看它的代码和注释,然后又从注释里面找到了 MSDN 关于红外编程的链接

查找 Windows 下开发方法的同时也参考了 MultiSync 中关于红外部分的代码。现在可以确认无论是在 Linux 下还是在 Windows 下,操作红外 IrCOMM 都是通过 socket 完成的,下面展示一下 win32 获取红外设备列表的代码。

  1. from socket import *
  2. from struct import *
  3.  
  4. #imports from WIrCOMMSocket.pas
  5. SOL_IRLMP = 0xFF
  6. IRLMP_ENUMDEVICES = 0x00000010
  7.  
  8. DeviceInfoSize = 29
  9. DeviceList = []
  10.  
  11. IrdaSocket = socket(AF_IRDA, SOCK_STREAM)
  12. IrdaInfo = IrdaSocket.getsockopt(SOL_IRLMP, IRLMP_ENUMDEVICES, 1024)
  13. DeviceNum = unpack('i', IrdaInfo[:4])[0]
  14. print DeviceNum
  15. DeviceListInfo = IrdaInfo[4:]
  16. for i in range(0, len(DeviceListInfo), 29):
  17.     DeviceInfo = DeviceListInfo[i:i+29]
  18.     DeviceInfo = unpack('i22sccc', DeviceInfo)
  19.     DeviceList.append(DeviceInfo)
  20.  
  21. IrdaSocket.close()
  22.  
  23. if len(DeviceList):
  24.     print "DeviceID  :", DeviceList[0][0]
  25.     print "DeviceName: " + DeviceList[0][1].strip('\x00')
Topic: 技术