无需安装 Windows SDK?用 Python 开发 Win32 显示器调节程序
off999 2024-09-20 22:40 23 浏览 0 评论
如今,笔记本电脑通常会有一个 Fn 按键,该按键组合其他键可以通过丰富的快捷功能,如调节屏幕的亮暗。当笔记本外接显示时,外接显示器的屏幕亮暗则无法快捷键调节。虽然部分品牌显示会提供相关的显示器驱动或工具程序,可以通过软件的方法调节显示器,但是有些显示器并没有官方提供的工具软件,只能通过显示器上的按键来调节,非常的麻烦与不便。但这类显示器并不不可以通过软件调节,只要显示器支持 DDC/CI 协议都是可以通过软件调节显示器的。直接下载安装互联网上未知来源的程序通常是具有风险的,如包含病毒和木马程序,因此,有必要使用 Python语言编写一个安全自用的调节软件。
众所周知,Python 一个非常易于使用的编程语言,相比较而言 Win32 编程则要复杂得多。仅仅是 Visual Studio 的安装就要占据近 10GB 的硬盘空间。Python 搭配 VS Code 则更加轻便与快捷。Python 被称为胶水语言的原因就是它是一种用来连接软件组件的程序设计语言。它通过 ctypes 模块可以非常轻松方便的调用动态连接库里的函数,这就为 Python 调用 Win32 API 提供了方便。Windows API 大多存在于 kernel32.dll, user32.dll 等一些列动态连接库里,Python 直接调用 Windows DLL 的函数可以免除 Windows SDK 的安装。而这通常是编译型语言如 C/C++ 必须要安装的文件,否则无法编译。
调用 Win32 API
在 Python 中调用 Win32 API 是非常方便的,Windows 大多数的函数接口都在 ctypes.windll 中。Windows 中关于显示器接口的文档可在微软官方网站上获得。例如获取一个显示器句柄中包含的物理显示器个数的代码如下:
def get_physical_monitors_from_HMONITOR(hmonitor: wintypes.HMONITOR):
num = wintypes.DWORD()
windll.Dxva2.GetNumberOfPhysicalMonitorsFromHMONITOR(hmonitor, byref(num))
class PHYSICAL_MONITOER(Structure):
_fields_ = [
("hPhysicalMonitor", wintypes.HANDLE),
("szPhysicalMonitorDescription", wintypes.WCHAR*128)
]
phy_monitors_arr = (PHYSICAL_MONITOER * num.value)()
windll.Dxva2.GetPhysicalMonitorsFromHMONITOR(hmonitor, num, phy_monitors_arr)
return list(phy_monitors_arr)
ctypes.wintypes 中包含了 Windows 中的相关类型,如DWORD,HANDLE等。 PHYSICAL_MONITOR 类则定义了一个 C 接口体,它继承了 ctypes 中的 Structure 类。而 phy_monitors_arr 则声明了一个 C 语言数组。最后调用 Dxva2.dll 中的GetPhysicalMonitorsFromHMONITOR 函数就可以获得具体的物理显示器个数了。相关的详细说明可见 ctypes 模块的文档以及微软 Monitor Configuration 文档。
Python界面编程
PyQt 以及 PySide 是用于在 Python 中使用 QT 进行界面编程的模块。QT 是一个功能非常全面且十分成熟的 UI 界面编写框架,在 Python 中也可以十分方便的进行 QT 开发。以下是基于 QT 编写的显示器调节软件工具,使用了自定义界面。
完整代码见:https://github.com/panderan/BrightnessControl
相关推荐
- 还不会deepseek部署到本地?这篇教程手把手教会你
-
一、为什么要把DeepSeek部署到本地?新手必看的前置知识近期很多读者在后台询问AI工具本地部署的问题,今天以国产优质模型DeepSeek为例,手把手教你实现本地化部署。本地部署有三大优势:数据隐私...
- 推荐个超实用的Python标准库pathlib,玩转路径操作
-
pathlib学习Python时,尤其是在进行文件操作和数据处理时,经常会处理路径问题。最常用和常见的是os.path模块,它将路径当做字符串进行处理,如果使用不当可能导致难以察觉的错误,而且...
- python中文件读写操作最佳实践——使用 os.path 进行路径操作
-
在Python中处理文件路径时,使用os.path模块比直接使用字符串拼接更加安全、可靠且跨平台。下面我将详细解释为什么以及如何使用os.path进行路径操作。为什么不应该使用字符串拼接?#不推荐的...
- Python如何获取当前文件所在目录的完整路径
-
在编程的过程中,我们常常会遇到需要获取当前文件所在目录完整路径的需求。那具体该怎么做呢?这是在众多开发者群体中备受关注的一个问题,就像在问答平台上“/questions/3430372/how-d...
- python编程之神经网络篇(python的神经网络编程)
-
#头条创作挑战赛#神经网络发展到今天大致经历了2次兴起和2次衰落,1943年心理学家McCulloch(麦卡洛克)和数学家Pitts(皮茨)参考生物神经系统的工作原理,首次提出建立了MP神经元模型。其...
- 详解Python整数类型的按位运算(在python中整数)
-
在Python编程中,按位运算是直接对整数的二进制位进行操作的底层运算,虽然不如逻辑运算常见,但在处理位掩码、状态标志、底层算法优化等场景中至关重要。本文将从基础概念到高级应用,全面解析Python整...
- 强化学习的改进只是「噪音」?最新预警:冷静看待推理模型进展
-
机器之心报道编辑:蛋酱、+0「推理」已成为语言模型的下一个主要前沿领域,近期学术界和工业界都取得了突飞猛进的进展。在探索的过程中,一个核心的议题是:对于模型推理性能的提升来说,什么有效?什么无效?De...
- 了解python3新特性-3(python3介绍)
-
以下是Python3的其他一些特性:改进了asyncio.run():Python3.7中对asyncio.run()函数进行了改进,可以方便地处理异步任务异常。新增了typing....
- python GIL全局解释器锁原理、功能及应用示例
-
GIL(GlobalInterpreterLock)是Python解释器中的一个机制,它是一把全局锁,用于在同一时间内限制只有一个线程执行Python字节码。以下是GIL的原理、功能以及5个示例:...
- python3-运算符优先级(python语言运算符优先级)
-
#挑战30天在头条写日记#Python运算符优先级以下列出了从最高到最低优先级的所有运算符,相同单元格内的运算符具有相同优先级。运算符均指二元运算,除非特别指出。相同单元格内的运算符从左至右分组...
- 如何在 Python 中使用 Notion API?
-
如何在Python中使用NotionAPI并自动编辑数据库。设置NotionAPI和数据库首先,让我们在Notion板中创建一个完整的页面数据库。在本文中,我使用了一个来自我的一个数据库的真实示...
- 一文了解 Python 的临时文件模块(python tmpfile)
-
Python的Tempfile模块是用于创建临时文件和文件夹的标准库。当我们需要临时存储数据时,可以创建临时文件,这些文件位于单独的目录中,该目录因操作系统而异,并且这些文件的名称是唯一的。在...
- 一文带您精通Python 集合(Set):8个不可不知的技巧及示例
-
在Python中,集合(Set)与列表(List)、字典(Dict)、元组(Tuple)一起构成了基本的数据结构。集合以其独特的无序性和元素唯一性,在处理数据时具有独特的优势。然而,很多人对集合的...
- 数据类型的"变形记":解锁Python数据处理效率的关键钥匙
-
在日常编程中,数据就像流动的河水,而数据类型就是塑造河道的模具。当我们从用户输入、文件读取或网络请求中获取数据时,往往需要像侦探一样验证它们的真实身份,再像魔术师一样将它们转换成需要的形态。这就是数据...
- 大学 Python 程序设计实验报告:基于组合数据类型
-
一、实验目的编写Python程序,实现对简单文本的处理,掌握列表、元组、字典等组合类型的应用。二、实验要求掌握字符串的输入和输出。掌握使用切片的方式访问字符串中的值。掌握常见的字符串内建函数的应用。...
你 发表评论:
欢迎- 一周热门
-
-
python 3.8调用dll - Could not find module 错误的解决方法
-
加密Python源码方案 PyArmor(python项目源码加密)
-
Python3.8如何安装Numpy(python3.6安装numpy)
-
大学生机械制图搜题软件?7个受欢迎的搜题分享了
-
编写一个自动生成双色球号码的 Python 小脚本
-
免费男女身高在线计算器,身高计算公式
-
将python文件打包成exe程序,复制到每台电脑都可以运行
-
Python学习入门教程,字符串函数扩充详解
-
Python数据分析实战-使用replace方法模糊匹配替换某列的值
-
Python进度条显示方案(python2 进度条)
-
- 最近发表
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)