예제 #1
0
    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)
예제 #2
0
    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)