Pythonは、オペレーティング・システムのライブラリ関数を呼び出します

オペレーティングシステムのライブラリ関数を呼び出します

私たちは、ソフトウェアの使用は、Pythonインタプリタエッセンス、オペレーティングシステム上でC言語で書かれていることを知っていますか?それはWindowsやLinuxであるかどうか、基本的にソフトウェアであり、MacOSのは、共有ライブラリの多くが付属しても、オペレーティングシステムであり、我々はコールにパイソンを使用することができます。

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

我々は、Linuxを取得するためのコードも正常に行うことができた場合でも、Windowsの呼び出しの上にあります。

Mac用として、私は実証されていない、のMacを持っていません。

もちろん、他の機能をサポートし、我々はここでは例として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では、このようなAの事上記USER32があり、私たちは見て:

from ctypes import *

# 我们通过cdll.user32本质上还是加载了Windows上的一个共享库
# 这个库给我们提供了很多方便的功能
win = cdll.user32

# 比如查看屏幕的分辨率
print(win.GetSystemMetrics(0))  # 1920
print(win.GetSystemMetrics(1))  # 1080

また、MessageBoxAを開くためにそれを使用することができます。

我々は簡単に、検索を見つけるためにオンラインで行くことができ、特定のAPI windll.user32によって、WindowsのAPI、呼び出すことができることがわかりますwin32 api

Windows用の他のモジュールについて

ctypesのに加えて、Win32のサービス、win32gui、win32con、Win32APIの、win32com、win32processを操作するために設計されたいくつかのモジュールがあります。pywin32缶を直接ピップをインストール、またはピップ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)

その後、我々はまた、ウィンドウはフルスクリーンの周りに実行させることができます

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("他能秒我,他能秒杀我?他要是能把我秒了,我当场······")

Win32 APIの中のpythonモジュールは非常に大きく、ほぼ全体の窓が提供するサービス動作させることができ、win32のモジュールは、パッケージ・インターフェースへのWindowsサービスと同等です。しかし、これらのサービス、またはあなたが停止ここ、ここ、自分の研究に行くことができ、これらの特定のサービスをやってすることができます呼び出します。私はこの記事が少し過剰に思えるが、より多くの程度を知ることは常に良いと感じるように、すべての後に、それは、Pythonと静的言語間の導入と組み合わせることができたであろう。

おすすめ

転載: www.cnblogs.com/traditional/p/12239420.html