2014-12-02 23 views
9

Quindi, sto cercando un modo per creare un semplice Messagebox in Python usando solo le librerie native e ho trovato diversi post, ma precisamente this one, sfruttando i ctypes per importare win32.dll e chiama la sua funzione MessageboxA.MessageBox Python con icone che usano ctypes e windll

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

Cose davvero interessanti, penso.

--- --- Ma

Quando io quando guardo il documentation for MessageboxA on Microsoft's site, si rivela tale funzione MessageBoxA può fare molto di più. Non so come passare correttamente i parametri.

Sto cercando di capire il metodo standard per sollevare la messagebox con un'icona al suo interno, come l'icona di sistema o di avvertenza accanto al messaggio. La documentazione di Microsoft indica che si dovrebbe inserire questo nel parametro uType, che è l'ultimo, ma non sono stato in grado di fare alcun progresso qui oltre a cambiare i pulsanti della messagebox.

+0

Hey che è cool =) – 101

risposta

9

basta O insieme

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) 

ho ottenuto i valori esadecimali da documentazione si è collegato al

+0

doh! pensando molto a questo. lol Grazie mille Joran – MrBubbles

+1

Joran, puoi dirmi come hai decifrato quali erano quei valori esadecimali? I valori esadecimali che stai utilizzando sembrano essere una forma abbreviata di ciò che Microsoft mostra sul loro sito. Inizialmente ho provato a passare i valori esadecimali che microsoft indicava com'erano, ma non hanno mai funzionato. I tuoi lavori funzionano, non so come hai ottenuto 0x30 da 0x00000030L, che è il valore che la documentazione di microsoft indica per l'icona punto esclamativo – MrBubbles

+2

zeri a sinistra non fanno parte di un numero es. In decimale 97 è uguale a 00097. .. Avrei potuto scrivere altrettanto facilmente 0x00000030 ... L significa semplicemente 'lungo' come nel tipo di dati (qualsiasi numero che inizia con' 0x' è solo un numero esadecimale) –