def addnewunit(title, text, style):
ctypes.windll.user32.MessageBoxW(0, text, title, style)
我见过很多人都展示了这段代码,但是没有人说过如何真正做出是/否的工作。它们是按钮,它们在那里,但是如何指定单击或者?
时实际发生的情况答案 0 :(得分:4)
使用正确的ctypes包装这样的东西:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import ctypes
from ctypes.wintypes import HWND, LPWSTR, UINT
_user32 = ctypes.WinDLL('user32', use_last_error=True)
_MessageBoxW = _user32.MessageBoxW
_MessageBoxW.restype = UINT # default return type is c_int, this is not required
_MessageBoxW.argtypes = (HWND, LPWSTR, LPWSTR, UINT)
MB_OK = 0
MB_OKCANCEL = 1
MB_YESNOCANCEL = 3
MB_YESNO = 4
IDOK = 0
IDCANCEL = 2
IDABORT = 3
IDYES = 6
IDNO = 7
def MessageBoxW(hwnd, text, caption, utype):
result = _MessageBoxW(hwnd, text, caption, utype)
if not result:
raise ctypes.WinError(ctypes.get_last_error())
return result
def main():
try:
result = MessageBoxW(None, "text", "caption", MB_YESNOCANCEL)
if result == IDYES:
print("user pressed ok")
elif result == IDNO:
print("user pressed no")
elif result == IDCANCEL:
print("user pressed cancel")
else:
print("unknown return code")
except WindowsError as win_err:
print("An error occurred:\n{}".format(win_err))
if __name__ == "__main__":
main()
有关utype参数的各种值,请参阅MessageBox的the documentation。
答案 1 :(得分:1)
返回值
输入:int
如果消息框中有“取消”按钮,则该函数返回 如果按下ESC键或取消,则为IDCANCEL值 按钮被选中。如果消息框中没有“取消”按钮,请按 ESC无效。 如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。 如果功能 成功后,返回值是以下菜单项值之一
您可以在官方文档链接下查看列出的值。
示例代码如下:
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
答案 2 :(得分:1)
您将答案设置为等于命令,如下所示:
import ctypes
answer = ctypes.windll.user32.MessageBoxW(0, "Message", "Title", 4)
然后您就可以使用
print(answer)
查看用户选择的结果是多少。
然后根据答案编号使用“ If”语句使它执行您想要的操作。
答案 3 :(得分:0)
其他答案显示返回值表示按下了什么按钮,但是如果您不想查找所有常量值,请使用pywin32,它已经包含了大部分Windows API(演示)在中文中显示它正在调用Unicode API):
#coding:utf8
import win32api
import win32con
result = win32api.MessageBox(None,'你是美国人吗?','问题',win32con.MB_YESNO)
if result == win32con.IDYES:
print('是')
else:
print('不是')