def __init__(self, title, message, app_name, app_icon='', timeout=10, **kwargs): ''' app_icon if given is a icon file. ''' wnd_class_ex = win_api_defs.get_WNDCLASSEXW() class_name = 'PlyerTaskbar' + str(WindowsBalloonTip._get_unique_id()) if PY2: class_name = class_name.decode('utf8') wnd_class_ex.lpszClassName = class_name # keep ref to it as long as window is alive wnd_class_ex.lpfnWndProc =\ win_api_defs.WindowProc(win_api_defs.DefWindowProcW) wnd_class_ex.hInstance = win_api_defs.GetModuleHandleW(None) if wnd_class_ex.hInstance is None: raise Exception('Could not get windows module instance.') class_atom = win_api_defs.RegisterClassExW(wnd_class_ex) if class_atom == 0: raise Exception('Could not register the PlyerTaskbar class.') self._class_atom = class_atom self._wnd_class_ex = wnd_class_ex # create window self._hwnd = win_api_defs.CreateWindowExW( 0, class_atom, '', WS_OVERLAPPED, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, None, None, wnd_class_ex.hInstance, None ) if self._hwnd is None: raise Exception('Could not get create window.') win_api_defs.UpdateWindow(self._hwnd) # load icon if app_icon: icon_flags = LR_LOADFROMFILE | LR_DEFAULTSIZE hicon = win_api_defs.LoadImageW(None, app_icon, IMAGE_ICON, 0, 0, icon_flags) if hicon is None: raise Exception('Could not load icon {}'. format(icon_path_name)) self._balloon_icon = self._hicon = hicon else: self._hicon = win_api_defs.LoadIconW( None, ctypes.cast(IDI_APPLICATION, win_api_defs.LPCWSTR) ) self.notify(title, message, app_name) if timeout: time.sleep(timeout)
def __init__(self, title, message, app_name, app_icon='', timeout=10, **kwargs): ''' The app_icon parameter, if given, is an .ICO file. ''' wnd_class_ex = win_api_defs.get_WNDCLASSEXW() class_name = 'PlyerTaskbar' + str(WindowsBalloonTip._get_unique_id()) wnd_class_ex.lpszClassName = class_name # keep ref to it as long as window is alive wnd_class_ex.lpfnWndProc = win_api_defs.WindowProc( win_api_defs.DefWindowProcW) wnd_class_ex.hInstance = win_api_defs.GetModuleHandleW(None) if wnd_class_ex.hInstance is None: raise Exception('Could not get windows module instance.') class_atom = win_api_defs.RegisterClassExW(wnd_class_ex) if class_atom == 0: raise Exception('Could not register the PlyerTaskbar class.') self._class_atom = class_atom self._wnd_class_ex = wnd_class_ex # create window self._hwnd = win_api_defs.CreateWindowExW( # dwExStyle, lpClassName, lpWindowName, dwStyle 0, class_atom, '', WS_OVERLAPPED, # x, y, nWidth, nHeight 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, # hWndParent, hMenu, hInstance, lpParam None, None, wnd_class_ex.hInstance, None) if self._hwnd is None: raise Exception('Could not get create window.') win_api_defs.UpdateWindow(self._hwnd) # load .ICO file for as balloon tip and tray icon if app_icon: icon_flags = LR_LOADFROMFILE | LR_DEFAULTSIZE hicon = win_api_defs.LoadImageW(None, app_icon, IMAGE_ICON, 0, 0, icon_flags) if hicon is None: raise Exception('Could not load icon {}'.format(app_icon)) self._balloon_icon = self._hicon = hicon else: self._hicon = win_api_defs.LoadIconW( None, ctypes.cast(IDI_APPLICATION, win_api_defs.LPCWSTR)) # show the notification self.notify(title, message, app_name) if timeout: time.sleep(timeout)