Включить липкое поведение уведомлений приложения Electron на платформе Windows

Я хочу добиться липкого поведения уведомлений в электронном настольном приложении, пока пользователь не нажмет на само уведомление.

Я использую node-notifier для достижения такого поведения в соответствии с этой документацией и использую ngx-Electron для использования ElectronService для импорта файла main.js в файл угловых компонентов.

Вот мой файл main.js:

const notifier = require('node-notifier')
exports.notifier = (msg) =>  {
  notifier.notify({
  title: 'Notify Me',
  message: msg,
  wait: true,
  timeout: 1500000,
  sound: true,
  icon:  './assets/images/logo.png'
});

app.component.ts:

import {ElectronService} from 'ngx-electron';
@Component({
  selector: 'app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  public main_js : any;

  constructor(private _electronService: ElectronService ) { 
    this.main_js  = this._electronService.remote.require("./main.js");
    this.getTasks();
  }

  getTasks() {
    var message = 'New Task Assigned!!!';
    this.main_js.notifier(message);
  }
}

Электронное приложение уведомлений:

electron_notification

В настоящее время я проверяю это поведение уведомлений на платформе Windows, и уведомление остается липким до тех пор, пока пользователь не предпримет никаких действий, включая нажатие клавиш на клавиатуре или любое движение мыши.

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

1 ответ

Решение

Ну, я не могу добиться липкого поведения уведомлений в электронном. Тем не менее, я нашел отличную альтернативу для того, что является комбинацией как Electron_Tray, так и Node-Notifier Balloon_Notifications.

Самое приятное, что он работает как на платформе Windows, так и на платформе Linux, как шарм, который в конечном итоге дает кроссплатформенную функциональность. Я еще не тестировал его на Mac, возможно, он там тоже работает. Вот мой проверенный код:

app.component.ts

import {ElectronService} from 'ngx-electron';
  @Component({
    selector: 'app',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
  })
  export class AppComponent implements OnInit {
    public main_js : any;

    constructor(private _electronService: ElectronService ) {
      this.main_js  = this._electronService.remote.require("./main.js");
      this.getTasks();
    }

    getTasks() {
      var message = 'New Task Assigned!!!';
      this.main_js.notifier(message);
  }
}

main.js

let tray = null

function createWindow () {
  win = new BrowserWindow({
    width: 800,
    height: 600,
    icon: path.join(__dirname, 'dist/assets/images/logo.png')
  })

  // +++++++  TRAY NOTIFICATIONS  +++++++++ //
  var icon_tray = path.join(__dirname,'dist','assets','images','logo.png');

  tray = new Tray(icon_tray)

  const trayMenuTemplate = [
  {
    label: 'Maximize',
    click: function () {
      //For Maximizing the Window
      if(!win.isVisible()) { win.show() }
    }
  },

  {
    label: 'Minimize',
    click: function () {
      //For Minimizing the Window
      if(win.isVisible()) { win.hide() }
    }
  }]

  tray.setToolTip('I am Notifier!!!')
  let trayMenu = Menu.buildFromTemplate(trayMenuTemplate)
  tray.setContextMenu(trayMenu)
  tray.displayBalloon({
    title: 'Notifier Realm',
    content: 'Greetings!!!',
    icon: icon_tray
  });

  tray.on('click', () => {
    win.isVisible() ? win.hide() : win.show()
  })
}

exports.notifier = (msg) =>  {
// pops out the app window if minimized and show the notification 
  if(win.isVisible()){
    // win.hide()
  } else {
    win.show()
  }
  if(msg != undefined) {
    notifier.notify({
      title: 'Nethues Notify',
      message: msg,
      wait: true,
      icon:  './assets/images/logo.png'
    });
  }
}

Теперь, когда окно приложения свернуто и новая задача назначена другим пользователем, окно появляется над всеми приложениями (что бы ни открывалось на вашем экране) и отображает уведомление о новой назначенной задаче для пользователя.

Другие вопросы по тегам