如何在 Python 中使用 Win32 API?
- 2025-03-20 08:48:00
- admin 原创
- 44
问题描述:
如何在 Python 中使用 win32 API?最好的和最简单的方法是什么?
你能提供一些例子吗?
解决方案 1:
PyWin32 是可行的方法 - 但如何使用它?一种方法是从您遇到的具体问题开始并尝试解决它。PyWin32 为 Win32 API 函数提供了绑定,这些函数有很多,您确实必须先选择一个特定的目标。
在我的 Python 2.5 安装(Windows 上的 ActiveState)中,win32 包有一个 Demos 文件夹,其中包含该库各个部分的示例代码。
例如,这是 CopyFileEx.py:
import win32file, win32api
import os
def ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred,
StreamNumber, CallbackReason, SourceFile, DestinationFile, Data):
print Data
print TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile
##if TotalBytesTransferred > 100000:
## return win32file.PROGRESS_STOP
return win32file.PROGRESS_CONTINUE
temp_dir=win32api.GetTempPath()
fsrc=win32api.GetTempFileName(temp_dir,'cfe')[0]
fdst=win32api.GetTempFileName(temp_dir,'cfe')[0]
print fsrc, fdst
f=open(fsrc,'w')
f.write('xxxxxxxxxxxxxxxx
'*32768)
f.close()
## add a couple of extra data streams
f=open(fsrc+':stream_y','w')
f.write('yyyyyyyyyyyyyyyy
'*32768)
f.close()
f=open(fsrc+':stream_z','w')
f.write('zzzzzzzzzzzzzzzz
'*32768)
f.close()
operation_desc='Copying '+fsrc+' to '+fdst
win32file.CopyFileEx(fsrc, fdst, ProgressRoutine, operation_desc, False, win32file.COPY_FILE_RESTARTABLE)
它展示了如何将 CopyFileEx 函数与其他几个函数(如 GetTempPath 和 GetTempFileName)一起使用。从这个例子中,您可以“大致了解”如何使用这个库。
解决方案 2:
@chaos 提到,PyWin32 可能是最受欢迎的选择;另一种选择是ctypes,它是 Python 标准库的一部分。例如,将显示当前模块(EXE 或 DLL)的模块句柄。这里print ctypes.windll.kernel32.GetModuleHandleA(None)
有一个使用 ctypes 获取 win32 API 的更广泛的示例。
解决方案 3:
您可以在 win32 Python 中使用的重要的功能是消息框,这是 OK 或 Cancel 的经典示例。
result = win32api.MessageBox(None,"Do you want to open a file?", "title",1)
if result == 1:
print 'Ok'
elif result == 2:
print 'cancel'
收藏品:
win32api.MessageBox(0,"msgbox", "title")
win32api.MessageBox(0,"ok cancel?", "title",1)
win32api.MessageBox(0,"abort retry ignore?", "title",2)
win32api.MessageBox(0,"yes no cancel?", "title",3)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD