사용자에게 알림을 제공하지만 창 전체 화면 모드 (경계선 없음)에서는 표시되지 않는 작은 앱을 작성하고 있습니다. 전체 화면으로 작동하지 않을 것으로 예상되지만 국경을 넘어서야한다고 생각했습니다.Python - 경계없는 창에서 Windows 토스트 알림 표시
나는 plyer, win10toast, notifu를 시도했지만 모두 결국 Shell_NotifyIcon 또는 IUserNotification을 사용하고 해당 모드에서 알림을 표시하지 못합니다.
나는 발견 한 다른 스 니펫을 기반으로 한이 스 니펫으로 놀아 왔지만 주사위는 사용하지 않았습니다.
import win32api, win32con, win32gui
import time
class Taskbar:
def __init__(self):
self.visible = 0
message_map = {
win32con.WM_DESTROY: self.onDestroy,
}
# Register the Window class.
wc = win32gui.WNDCLASS()
hinst = wc.hInstance = win32api.GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map
classAtom = win32gui.RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
exStyle = win32con.WS_EX_TOPMOST # win32con.WS_EX_TOOLWINDOW | win32con.WS_EX_TOPMOST #| win32con.WS_EX_NOACTIVATE
self.hwnd = win32gui.CreateWindowEx(exStyle, classAtom, "Taskbar Demo", style, \
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
0, 0, hinst, None)
win32gui.UpdateWindow(self.hwnd)
icon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
self.setIcon(icon)
self.show()
def setIcon(self, hicon, tooltip=None):
self.hicon = hicon
self.tooltip = tooltip
def showBaloon(self):
flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_INFO
nid = (self.hwnd, 0, flags, win32con.WM_USER + 20, self.hicon, "", "Balloon Message", 10, "Balloon",
win32gui.NIIF_INFO)
win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY, nid)
def show(self):
"""Display the taskbar icon"""
flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE
if self.tooltip is not None:
flags |= win32gui.NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER + 20, self.hicon, self.tooltip)
else:
nid = (self.hwnd, 0, flags, win32con.WM_USER + 20, self.hicon)
if self.visible:
self.hide()
win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid)
self.visible = 1
def hide(self):
"""Hide the taskbar icon"""
if self.visible:
nid = (self.hwnd, 0)
win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid)
self.visible = 0
def onDestroy(self, hwnd, msg, wparam, lparam):
self.hide()
win32gui.PostQuitMessage(0) # Terminate the app.
t = Taskbar()
time.sleep(3)
t.showBaloon()
time.sleep(3)
나는 알림 창 (즉 WS_EX_TOPMOST, WS_EX_TOOLWINDOW, WS_EX_NOACTIVATE)에 대해 서로 다른 확장 윈도우 스타일을 사용하여 시도하지만 어떤 영향을 미칠 것 같지 않습니다.
알림과 함께이를 수행 할 수있는 방법이 있습니까? 전체 화면 모드가 아니기 때문에 표시하는 것이 간단하지 않아야합니까?