找回密码
 会员注册
查看: 30|回复: 0

python模块之pywin32使用文档,python操作windowsAPI

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71916
发表于 2024-9-8 15:40:30 | 显示全部楼层 |阅读模式
文章目录一、pywin32简介1、windowsAPI是什么2、pywin32模块3、安装pywin32二、常用模块:pywintypes0、使用1、CreateGuid:生成唯一标识符三、常用模块:win32api0、使用1、AbortSystemShutdown:关机2、Beep:发出声音3、ClipCursor:限制鼠标范围4、CloseHandle:关闭文件句柄5、CopyFile:复制文件6、DeleteFile:删除文件7、ExitWindows:注销当前用户8、GetComputerName:获取计算机名9、GetCursorPos:返回鼠标位置10、GetLocalTime:获取当前时间11、MessageBeep:发出预定义的声音12、TerminateProcess:终止进程13、其他四、剪切板模块:win32clipboard五、文件模块:win32file六、ui模块:win32gui1、常用方法2、获取窗口并设为活跃窗口一、pywin32简介1、windowsAPI是什么WindowsAPI(ApplicationProgrammingInterface)是一组函数、数据结构、指令集等的集合,用于操作和控制Windows操作系统的各种功能和特性。它提供了一种通过编程方式与Windows进行交互的接口。WindowsAPI允许开发人员使用编程语言(如C/C++、Python等)调用和使用Windows操作系统的内部功能,如创建和管理进程、访问和修改文件系统、读取和写入注册表、绘制图形、操作窗口和控件、网络通信等。通过WindowsAPI,开发人员可以利用操作系统提供的功能和资源,构建各种类型的应用程序。WindowsAPI以动态链接库(DLL)的形式提供,开发人员可以通过引入相应的库文件并使用库中的函数和数据结构,来实现对特定功能的调用和操作。使用WindowsAPI可以完成从底层系统操作到高级应用程序开发的各个层次的任务。WindowsAPI是使用非常广泛的API之一,广泛应用于Windows软件开发、系统编程、驱动程序开发等领域。win32API参考手册:http://www.yfvb.com/help/win32sdk/index.htm微软win32API手册:https://learn.microsoft.com/zh-cn/windows/win32/2、pywin32模块pywin32是一个Python扩展模块,它提供了与Windows操作系统的API进行交互的功能。具体而言,pywin32模块可以用于在Python中调用和操作Windows的各种系统功能,包括但不限于以下功能:与WindowsAPI的交互:pywin32提供了对Windows的API函数的封装,使得在Python中可以直接调用这些API函数进行操作,如创建和管理进程、访问和修改注册表、操作文件和文件夹等。COM组件和ActiveX对象的操作:pywin32支持使用COM技术(ComponentObjectModel)与Windows操作系统中的COM组件进行交互。通过pywin32,可以创建、操纵和使用COM组件、ActiveX对象和OLE对象,实现与Windows应用程序和组件的集成。Windows服务的管理:pywin32提供了管理Windows服务的功能,可以通过pywin32创建和管理Windows服务,包括安装、启动、停止和删除Windows服务。GUI编程:pywin32模块还提供了与Windows的图形用户界面(GUI)进行交互的功能。它可以创建和操作Windows窗口、对话框,以及访问和修改窗口控件的属性和事件。总之,pywin32模块提供了丰富的功能和方法,可以在Python中直接调用Windows操作系统的API,实现与Windows相关的操作和功能。该项目是开源的,地址为:https://github.com/mhammond/pywin32api地址为:http://timgolden.me.uk/pywin32-docs/contents.html3、安装pywin32#直接安装pipinstallpywin3212安装完成之后,在python安装目录下:\Lib\site-packages,会有一个PyWin32.chm文件,就是使用文档。pywin32把WindowsAPI按照功能分了一些大类,每一个大类作为一个模块。以下是所有的模块:_winxptheme:提供专为xp系统的主题APImmapfile:编译的扩展模块,提供对内存映射文件API的访问odbc:odb数据库apiperfmon:包装性能监视器功能的模块。pywintypes:支持常见Windows类型的模块。servicemanager:与Windows服务控制管理器交互的模块。timer:包装Win32Timer函数的扩展win2kras:将Windows2000扩展封装到远程访问服务(RAS)API的模块。win32api:提供了常用的用户APIwin32clipboard:提供了有关粘贴板的APIwin32con:有关的常量win32console:控制台win32cred:凭证管理功能的接口。此模块中的功能仅适用于WindowsXP及更高版本。win32crypt:win32CryptographyAPI的接口win32event:提供了win32事件/等待APIwin32evtlog:封装了WindowsWin32事件日志API。win32file:提供了有关文件操作的APIwin32gui:提供了有关windows用户界面图形操作的APIwin32help:Win32helpAPI’swin32inet:Windowsinternet(wininet)API的接口win32job:win32进程和线程API的接口,可在Windows2000及更高版本中使用。win32lz:封装WindowsLZ压缩例程的模块win32net:Windowsinternet(wininet)API的接口win32pdh:封装了Windows性能数据助手APIwin32pipe:管道apiwin32print:封装Windows打印APIwin32process:进程apiwin32profile:包装用于处理用户配置文件的函数win32ras:封装Windows远程访问服务(RAS)APIwin32security:win32安全API的接口win32service:服务win32tracewin32transaction:用于事务化的NTFS和事务化的注册表函数win32ts:这个模块中的所有函数都接受关键字参数win32wnet:公开Windows网络APIwinxpgui:xp图像用户界面API二、常用模块:pywintypes0、使用使用前需要引入:importpywintypes11、CreateGuid:生成唯一标识符返回一个字符串,格式为{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}。PyIID=pywintypes.CreateGuid()print(PyIID)#{BB02ECB7-BC18-4336-A65C-C9C0CE548020}12三、常用模块:win32api0、使用使用前需要引入:importwin32api11、AbortSystemShutdown:关机importwin32api#取消系统关闭操作win32api.AbortSystemShutdown(computer_name=None)1234该方法的参数computer_name是可选的,用于指定要取消系统关闭操作的计算机名称。如果未提供computer_name参数,则默认为本地计算机。注意:该方法要求以管理员权限运行,否则会抛出权限错误。2、Beep:发出声音importwin32api#发出一次短促的蜂鸣声win32api.Beep(freq,duration)1234该方法接受两个参数:freq:表示发声的频率,以赫兹(Hz)为单位。常见的频率可以尝试使用440(标准音A)。duration:表示发声持续的时间,以毫秒(ms)为单位。请注意,该方法可能不适用于所有的计算机和操作系统。在某些系统中可能无法产生蜂鸣声音。3、ClipCursor:限制鼠标范围在pywin32模块中,win32api.ClipCursor方法用于限制鼠标光标的移动范围在指定的矩形区域内。importwin32api#定义矩形的左上角和右下角坐标left,top,right,bottom=100,100,500,500#创建矩形对象rect=(left,top,right,bottom)#限制鼠标光标的移动范围win32api.ClipCursor(rect)#取消限制,恢复正常的鼠标光标移动范围win32api.ClipCursor(None)123456789101112在这个示例中,首先我们定义了一个矩形区域的左上角和右下角坐标。然后,使用win32api.ClipCursor方法将鼠标光标的移动范围限制在该矩形区域内,传入矩形的坐标参数。最后,使用win32api.ClipCursor(None)取消对鼠标光标移动范围的限制,恢复正常的移动范围。注意:在使用win32api.ClipCursor方法之后,记得一定要及时取消限制,以免造成鼠标无法移动的情况。4、CloseHandle:关闭文件句柄在pywin32模块中,win32api.CloseHandle方法用于关闭一个句柄(handle)。importwin32api#打开或创建一个文件,并获取文件的句柄handle=win32api.CreateFile("path/to/file",win32api.GENERIC_READ,0,None,win32api.OPEN_EXISTING,0,None)#使用句柄进行一些操作#关闭句柄win32api.CloseHandle(handle)12345678在这个示例中,首先我们使用win32api.CreateFile方法打开或创建一个文件,并获取文件的句柄。然后,使用这个句柄进行一些操作。最后,使用win32api.CloseHandle方法关闭句柄,确保资源的释放和内存的回收。请注意,在使用完句柄后,务必记得及时关闭句柄,以免资源泄露或其他不可预见的问题。5、CopyFile:复制文件importwin32api#源文件路径src_file="path/to/source/file"#目标文件路径dst_file="path/to/destination/file"#复制文件win32api.CopyFile(src_file,dst_file)123456789CopyFile支持多传一个int类型参数:指示如果文件存在,操作是否应该失败,默认为0。6、DeleteFile:删除文件win32api.DeleteFile(fileName)17、ExitWindows:注销当前用户在pywin32模块中,win32api.ExitWindows方法用于执行系统的关机、重启、注销或关闭等操作。importwin32api#执行关机操作(将在30秒后关机)win32api.ExitWindowsEx(win32api.EWX_SHUTDOWN|win32api.EWX_FORCE,30)123在这个示例中,我们使用win32api.ExitWindowsEx方法执行关机操作。win32api.EWX_SHUTDOWN指定了要执行的操作为关机操作,win32api.EWX_FORCE指定了强制执行关机操作。最后的参数30表示延迟关机的时间,单位为秒(默认为0)。除了关机操作,还可以使用其他参数来执行其他操作,如重启、注销、锁定等。以下是一些常用的系统操作参数:win32api.EWX_LOGOFF:注销win32api.EWX_REBOOT:重启win32api.EWX_SHUTDOWN:关机win32api.EWX_POWEROFF:关闭电源(需要特权)可以根据需要选择适合的操作参数。请注意,某些操作可能需要管理员权限才能执行成功。另外,也可以使用win32api.InitiateSystemShutdown方法进行关机操作,它提供更多的自定义选项。8、GetComputerName:获取计算机名importwin32api#获取计算机名称computer_name=win32api.GetComputerName()print(f"ComputerName:{computer_name}")123459、GetCursorPos:返回鼠标位置importwin32apia,b=win32api.GetCursorPos()print(a)print(b)1234510、GetLocalTime:获取当前时间#结果:(2023,11,3,15,10,12,23,214)win32api.GetLocalTime()win32api.GetSystemTime()12311、MessageBeep:发出预定义的声音win32api.MessageBeep(1)112、TerminateProcess:终止进程importwin32apiimportwin32con#根据进程ID终止进程defkill_process_by_pid(pid):#打开进程句柄handle=win32api.OpenProcess(win32con.PROCESS_TERMINATE,False,pid)ifhandle:#终止进程win32api.TerminateProcess(handle,0)#关闭进程句柄win32api.CloseHandle(handle)#根据进程名称终止进程defkill_process_by_name(name):importpsutilforprocessinpsutil.process_iter(['name','pid']):ifprocess.info['name']==name:pid=process.info['pid']kill_process_by_pid(pid)#终止名为"program_name.exe"的进程kill_process_by_name("program_name.exe")123456789101112131415161718192021222324在上面的代码中,我们定义了两个函数:kill_process_by_pid()和kill_process_by_name()。kill_process_by_pid()函数使用进程ID(pid)来终止进程,而kill_process_by_name()函数使用进程名称来终止进程。在kill_process_by_name()函数中,我们使用了psutil模块来获取正在运行的进程列表,并根据进程名称匹配要终止的进程。请注意,在使用win32api.TerminateProcess()函数时,要谨慎操作,因为它可以立即终止进程,而不进行任何清理工作。13、其他还有各种内存、文件、鼠标、键盘等操作的。四、剪切板模块:win32clipboardwin32clipboard模块提供了对Windows系统剪贴板的访问。以下是win32clipboard模块的常用方法和属性:OpenClipboard(hwnd):打开剪贴板。hwnd是一个可选参数,用于指定当前活动窗口的句柄。CloseClipboard():关闭剪贴板。EmptyClipboard():清空剪贴板。GetClipboardData(format):获取剪贴板中的数据。format是一个可选参数,用于指定数据的格式。常见的格式有:win32con.CF_TEXT:文本格式win32con.CF_UNICODETEXT:Unicode文本格式win32con.CF_DIB:位图格式SetClipboardData(format,data):设置剪贴板中的数据。format是数据的格式,data是要设置的数据。IsClipboardFormatAvailable(format):检查指定格式的数据是否在剪贴板中可用。importwin32clipboardimportwin32con#打开剪贴板win32clipboard.OpenClipboard()#清空剪贴板win32clipboard.EmptyClipboard()#设置文本数据win32clipboard.SetClipboardData(win32con.CF_TEXT,b"Hello,World!")#获取文本数据data=win32clipboard.GetClipboardData(win32con.CF_TEXT)print(data)#检查指定格式的数据是否可用is_available=win32clipboard.IsClipboardFormatAvailable(win32con.CF_UNICODETEXT)print(is_available)#关闭剪贴板win32clipboard.CloseClipboard()12345678910111213141516171819202122上述代码打开剪贴板,清空剪贴板,设置文本数据,获取文本数据,并检查指定格式的数据是否可用,最后关闭剪贴板。五、文件模块:win32filewin32file模块是pywin32模块中的一个子模块,用于处理Windows文件和文件系统的相关操作。win32file模块提供了一些方法和常量来处理文件的读写、文件属性的获取和设置、文件系统的操作等。以下是这个模块的一些常用方法和功能的详细说明:CreateFile(filename,access,share_mode,security_attributes,creation_disposition,flags_and_attributes,template_file):创建或打开一个文件,并返回一个文件句柄。CloseHandle(handle):关闭一个文件句柄。ReadFile(handle,buffer,overlapped):从文件中读取数据,并将结果存入指定的缓冲区。WriteFile(handle,buffer,overlapped):将数据写入文件。GetFileSize(handle):获取指定文件的大小。SetFileAttributes(filename,file_attributes):设置文件的属性,比如只读、隐藏等。GetFileAttributes(filename):获取文件的属性。DeleteFile(filename):删除指定的文件。GetFileInformationByHandle(handle):通过文件句柄获取文件的信息,如文件大小、创建时间等。FindFirstFile(filename):查找指定文件/文件夹,并返回一个用于遍历结果的搜索句柄。FindNextFile(handle):通过搜索句柄获取下一个文件/文件夹的信息。FindClose(handle):关闭搜索句柄。这些方法提供了对文件和文件系统进行操作的功能。可以使用这些方法来创建、打开、读写文件,获取和设置文件属性,删除文件,遍历文件夹等等。在使用这些方法之前,需要先安装pywin32模块,并导入win32file模块。下面是一个示例代码,演示了如何使用win32file模块读取文件的内容和获取文件的大小:#我们使用CreateFile方法打开指定的文件,然后使用GetFileSize方法获取文件的大小。接着,我们调用ReadFile方法读取文件的内容,并将结果返回。最后,我们使用CloseHandle方法关闭文件句柄。#注意,在使用win32file模块时,需要有管理员权限或具有适当的权限来访问和操作文件。importwin32filedefread_file(filename):try:#打开文件handle=win32file.CreateFile(filename,win32file.GENERIC_READ,0,None,win32file.OPEN_EXISTING,0,0)#获取文件大小file_size=win32file.GetFileSize(handle)#读取文件内容buffer=win32file.ReadFile(handle,file_size)#关闭文件句柄win32file.CloseHandle(handle)returnbufferexceptExceptionase:print("Error:",e)#读取文件内容filename="test.txt"file_content=read_file(filename)print(file_content)1234567891011121314151617181920212223242526六、ui模块:win32gui1、常用方法win32gui模块定义了windows窗口的常用方法:importwin32gui#获取窗口句柄hwnd=win32gui.FindWindow(None,"窗口")print(hwnd)1234#获取窗口位置和大小:importwin32guihwnd=win32gui.FindWindow(None,"窗口")rect=win32gui.GetWindowRect(hwnd)left,top,right,bottom=rectprint("窗口位置:(左:{},上:{})".format(left,top))print("窗口大小:(宽:{},高:{})".format(right-left,bottom-top))1234567#获取窗口的父窗口和子窗口:importwin32guihwnd=win32gui.FindWindow(None,"窗口")parent_hwnd=win32gui.GetParent(hwnd)child_hwnds=[]win32gui.EnumChildWindows(hwnd,lambdahwnd,param:param.append(hwnd),child_hwnds)print("父窗口句柄:",parent_hwnd)print("子窗口句柄:",child_hwnds)12345678#设置窗口:importwin32guihwnd=win32gui.FindWindow(None,"窗口")win32gui.SetWindowText(hwnd,"新的窗口")12342、获取窗口并设为活跃窗口importwin32guiwindow_name="窗口"#通过窗口名称获取窗口句柄hwnd=win32gui.FindWindow(None,window_name)ifhwnd!=0:#将窗口设为活跃窗口win32gui.SetForegroundWindow(hwnd)print("窗口已设为活跃")else:print("未找到该窗口")123456789101112该代码只会将窗口设为活跃,并不会将其移动到前台。如果窗口已最小化或位于其他桌面,它可能不会立即显示在屏幕上。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 19:17 , Processed in 0.501193 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表