2017-05-19 18 views
0

私は通知をユーザに提供しますが、ウィンドウ付きフルスクリーンモード(ボーダレス)では表示されないようです。フルスクリーンで動作するとは思っていませんが、ボーダーレスで見せるべきだと思いました。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)に別の拡張ウィンドウスタイルを使用してみましたが、何の影響も与えていないようです。

通知でこれを行う方法はありますか?フルスクリーンモードではないので、簡単に表示してはいけませんか?

答えて

0

Windowsの通知では不可能だと思われます。私がどんな旗を投げていても、通知はそれ自身のフラグを追加して、おそらく望ましいウィンドウの振る舞いを崩してしまいます。とにかく私はその仕事をする方法を見つけることができませんでした。

のみのオプションがあるように見える:(1)と同じ

  • ...設計、 アニメーション、複数のインスタンスの振る舞いを扱う、などを伴う、適切なフラグでのCreateWindowExを使用して

    1. が、いくつかのDirectXを使用して/オーバーレイ用のOpenGLライブラリ(おそらくフルスクリーンで動作します)
    2. このドキュメントについてのアイデアはありませんが、特定のプロセスにフックしてウィンドウを追加することでオーバーレイが行われていると推測しています。それはフォアグラウンドとして設定する権限を持っているので、そのプロセスのウィンドウ内で一番上にとどまることができますか?

    私は不思議な人たちのために、私は(1)か、むしろ怒っていました。これは、gntpというlibで簡単に送信できる通知メッセージを待ち受けます。そうすれば、私はスタイリッシュなカスタマイズ可能な通知を簡単に得ることができます。

  • 関連する問題