【发布时间】:2011-09-02 09:50:13
【问题描述】:
我确定这在某处有记录,但我找不到...
我的代码正在从另一个库(我无法修改)获取一个 python 对象,我需要在它上面调用一些 win32 api 函数。
Python 从 file.fileno() 返回的不是操作系统级别的句柄,我的猜测是它提供了 MSVCRT 的 fileno。
>>> ctypes.windll.kernel32.CreateFileA('test',0x80000000L,1,None,3,0,0)
1948 # <- HANDLE
>>> file('test','r').fileno()
4 # <- not a HANDLE
如何将它转换成真正的win32句柄?
【问题讨论】:
-
这似乎是一种骇人听闻的做事方式。我建议使用 CreateFile 方法,因为您可以完全控制传递给 CreateFile 的参数,并且它通常是获取句柄的正确方法。你也可以用 win32file 来做(而不是 ctypes)。
-
这可能有点骇人听闻,但我不能自己执行 CreateFile(),因为我从不受我控制的代码中获取了一个 python 文件对象。