2014-12-02 276 views
9

所以,我正在尋找一種方法來使用本地庫在Python中創建一個簡單的Messagebox,並且遇到了幾個帖子,但this one,利用ctypes導入win32.dll並調用它的MessageboxA函數。Python MessageBox與使用ctypes和windll的圖標

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

非常酷的東西,我認爲。

---但---

當在看documentation for MessageboxA on Microsoft's site我,原來這MessageboxA功能可以做很多更多。我只是不知道如何正確傳遞參數。

我試圖找出標準方法來提升帶有圖標的消息框,比如消息旁邊的系統手動或警告圖標。微軟的文檔表明應該把這個輸入到最後一個參數uType中,但是除了改變消息框的按鈕之外,我還沒有能夠取得任何進展。

+0

嘿,這是很酷=) – 101 2014-12-03 00:38:45

回答

9

你只是OR在一起

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) 

我從你鏈接的文檔中的十六進制值

+0

衛生署!想着wayyyyyyy來努力解決這個問題。哈哈非常感謝喬蘭 – MrBubbles 2014-12-02 19:54:25

+1

喬蘭,你能告訴我你是如何破譯這些十六進制值是什麼?您使用的十六進制值似乎是微軟在其網站上顯示的縮略形式。我最初嘗試傳遞十六進制值微軟表示,因爲他們是,但他們從來沒有工作。你的工作,我只是不知道你是如何得到從0x00000030L 0x30,這是微軟的文檔指示感嘆號圖標的值 – MrBubbles 2014-12-03 00:55:00

+2

左邊的零不是數字的一部分,例如在十進制97中是一樣的00097。 ..我可以很容易地寫成0x00000030 ... L只是意味着數據類型中的'long'(任何以'0x'開頭的數字都只是一個十六進制數) – 2014-12-03 01:05:34