Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как создать собственный C++ аддон, который вызывает API уведомлений Windows App SDK в вашем приложении Electron. Это отличная отправная точка для понимания собственных аддонов перед тем как погрузиться в более сложные сценарии.
Необходимые условия
Перед началом работы с этим руководством убедитесь, что вы:
- Завершена настройка среды разработки
Шаг 1. Создание нативного дополнения C++
Давайте создадим нативный аддон с помощью C++ и node-addon-api. Это обеспечивает прямой доступ к Windows API с максимальной производительностью.
npx winapp node create-addon
Замечание
Эта команда может заставить установить Python или необходимые средства Visual Studio, если они еще не установлены.
При этом создается папка с: nativeWindowsAddon/
-
nativeWindowsAddon.cc— Код C++ с вызовом API Windows -
binding.gyp— Конфигурация сборки для node-gyp
Команда также устанавливает необходимые зависимости разработки (nan, node-addon-api, node-gyp) и добавляет скрипт build-nativeWindowsAddon в ваш package.json.
{
"scripts": {
"build-nativeWindowsAddon": "node-gyp clean configure build --directory=nativeWindowsAddon"
}
}
Созданный шаблон содержит пример функции ShowNotification, использующую API уведомлений пакета SDK Windows. Давайте убедимся, что всё настроено правильно, выполнив сборку дополнения:
# Build the C++ addon
npm run build-nativeWindowsAddon
Замечание
Вы также можете создать надстройку C# с помощью npx winapp node create-addon --template cs. Надстройки C# используют node-api-dotnet. Дополнительные сведения см. в других руководствах по созданию надстроек или полной документации по командам .
Шаг 2. Тестирование созданной надстройки
Давайте убедимся, что созданная надстройка работает, вызывая ее из основного процесса. Открыть src/index.js:
- Добавьте импорт дополнения с другими
requireинструкциями в верхней части:
const nativeWindowsAddon = require('../nativeWindowsAddon/build/Release/nativeWindowsAddon.node');
- В конце функции
createWindow()вызовите функцию уведомления.
const createWindow = () => {
// ... existing window creation code ...
// Test the Windows SDK notification
nativeWindowsAddon.showNotification(
'Hello from Electron!',
'This notification uses the Windows SDK.'
);
};
Прежде чем API уведомлений начнёт работать, необходимо убедиться, что приложение работает с аутентификацией. Запуск:
npx winapp node add-electron-debug-identity
Замечание
Эта команда уже является частью скрипта postinstall , который мы добавили в руководстве по настройке, поэтому он выполняется автоматически после npm install. Однако его необходимо запускать вручную при изменении Package.appxmanifest, обновлении ресурсов приложения или переустановке зависимостей.
Теперь запустите приложение:
npm start
Появится уведомление! 🎉 Созданная надстройка работает сразу после установки.
⚠️ Известная проблема: сбои приложения или пустое окно (щелкните, чтобы развернуть)
Известна ошибка Windows, связанная с разряженной упаковкой приложений Electron, которая приводит к сбою приложения при запуске или не отображает веб-содержимое. Проблема устранена в Windows, но еще не распространилась на все устройства.
См. инструкции по настройке среды разработки для решения обходным путем.
Шаг 3. Обновление до Windows App SDK для уведомлений
Теперь, когда мы подтвердили работу надстройки, давайте обновим надстройку, чтобы использовать современные API уведомлений Windows App SDK (Microsoft.Windows.AppNotifications), которые обеспечивают лучший опыт разработчика и дополнительные функции. Мы уже настроили Windows App SDK при выполнении команды init в ходе шагов установки.
Откройте nativeWindowsAddon/nativeWindowsAddon.cc и замените все содержимое этим кодом:
#include <napi.h>
#include <windows.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Microsoft.Windows.AppNotifications.h>
#include <winrt/Microsoft.Windows.AppNotifications.Builder.h>
using namespace winrt;
using namespace Microsoft::Windows::AppNotifications;
using namespace Microsoft::Windows::AppNotifications::Builder;
// Function to display a Windows App SDK notification
void ShowNotification(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
try {
// Get arguments from JavaScript (title and message)
if (info.Length() < 2 || !info[0].IsString() || !info[1].IsString()) {
Napi::TypeError::New(env, "Expected two string arguments: title and message").ThrowAsJavaScriptException();
return;
}
std::string title = info[0].As<Napi::String>();
std::string message = info[1].As<Napi::String>();
// Convert to wide strings
std::wstring wTitle(title.begin(), title.end());
std::wstring wMessage(message.begin(), message.end());
// Use AppNotificationBuilder for a cleaner API
AppNotificationBuilder builder;
builder.AddText(wTitle);
builder.AddText(wMessage);
AppNotification notification = builder.BuildNotification();
AppNotificationManager::Default().Show(notification);
} catch (const winrt::hresult_error& ex) {
Napi::Error::New(env, winrt::to_string(ex.message())).ThrowAsJavaScriptException();
} catch (const std::exception& ex) {
// Handle exceptions and throw back to JavaScript
Napi::Error::New(env, ex.what()).ThrowAsJavaScriptException();
} catch (...) {
Napi::Error::New(env, "Unknown error occurred").ThrowAsJavaScriptException();
}
}
// Initialize the module
Napi::Object Init(Napi::Env env, Napi::Object exports) {
exports.Set(Napi::String::New(env, "showNotification"), Napi::Function::New(env, ShowNotification));
return exports;
}
NODE_API_MODULE(addon, Init)
Основные изменения, внесенные здесь, переходят с старого пространства имен Windows.UI.Notifications на современные API-интерфейсы Microsoft.Windows.AppNotifications и используют AppNotificationBuilder для создания уведомлений вместо создания xml-строк вручную. Это обеспечивает более чистый, более доступный для обслуживания API, совместимый с шаблонами Windows App SDK.
Шаг 4. Перестроение и тестирование
Теперь перестройте надстройку с обновленным кодом:
npm run build-nativeWindowsAddon
Обновите сообщение в src/index.js, чтобы отразить изменение.
nativeWindowsAddon.showNotification(
'Hello from Electron!',
'This notification is powered by the Windows App SDK!'
);
Запустите приложение еще раз:
npm start
Вы увидите обновленное уведомление с помощью современных API Windows App SDK!
Дальнейшие шаги
Поздравляю! Вы успешно создали собственную надстройку C++, которая вызывает Windows App SDK API! 🎉
Теперь вы готовы:
- Упаковка приложения для распространения — создание пакета MSIX, который можно распространить
Или ознакомьтесь с другими руководствами:
- Creating a Phi Silica Addon. Узнайте, как использовать API Windows ИИ в надстройке C#
- Создание надстройки WinML. Узнайте, как использовать Windows Машинное обучение в надстройке C#
- Общие сведения о начале работы - Вернуться к главному руководству
Дополнительные ресурсы
- Документация по интерфейсу командной строки winapp — полный справочник по CLI
- Пример приложения Electron — полный пример работы с надстройкой C++
- node-addon-api — библиотека для взаимодействия C++ ↔ JavaScript
- Windows App SDK Примеры — коллекция примеров Windows App SDK
Windows developer