Включить липкое поведение уведомлений приложения 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);
}
}
Электронное приложение уведомлений:
В настоящее время я проверяю это поведение уведомлений на платформе 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'
});
}
}
Теперь, когда окно приложения свернуто и новая задача назначена другим пользователем, окно появляется над всеми приложениями (что бы ни открывалось на вашем экране) и отображает уведомление о новой назначенной задаче для пользователя.