【问题标题】:Create new screen buffer with win32api in Python在 Python 中使用 win32api 创建新的屏幕缓冲区
【发布时间】:2015-10-23 16:07:27
【问题描述】:

我想使用 Python 3.4 在 Windows 7 中的第二个屏幕上绘制特定图像。我可以使用 pywin32 获取句柄和屏幕尺寸:

import win32api
screens = win32api.EnumDisplayMonitors()

我得到了屏幕的句柄和尺寸:

[(<PyHANDLE:393217>, <PyHANDLE:0>, (0, 0, 1280, 720)),
(<PyHANDLE:7472233>, <PyHANDLE:0>, (1920, 0, 3360, 900))]

我想用我的屏幕尺寸创建一个新缓冲区,将我的数据/图像写入新缓冲区并将其设置为活动屏幕。

我认为我不能使用 pywin32 模块来做到这一点,我想通过 ctypes 访问 Windows API。但是我找不到这里描述的 API 的功能https://msdn.microsoft.com/en-us/library/windows/desktop/ms685032(v=vs.85).aspx

我该怎么做?谢谢!

【问题讨论】:

  • 您已链接到适用于控制台窗口文本缓冲区的控制台函数 - 因此没有绘图或图形。通常你会在你创建的窗口中绘图,请说明你想要实现的目标。
  • 接受的答案本身与您的屏幕无关。控制台屏幕缓冲区是控制台窗口中 unicode 文本的输出缓冲区,文本背景和前景仅限于 16 种颜色的调色板。如果您正在寻找文字艺术,使用ANSICON 会更简单,它挂钩 Windows API 函数以支持 ANSI 转义序列。
  • 我已经意识到我的做法是错误的。我想控制整个第二个屏幕,没有窗口或任何东西。我希望能够在屏幕上绘制 8 位图像,即我想为屏幕上的每个像素指定一个 8 位值。注意:我所指的屏幕是通过 HDMI 连接到计算机的仪器,本质上是第二个屏幕,需要具有适当尺寸的图像。
  • 我可以使用DirectPythondirectpython11.sourceforge.net/docs/index.html直接在屏幕上绘图吗?

标签: python winapi ctypes pywin32


【解决方案1】:

可以使用win32console模块:

=> python
Python 3.4.3 |Anaconda 2.3.0 (64-bit)| (default, Mar  6 2015, 12:06:10) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32console
>>> help(win32console.CreateConsoleScreenBuffer)
Help on built-in function CreateConsoleScreenBuffer in module win32console:

CreateConsoleScreenBuffer(...)
    Creates a new console screen buffer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2016-09-10
    相关资源
    最近更新 更多