2016-04-06 2 views
1

я уже знаю, как сделать MessageBox на Python:Как сделать автоматическое закрытие сообщений через несколько секунд Python?

import ctypes 

ctypes.windll.user32.MessageBoxW(0, 'test', "Reminding", 0) 

Однако, я хочу, чтобы это было закрыто по себе через несколько секунд после того, как он показывает вверх.

Есть ли способ реализовать это?

код псевдопользователей:

def AutoCloseMessageBoxW(text, title, close_until_seconds) 

Я нашел много способов, чтобы реализовать это на другом языке, таких как C# и Java.

Но я просто не могу найти способ реализовать его с помощью Python.

+0

Стандартное окно сообщений Windows, которое вы вызываете с помощью 'user32', не имеет встроенного механизма самозакрывания. Если C# и Java позволяют это, это потому, что они создали собственную реализацию окна сообщений, которое работает по-разному. –

ответ

-1
import ctypes 
import threading 
import time 
#ctypes.windll.user32.MessageBoxA(0, 'test', "Reminding", 0) 

def worker(title,close_until_seconds): 
    time.sleep(close_until_seconds) 
    wd=ctypes.windll.user32.FindWindowA(0,title) 
    ctypes.windll.user32.SendMessageA(wd,0x0010,0,0) 
    return 

def AutoCloseMessageBoxW(text, title, close_until_seconds): 
    t = threading.Thread(target=worker,args=(title,close_until_seconds)) 
    t.start() 
    ctypes.windll.user32.MessageBoxA(0, text, title, 0) 


AutoCloseMessageBoxW('112','TEST_CLOSE',3) 
+0

Дампы кода, хотя они могут предоставить решение, могут быть неясны для кого-то, кто пытается учиться у них. Можете ли вы в нескольких словах описать ключевые элементы вашего подхода и как/почему это работает? – Reti43

+0

Очень опасно иметь поток, который убивает окно по своему названию, так как названия не гарантируются как уникальные. В частности, если вы получите второе окно сообщения после того, как пользователь отклонил первый. –

Смежные вопросы