def addnewunit(title, text, style): ctypes.windll.user32.MessageBoxW(0, text, title, style)
Ive seen a lot of people show this code, however nobody has ever specified how to actually make the Yes/No work. Theyre buttons, and they are there, however how does one specify what actually happens when you click either or?
Advertisement
Answer
Something like this with proper ctypes wrapping:
#!/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 = 1 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()
See the documentation for MessageBox for the various value of the utype argument.