ctypes 包装“MessageBoxA”示例在 python33 中不起作用

2024-04-24

此示例位于 python 3.3.2 文档中:

http://docs.python.org/3/library/ctypes.html?highlight=ctypes#ctypes http://docs.python.org/3/library/ctypes.html?highlight=ctypes#ctypes

但是:当我在解释器中尝试时,出现错误。

我使用 Windows 7 32 python 3.3.2。

请帮忙。

from ctypes import c_int, WINFUNCTYPE, windll
from ctypes.wintypes import HWND, LPCSTR, UINT
prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT)
paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0)
MessageBox = prototype(("MessageBoxA", windll.user32), paramflags)
MessageBox()
MessageBox(text="Spam, spam, spam")
MessageBox(flags=2, text="foo bar")

error message:
Traceback (most recent call last):
File "<string>", line 250, in run_nodebug
File "<g1>", line 7, in <module>
ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type

猜测这是文档中的错误。 ;-)

在 Python 3 中,默认情况下所有字符串都是 Unicode,但示例是调用 ANSIMessageBoxA函数,不MessageBoxWUnicode 版本。看16.17.1.2。从加载的 dll 访问函数 http://docs.python.org/3/library/ctypes.html?highlight=ctypes#accessing-functions-from-loaded-dlls in thectypes文档。

So forMessageBoxA在示例中,您可以通过调用将函数的输入字符串参数编码为所需的内容来使其工作locale.getpreferredencoding():

from ctypes import c_int, WINFUNCTYPE, windll
from ctypes.wintypes import HWND, LPCSTR, UINT
import locale
preferred_encoding = locale.getpreferredencoding(False)
prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT)
paramflags = ((1, "hwnd", 0), (1, "text", "Hi".encode(preferred_encoding)),
                (1, "caption", None), (1, "flags", 0))
MessageBox = prototype(("MessageBoxA", windll.user32), paramflags)

MessageBox()
MessageBox(text="Spam, spam, spam".encode(preferred_encoding))
MessageBox(flags=2, text="foo bar".encode(preferred_encoding))

使用MessageBoxW支持“宽”Unicode 字符串参数的 Windows 函数(LPCWSTR代替LPCSTR)使得几乎每次调用都不需要对它们进行显式编码。此外,我将用命名常量替换示例中的大部分“幻数”:

from ctypes import c_int, WINFUNCTYPE, windll
from ctypes.wintypes import HWND, LPCWSTR, UINT
import win32con  # contains Win32 constants pulled from the C header files
INPUT_PARM, OUTPUT_PARAM, INPUT_PARM_DEFAULT_ZERO = 1, 2, 4
prototype = WINFUNCTYPE(c_int, HWND, LPCWSTR, LPCWSTR, UINT)
paramflags = ((INPUT_PARM, "hwnd", 0),
              (INPUT_PARM, "text", "Hi"),
              (INPUT_PARM, "caption", None),
              (INPUT_PARM, "flags", win32con.MB_HELP))
MessageBox = prototype(("MessageBoxW", windll.user32), paramflags)

MessageBox()
MessageBox(text="Spam, spam, spam")
MessageBox(flags=win32con.MB_ABORTRETRYIGNORE, text="foo bar")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ctypes 包装“MessageBoxA”示例在 python33 中不起作用 的相关文章

  • 从 1D 列表创建 2D 列表

    我对 Python 有点陌生 我想将一维列表转换为二维列表 给定width and length这个的matrix 说我有一个list 0 1 2 3 我想做一个2 by 2该列表的矩阵 我怎样才能得到matrix 0 1 2 3 widt
  • 如何从网站中抓取动态内容?

    所以我使用 scrapy 从亚马逊图书部分抓取数据 但不知何故我知道它有一些动态数据 我想知道如何从网站中提取动态数据 到目前为止我已经尝试过以下方法 import scrapy from items import AmazonsItem
  • 如何检查当前日期并移至下一个日期

    我遇到了一个我似乎无法理解的 python 问题 不确定是否需要使用 if 语句 但因为我是 python 新手 所以我实际上不确定如何编写这个小问题 事实上 这就是我遇到的问题 对于出发日历 我希望 python 能够执行以下操作 查看
  • 如何获取右侧数据框中不在左侧数据框中的数据

    我有两个数据帧 我正在尝试输出其中一个数据帧中的数据 而不是另一个数据帧中的数据 我可以使用第一个数据帧中的数据 但不能使用第二个数据帧中的数据 only new old merge new outer on Employee ID Ben
  • 导入错误:无法导入名称“PandasError”

    我对在 Mac 上运行的 Python 3x 非常陌生 当前使用 python 金融的 senddex 教程 尝试运行以下脚本 import datetime as dt import matplotlib pyplot as plt fr
  • Python3 类型错误:replace() 参数 1 必须是 str,而不是 int

    我已经尝试了几天让这段代码在 MacOS 上运行 但没有成功 你能看一下我错过了什么吗 运行 python 3 6 我已经上传了整个代码 多谢 usr bin env python3 from future import print fun
  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • 如何使用 QWebView 显示 html。 Python?

    如何在控制台中显示 HTML 格式的网页 import sys from PyQt4 QtGui import QApplication from PyQt4 QtCore import QUrl from PyQt4 QtWebKit i
  • Python gdal 未定义符号 GDALRasterBandGetVirtualMem

    我正在尝试使用Python GDAL 绑定 https pypi python org pypi GDAL 通过 pip 天真地安装绑定时 安装失败并显示错误 VSIFTruncateL 未在此范围内声明 https gis stackex
  • 如果使用 unicode 字符,则从数据库中进行 SELECT 会出现问题

    我在用着latest带DatabaseLibrary的python和机器人框架版本 https franz see github io Robotframework Database Library api 1 0 1 DatabaseLi
  • Python 排列(包括子字符串)

    我遇到过这个帖子 如何在Python中生成列表的所有排列 https stackoverflow com questions 104420 how to generate all permutations of a list in pyth
  • 将 pandas 多索引数据帧转换为嵌套字典

    我有一个 pandas 多索引数据框 我试图将其输出为嵌套字典 create the dataset data clump thickness 0 0 274 0 0 1 19 0 1 0 67 0 1 1 12 0 2 0 83 0 2
  • Selenium 上的切换窗口

    我在 Python 中使用 Selenium 和 PhantomJS 我需要打开一个新窗口并控制它 出于测试目的 我这样做 from selenium import webdriver driver webdriver PhantomJS
  • 带有redirect_uri的social-auth-app-django Facebook后端状态

    我知道我的问题听起来像是重复的 但我到处寻找但没有找到任何解决方案 我正在努力为我的 django web 应用程序实现社交登录 到目前为止 谷歌 推特和雅虎登录均按预期工作 但facebook总是给出以下错误 URL 被阻止 此重定向失败
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 如何更改Python使用的SQLite版本?

    我在 Debian 9 12 上安装了 Python 3 8 和 SQLite 3 16 2 并且需要升级到较新版本的 SQLite 我已经下载并编译了 SQLite 网站上提供的合并 并将其放入 usr bin 所以当我这样做时 sqli
  • Python:如何对数组 X 进行排序,但对 Y 进行相同的相对排序?

    例如 X 5 6 2 3 1 Y 7 2 3 4 6 我对X进行排序 X 1 2 3 5 6 但我希望对 Y 应用相同的相对排序 以便数字保持与以前相同的相对位置 Y 6 3 4 7 2 我希望这是有道理的 通常 你会做一个zip sort
  • 使用条件在 pandas 数据框中生成新列

    我有一个 pandas 数据框 如下所示 portion used 0 1 1 0 1 2 0 3 2 3 0 0 3 4 0 8 我想根据以下内容创建一个新专栏used列 以便df看起来像这样 portion used alert 0 1
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 在Python中通过sys.stdout写入unicode字符串

    暂时假设一个人无法使用print 从而享受自动编码检测的好处 所以这给我们留下了sys stdout 然而 sys stdout太蠢了不做任何合理的编码 http bugs python org issue4947 现在人们阅读 Pytho

随机推荐

  • 如何使 XML 字符串加粗、下划线等?

    http docs fusioncharts com charts contents Styles Font html http docs fusioncharts com charts contents Styles Font html
  • 将 UTC 日期转换为本地日期

    我正在将纪元时间 UTC 格式 转换为如下所示的格式 现在我尝试了不同的答案来转换UTCDate from UTC到当地时间 但我没有得到当地时间 任何帮助 将不胜感激 String epochTime 1436831775043 Date
  • 如何使用 Perl 的 LWP 提取网站的 XML 并保存在文件中?

    如何从网站提取信息 http tv yahoo com listings http tv yahoo com listings 然后创建一个 XML 文件 我想保存它以便稍后解析并使用 JavaScript 显示信息 我对 Perl 很陌生
  • mysql 中临时表的旧代码 TYPE=HEAP 错误

    我有一个可以运行的旧代码 CREATE TEMPORARY TABLE temp tree id INTEGER parent id INTEGER type HEAP 现在我有 mysql 5 并且这段代码不起作用 在内存中创建临时表的正
  • CreateProcess错误=740,请求的操作需要提升

    我有一个定期更新的网络小程序 我最终决定制作一个更新程序 但是 当我用 java 下载更新时 它下载得很好 但是 当我尝试使用以下命令解压 运行更新时Runtime getRuntime exec pathToFile I get Crea
  • 如何使用 Perl 提取 HTML 标题?

    有没有办法使用 Perl 提取 HTML 页面标题 我知道它可以在表单提交期间作为隐藏变量传递 然后以这种方式在 Perl 中检索 但我想知道是否有一种方法可以在不提交的情况下执行此操作 比如说 我有一个这样的 HTML 页面 然后在 Pe
  • 打印的条形码不清晰 (WPF)

    我的应用程序中需要条形码打印模块 但无法弄清楚如何正确打印条形码 看来分辨率太低了 我在用着禅宗条形码 https barcoderender codeplex com 正如您在所附照片中所看到的 顶部条形码是从打印机软件打印的 证明打印机
  • 注册不起作用,注册未定义错误 React Native

    我刚刚从 Udemy 购买了 React Native 的课程 Stephen Grider 是该课程的作者 所以基本上我是在他打字的时候和他一起打字的 但不幸的是我在跟踪应用程序的注册过程中陷入了错误 每当我在输入电子邮件和密码后单击 注
  • 如何在列表/字符串/范围中查找指定项目后面的特定项目?

    给定一个input任何类型的序列 列表 字符串 范围 如何找到下一个项目input遵循指定项目 另外 如果该项目不存在或后面没有任何内容 该函数应该返回None 我尝试将输入类型转换为列表 然后从列表中查找位置 然后获取下一个项目 但这并不
  • 如何使用 JDBC 进行扩展插入而不构建字符串?

    我有一个应用程序可以解析日志文件并将大量数据插入数据库 它是用 Java 编写的 并通过 JDBC 与 MySQL 数据库通信 我尝试了不同的插入数据的方法 以找到适合我的特定用例的最快方法 目前看来表现最好的方法是发出扩展插入 例如 具有
  • 在 Android 锁屏上显示自定义信息 [重复]

    这个问题在这里已经有答案了 我想自定义锁屏 The default Lock screen is like this 我想修改锁定屏幕的这一部分并让所有其他内容保持不变 当用户锁定手机时 它应该在红色框中显示自定义信息 到目前为止 我已经看
  • mockk java.lang.AssertionError:验证失败:调用 1 of 1:未调用

    我正在使用模拟运行单元测试 当尝试验证方法时 我收到断言错误 并且不知道如何运行测试 这是我的测试方法 get Rule var rule TestRule InstantTaskExecutorRule val autoDownloads
  • Django 中的内联表单集 - 删除某些字段

    我需要创建一个内联表单集 a 排除一些字段MyModel完全显示出来 b 显示一些字段MyModel但阻止它们被编辑 我尝试使用下面的代码 使用values 为了将查询集过滤为我想要返回的值 然而 这失败了 有人有什么想法吗 class P
  • DataDog 事件会自动恢复

    我创建了一个事件监视器 用于捕获有错误的事件 并通过特殊的信使通知有关警报的信息 一切都很顺利 但我注意到此类警报会自行自动恢复一段时间 As I understand it is because of this parameter 因此
  • VB.NET中获取CheckBoxList的所有选中值

    我用过ASPCheckBoxList控制 现在我想要的是在VB代码中获取所有选定的值 HTML
  • 查找包含相似字符串的sql记录

    我的下表有 2 列 ID 和标题 其中包含超过 500 000 条记录 例如 ID Title 1 Aliens 2 Aliens 1986 3 Aliens vs Predator 4 Aliens 2 5 The making of A
  • 为什么java中的嵌套类与C#中的嵌套类在以下方面有所不同?

    我发现了一些类似的帖子 但找不到明确解释这一点的答案 我已经执行了类的嵌套 即 内部 类存在于 外部 类中 并尝试实例化内部类 这就是我遇到的场景 如果是 C class outside public class inside public
  • 龙目岛和吉斯注射液

    我是 lombok 和 guice 注入的新手 我可以了解一般概念 但我遇到了一些我不理解的代码 并且由于语法而无法搜索 以下是代码 有人可以帮助我理解吗 import com google inject Inject import lom
  • 如何获取 mp3 文件的封面?

    我有一个 mp3 文件 当我用 Windows Media Player 阅读它时 它有专辑的封面 所以我想知道是否有办法在 javascript 或 jQuery 中获取该封面 请访问以下网址了解更多内容 http www richard
  • ctypes 包装“MessageBoxA”示例在 python33 中不起作用

    此示例位于 python 3 3 2 文档中 http docs python org 3 library ctypes html highlight ctypes ctypes http docs python org 3 library