Python MessageBox with Icons using ctypes and windll
you just OR them together
import ctypes
MB_OK = 0x0
MB_OKCXL = 0x01
MB_YESNOCXL = 0x03
MB_YESNO = 0x04
MB_HELP = 0x4000
ICON_EXLAIM=0x30
ICON_INFO = 0x40
ICON_STOP = 0x10
result = ctypes.windll.user32.MessageBoxA(0, "Your text?", "Your title", MB_HELP| MB_YESNO | ICON_STOP)
I got the hex values from the documentation you linked to
Related videos on Youtube
MrBubbles
GIS Analyst & Developer specializing in ESRI Products and Services.
Updated on December 03, 2020Comments
-
MrBubbles over 3 years
So, I'm looking for a way to create a simple Messagebox in Python using just the native libraries and came across several posts, but namely this one, leveraging ctypes to import the win32.dll and call its MessageboxA function.
import ctypes # An included library with Python install. ctypes.windll.user32.MessageBoxA(0, "Your text", "Your title", 1)
Pretty cool stuff, I think.
--- But ---
When I when to look at the documentation for MessageboxA on Microsoft's site, turns out this MessageboxA function can do a whole lot more. I just don't know how to properly pass the parameters in.
I'm trying to figure out the standard method for raising the messagebox with an icon in it, like the systemhand or warning icon beside the message. Microsoft's documentation indicates one should enter this into the uType parameter, which is the last one, but I haven't been able to make any progress here other than changing the messagebox's buttons.
-
MrBubbles over 9 yearsdoh! thinking wayyyyyyy to hard about this. lol Thanks so much Joran
-
MrBubbles over 9 yearsJoran, can you tell me how you deciphered what those hex values were? The hex values you are using seem to be an abbreviated form of what microsoft shows on their site. I originally tried passing in the hex values microsoft indicates as they were, but they never worked. Yours do work, I just don't know how you got to 0x30 from 0x00000030L, which is the value microsoft's documentation indicates for the exclamation icon
-
Joran Beasley over 9 yearszeros on the left are not part of a number eg in decimal 97 is the same as 00097 ... I could have just as easily written 0x00000030 ... L just means
long
as in the datatype (any number that starts with0x
is just a hex number) -
Mojimi almost 7 yearsWhat is the reasoning that OR is what groups them together?
-
Joran Beasley almost 7 yearsI dont understand your question? thats how you always combine integer flags in every example of anything ive ever seen ... I guess what informs it is my knowledge that when some one says "combine these integers" I know they mean
or
them together -
Mojimi almost 7 years@JoranBeasley Well if you say so, I just never even heard of "combining integers"
-
Joran Beasley almost 7 yearsits very common in C/C++ ... much less so in python
-
Tiger-222 almost 5 yearsI would also use
MessageBoxW()
to deal correctly with unicode.