python调用函数库_python调用操作系统的库函数

调用操作系统的库函数

我们知道python解释器本质上就是使用C语言写出来的一个软件,那么操作系统呢?操作系统本质上它也是一个软件,不管是Windows、linux、macOS都自带了大量的共享库,那么我们就可以使用python去调用。

from ctypes import *

import platform

# 判断当前的操作系统平台。

# Windows平台返回"Windows",linux平台返回"Linux",macOS平台返回"Darwin"

system = platform.system()

# 不同的平台共享库不同

if system == "Windows":

libc = cdll.msvcrt

elif system == "Linux":

libc = CDLL("libc.so.6")

elif system == "Darwin":

libc = CDLL("libc.dylib")

else:

print("不支持的平台,程序结束")

import sys

sys.exit(0)

# 调用对应的函数,比如printf,注意里面需要传入字节

libc.printf(b"my name is %s, age is %d\n", b"van", 37) # my name is van, age is 37

# 如果包含汉字就不能使用b""这种形式了,因为这种形式只适用于ascii字符,我们需要手动encode成utf-8

libc.printf("姓名: %s, 年龄: %d\n".encode("utf-8"), "古明地觉".encode("utf-8"), 17) # 姓名: 古明地觉, 年龄: 17

我们上面是在Windows上调用的,这段代码即便拿到linux上也可以正常执行。

20200129005647411394.png

至于Mac,我这里没有Mac,就不演示了。

20200129005647551048.png

当然这里面还支持其他的函数,我们这里以Windows为例:

from ctypes import *

libc = cdll.msvcrt

# 创建一个大小为10的buffer

s = create_string_buffer(10)

# strcpy表示将字符串进行拷贝

libc.strcpy(s, c_char_p(b"hello satori"))

# 由于buffer只有10个字节大小,所以无法完全拷贝

print(s.value) # b'hello sato'

# 创建unicode buffer

s = create_unicode_buffer(10)

libc.strcpy(s, c_wchar_p("我也觉得很变态啊"))

print(s.value) # 我也觉得很变态啊

# 比如puts函数

libc.puts(b"hello world") # hello world

Windows系统的其他函数

对于Windows来说,我们还可以调用一些其它的函数,但是不再是通过cdll.msvcrt这种方式了。在Windows上面有一个user32这么个东西,我们来看一下:

from ctypes import *

# 我们通过cdll.user32本质上还是加载了Windows上的一个共享库

# 这个库给我们提供了很多方便的功能

win = cdll.user32

# 比如查看屏幕的分辨率

print(win.GetSystemMetrics(0)) # 1920

print(win.GetSystemMetrics(1)) # 1080

我们还可以用它来打开MessageBoxA:

20200129005647642849.png

可以看到我们通过windll.user32就可以很轻松地调用Windows的api,具体有哪些api可以去网上查找,搜索win32?api

关于Windows的其它模块

除了ctypes,还有几个专门用来操作win32服务的模块,win32gui、win32con、win32api、win32com、win32process。直接pip install pywin32即可,或者pip install pypiwin32。

显示窗体和隐藏窗体

import win32gui

import win32con

# 首先查找窗体,这里查找qq。需要传入 窗口类名 窗口标题名,至于这个怎么获取可以使用spy工具查看

qq = win32gui.FindWindow("TXGuifoundation", "QQ")

# 然后让窗体显示出来

win32gui.ShowWindow(qq, win32con.SW_SHOW)

# 还可以隐藏

win32gui.ShowWindow(qq, win32con.SW_HIDE)

控制窗体的位置和大小

import win32gui

import win32con

qq = win32gui.FindWindow("TXGuiFoundation", "QQ")

# 主要要接收如下参数

# 参数一:控制的窗体

# 参数二:大致方位:HWND_TOPMOST,位于上方

# 参数三:位置x

# 参数四:位置y

# 参数五:长度

# 参数六:宽度

# 参数七:比较固定,就是让窗体一直显示

win32gui.SetWindowPos(qq, win32con.HWND_TOPMOST, 100, 100, 300, 300, win32con.SWP_SHOWWINDOW)

20200129005647839145.png

那么我们还可以让窗体满屏幕乱跑

import win32gui

import win32con

import random

qqWin = win32gui.FindWindow("TXGuiFoundation", "QQ")

# 将位置变成随机数

while True:

x = random.randint(1, 800)

y = random.randint(1, 400)

win32gui.SetWindowPos(qqWin, win32con.HWND_TOPMOST, x, y, 300, 300, win32con.SWP_SHOWWINDOW)

语音播放

import win32com.client

# 直接调用操作系统的语音接口

speaker = win32com.client.Dispatch("SAPI.SpVoice")

# 输入你想要说的话,前提是操作系统语音助手要认识。一般中文和英文是没有问题的

speaker.Speak("他能秒我,他能秒杀我?他要是能把我秒了,我当场······")

python中win32模块的api非常多,几乎可以操作整个windows提供的服务,win32模块就是相当于把Windows服务封装成了一个一个的接口。不过这些服务、或者调用这些服务具体都能干些什么,可以自己去研究,这里就到此为止了。毕竟本来是介绍python和静态语言之间的结合的,所以感觉这一篇文章似乎有点多余,但是多了解点总归是好的。

20200129005648058880.jpg

原文地址:https://www.cnblogs.com/traditional/p/12239420.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值