Не удается получить доступ к функции закрытия окна в приложении Desktop с помощью node js

Я разрабатываю приложение для рабочего стола Windows с помощью node.js и backbone.js. Я хочу выполнить действие, когда пользователь закрывает приложение, нажав кнопку закрытия в строке заголовка или щелкнув правой кнопкой мыши приложение из панели задач Windows.

My app.js выглядит так:

 var app = module.exports = require('appjs');


app.serveFilesFrom(__dirname + '/content/assets/');

var menubar = app.createMenu([ {
label : '&File',
submenu : [ {
    label : 'E&xit',
    action : function() {
        window.close();
    }
},{
    label : 'New',
    action : function() {
        window.test();
    }
} ]
}, {
label : '&Window',
submenu : [ {
    label : 'Fullscreen',
    action : function(item) {
        window.frame.fullscreen();
        console.log(item.label + " called.");
    }
}, {
    label : 'Minimize',
    action : function() {
            console.log("df");
        window.frame.minimize();
    }
}, {
    label : 'Maximize',
    action : function() {
        console.log("nnnnnnlaaaaaaaaaaaaaaa");
        window.frame.maximize();
    }
}, {
    label : ''// separator
}, {
    label : 'Restore',
    action : function() {
        window.frame.restore();
    }
} ]
} ]);

menubar.on('select', function(item) {
console.log("menu item " + item.label + " clicked");
});

var trayMenu = app.createMenu([ {
label : 'Show',
action : function() {
    window.frame.show();
},
}, {
label : 'Minimize',
action : function() {
    window.frame.hide();
}
}, {
label : 'Exit',
action : function() {
    window.close();
}
} ]);

var statusIcon = app.createStatusIcon({
icon : './data/content/icons/32.png',
tooltip : 'AppJS Hello World',
menu : trayMenu
});



 var window = app.createWindow({
 width : 1024,// 640
height : 768,
showChrome: true,
icons : __dirname + '/content/icons'
});
window.on('create', function() {
console.log("Window Created");
window.frame.show();
window.frame.center();
window.frame.maximize();
window.frame.setMenuBar(menubar);
});

window.on('ready', function() {
console.log("Window Ready");    
window.require = require;
window.process = process;
window.module = module;
//window.frame.openDevTools();
window.fileAssoc = process.mainModule.filename;
//window.readMyFile();
function F12(e) {
    return e.keyIdentifier === 'F12'
}
function Command_Option_J(e) {
    return e.keyCode === 74 && e.metaKey && e.altKey
}


        });*/


window.addEventListener('keydown', function(e) {
console.log("hi");      
    if (F12(e) || Command_Option_J(e)) {            
        window.frame.openDevTools();
    }
   });
   }); 

Пожалуйста, найдите прилагаемый скриншот. Я могу выполнять действия над пользовательскими добавленными функциями внутри "Файл" и "Windows".

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

Спасибо в Advance

Ответы

Ответ 1

ОБНОВЛЕНО (добавлено еще несколько строк кода, чтобы показать правильный путь к событию)

Вам нужно сделать следующее:

var gui = require("nw.gui");

var win_main = gui.Window.get();
win_main.on('close', function () {
    this.hide(); // Pretend to be closed already
    alert("Closing...");

    // here you detect if data is saved, and if not, ask user if they want to save

    this.close(true);   // if this line executes the app closes, if not,
                        // app stays opened
});

Я попробовал выше, и он отлично работает. Он ловит кнопки "Закрыть кнопку" и сочетания клавиш, такие как "Ctrl + F4" в Windows.

Для дальнейшего чтения (перемещено из комментариев):

http://tutorialzine.com/2015/01/your-first-node-webkit-app/

https://nodesource.com/blog/node-desktop-applications

https://gist.github.com/LeCoupa/80eca2716a2b13c37cce

https://github.com/nwjs/nw.js/

https://github.com/nwjs/nw.js/wiki/window

Ответ 2

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

Для этого я устанавливаю атрибут showChrome в appJs равным false во время создания окна, которое по умолчанию истинно.

Изменение кода

  var window = app.createWindow({
  width : 1024,// 640
  height : 768,
  **showChrome: false**,
  icons : __dirname + '/content/icons'
   });

Но когда атрибут 'showChrome' установлен на ложную панель задач, он также будет скрыт до тех пор, пока мы не уменьшим или не восстановим приложение.