Python 如何指定使用ctypes MessageBoxW单击是/否时实际发生的情况?

Python 如何指定使用ctypes MessageBoxW单击是/否时实际发生的情况?,python,python-2.7,python-3.x,ctypes,Python,Python 2.7,Python 3.x,Ctypes,我看到很多人展示了这段代码,但是从来没有人具体说明过如何让Yes/No真正起作用。它们是按钮,它们就在那里,但是如何指定当您单击或时实际发生的情况?引用: 返回值 类型:int 如果消息框中有“取消”按钮,则函数返回 按下ESC键或取消键时的IDCANCEL值 按钮被选中。如果消息框中没有取消按钮,请按 ESC没有效果如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError如果函数 成功,返回值为以下菜单项值之一 您可以在“正式文档”链接下选中列出的值 示例代码类似于: de

我看到很多人展示了这段代码,但是从来没有人具体说明过如何让Yes/No真正起作用。它们是按钮,它们就在那里,但是如何指定当您单击或时实际发生的情况?

引用:

返回值

类型:int

如果消息框中有“取消”按钮,则函数返回 按下ESC键或取消键时的IDCANCEL值 按钮被选中。如果消息框中没有取消按钮,请按 ESC没有效果如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError如果函数 成功,返回值为以下菜单项值之一

您可以在“正式文档”链接下选中列出的值

示例代码类似于:

def addnewunit(title, text, style):
    ctypes.windll.user32.MessageBoxW(0, text, title, style)

使用正确的ctypes包装,类似这样的内容:

def addnewunit(title, text, style):
    ret_val = ctypes.windll.user32.MessageBoxW(0, text, title, style)
    if ret_val == 0:
        raise Exception('Oops')
    elif ret_val == 1:
        print "OK Clicked"
    ...  # additional conditional checks of ret_val may go here

有关utype参数的各种值,请参阅MessageBox。

其他答案显示返回值指示按下的按钮,但如果您不想查找所有常量值,请使用它,它已经为您包装了许多Windows API(中文演示,显示它正在调用Unicode API):


将答案设置为与命令相等,如下所示:

#coding:utf8
import win32api
import win32con
result = win32api.MessageBox(None,'你是美国人吗?','问题',win32con.MB_YESNO)
if result == win32con.IDYES:
    print('是')
else:
    print('不是')
那你就可以用

打印(答案)

查看用户选择的结果是多少


然后根据答案编号使用一个“如果”语句,让它做你想做的事。

一个小错误:IDOK=1Thanks@Pamela。固定的。
#coding:utf8
import win32api
import win32con
result = win32api.MessageBox(None,'你是美国人吗?','问题',win32con.MB_YESNO)
if result == win32con.IDYES:
    print('是')
else:
    print('不是')
import ctypes
answer = ctypes.windll.user32.MessageBoxW(0, "Message", "Title", 4)