очистка электрон node.js при перезапуске окна 10 / выключении / выходе пользователя / automati c (из-за обновления) - PullRequest
0 голосов
/ 26 января 2020

Я делаю настольное приложение (node.js электронный сервер).

Я хочу добиться чего-то вроде блокнота в окне 10! когда мы не сохраняем файл блокнота и пытаемся выполнить перезагрузку / выход из системы / завершение работы, появляется следующий экран:

enter image description here

  1. Можно ли выполнить очистку, когда пользователь выполняет END TASK из диспетчера задач?
  2. можно ли выполнить очистку при закрытии / перезапуске / выходе из системы по какой-либо причине?

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

В данный момент я пытаюсь решить проблему с помощью собственного кода node.js аддон. (WM_QUERYENDSESSION возвращает false и затем выполняет очистку.)

Могу ли я достичь цели, продвигаясь таким образом?

  • test. cc
#include <node.h>
#include <windows.h>
#include <iostream>
LRESULT CALLBACK WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    // I am stuck here I don't know what to do next I have tried many things but nothing seems to work
    if (message == WM_ENDSESSION)
    {
        if (lParam == ENDSESSION_LOGOFF)
        {
            /*Handle event*/
        }
    }
    SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);
    return false; //WindowProc(message, wParam, lParam);
}
namespace demo
{

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::NewStringType;
using v8::Object;
using v8::String;
using v8::Value;
void Method(const FunctionCallbackInfo<Value> &args)
{
    Isolate *isolate = args.GetIsolate();
    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms686227(v=vs.85).aspx
    if (!SetProcessShutdownParameters(0x4ff, 0)) //  greedy highest documented System reserved FirstShutdown
    {
        // Fallback
        if (!SetProcessShutdownParameters(0x3ff, 0)) // highest notification range for applications
        {
            // shouldn't happen
        }
    }

    args.GetReturnValue().Set(String::NewFromUtf8(
                                  isolate, "worhgjhbh h uhb-oi0990909 ld", NewStringType::kNormal)
                                  .ToLocalChecked());
}

void Initialize(Local<Object> exports)
{
    NODE_SET_METHOD(exports, "hello", Method);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
}
  • binding.gyp
{
    "targets":[
        {
            "target_name":"test",
            "sources":["test.cc"]
        }
    ]
}
  • app. js (файл узла) В этом файле много строк кода, но у меня есть пропуск
const addon = require('./build/Release/test')

console.log(addon);
console.log(addon.hello());
Есть ли другой способ очистки?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...