2014-12-02 27 views
9

Poszukuję więc sposobu na stworzenie prostego Messagebox'a w Pythonie przy użyciu tylko natywnych bibliotek i natknąłem się na kilka postów, ale mianowicie this one, wykorzystując ccts do importowania win32.dll i wywołaj jego funkcję MessageboxA.Python MessageBox z ikonami za pomocą ctypów i windll

import ctypes # An included library with Python install. 
ctypes.windll.user32.MessageBoxA(0, "Your text", "Your title", 1) 

Całkiem fajne rzeczy, tak myślę.

--- Ale ---

Kiedy gdy spojrzeć na documentation for MessageboxA on Microsoft's site, okazuje się funkcja ta MessageBoxA może zrobić dużo więcej. Po prostu nie wiem, jak poprawnie przekazać parametry.

Próbuję znaleźć standardową metodę podniesienia skrzynki z ikoną w niej, np. Ikoną systemu lub ostrzeżeniem obok wiadomości. Dokumentacja Microsoftu wskazuje, że należy wprowadzić ten parametr do parametru uType, który jest ostatnim, ale nie mogłem tutaj dokonać żadnego postępu poza zmianą przycisków w skrzynce.

+0

Hey że jest cool =) – 101

Odpowiedz

9

po prostu LUB je razem

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) 

Mam wartości szesnastkowe z dokumentacji, którą powiązany

+0

doh! myśląc o drodze do tego. lol Wielkie dzięki Joran – MrBubbles

+1

Joran, czy możesz mi powiedzieć, jak odcyfrowałeś te wartości heksadecymalne? Wartości szesnastkowe, których używasz, wydają się być skróconą formą tego, co program microsoft pokazuje na ich stronie. Początkowo próbowałem przekazywać wartości heksadecymalne microsoft, jak wskazuje, ale nigdy nie działały. Pozdrawiam, działa, po prostu nie wiem, jak można uzyskać 0x30 z 0x00000030L, co jest wartością dokumentacji microsoft wskazuje na ikonę wykrzyknika – MrBubbles

+2

zer po lewej nie są częścią liczby np. W dziesiątym 97 jest taki sam jak 00097. ... równie dobrze mógłbym napisać 0x00000030 ... L oznacza po prostu 'long' jak w typie danych (jakakolwiek liczba zaczynająca się od' 0x' jest po prostu liczbą heksadecymalną) –