Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia mostra como criar um complemento nativo do C++ que chama as APIs de notificação SDK do Aplicativo Windows em seu aplicativo Electron. Este é um ótimo ponto de partida para entender os complementos nativos antes de se aprofundar em cenários mais complexos.
Pré-requisitos
Antes de iniciar este guia, verifique se você:
- Concluído a configuração do ambiente de desenvolvimento
Etapa 1: Criar um complemento nativo do C++
Vamos criar um complemento nativo usando C++ e node-addon-api. Isso fornece acesso direto às APIs de Windows com desempenho máximo.
npx winapp node create-addon
Note
Esse comando pode solicitar que você instale Python ou as ferramentas de Visual Studio necessárias se você ainda não as tiver instalado.
Isso cria uma nativeWindowsAddon/ pasta com:
-
nativeWindowsAddon.cc- Seu código C++ que chamará APIs do Windows -
binding.gyp– Configuração de build para node-gyp
O comando também instala as dependências de desenvolvimento necessárias (nan, node-addon-api, node-gyp) e adiciona um build-nativeWindowsAddon script ao seu package.json:
{
"scripts": {
"build-nativeWindowsAddon": "node-gyp clean configure build --directory=nativeWindowsAddon"
}
}
O modelo gerado inclui uma função de ShowNotification de exemplo que usa as APIs de notificação do SDK Windows. Vamos verificar se tudo está configurado corretamente criando o complemento:
# Build the C++ addon
npm run build-nativeWindowsAddon
Note
Você também pode criar um complemento C# usando npx winapp node create-addon --template cs. Os complementos C# usam node-api-dotnet. Consulte os outros guias para criar complementos ou a documentação de comando completa para obter mais opções.
Etapa 2: Testar o complemento gerado
Vamos verificar se o complemento gerado funciona chamando-o do processo principal. Abrir src/index.js:
- Adicione a importação do add-on com suas outras
requiredeclarações na parte superior:
const nativeWindowsAddon = require('../nativeWindowsAddon/build/Release/nativeWindowsAddon.node');
- Chame a função de notificação ao final da função
createWindow().
const createWindow = () => {
// ... existing window creation code ...
// Test the Windows SDK notification
nativeWindowsAddon.showNotification(
'Hello from Electron!',
'This notification uses the Windows SDK.'
);
};
Antes que a API de notificação funcione, você precisa garantir que seu aplicativo seja executado com identidade. Execute:
npx winapp node add-electron-debug-identity
Note
Esse comando já faz parte do postinstall script que adicionamos no guia de instalação, portanto, ele é executado automaticamente após npm install. No entanto, você precisa executá-lo manualmente sempre que modificar Package.appxmanifest, atualizar ativos de aplicativo ou reinstalar dependências.
Agora, execute seu aplicativo:
npm start
Você deve ver uma notificação aparecer! 🎉 O complemento gerado funciona prontamente.
⚠️ Problema Conhecido: Falhas de aplicativo ou janela em branco (clique para expandir)
Há um bug de Windows conhecido com aplicativos Electron de empacotamento esparso que faz com que o aplicativo falhe no início ou não renderize o conteúdo da Web. O problema foi corrigido em Windows mas ainda não foi propagado para todos os dispositivos.
Consulte a configuração do ambiente de desenvolvimento para solução alternativa.
Etapa 3: Atualizar as Notificações do SDK do Aplicativo Windows
Agora que confirmamos que o complemento funciona, vamos atualizá-lo para usar as APIs de notificação SDK do Aplicativo Windows modernas (Microsoft.Windows.AppNotifications), que fornecem uma melhor experiência de desenvolvedor e mais recursos. Já configuramos o SDK do Aplicativo Windows quando executamos o comando init nas etapas de instalação.
Abra nativeWindowsAddon/nativeWindowsAddon.cc e substitua todo o conteúdo por este código:
#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)
As principais alterações aqui estão mudando do namespace Windows.UI.Notifications mais antigo para as APIs Microsoft.Windows.AppNotifications modernas e usando AppNotificationBuilder para construir notificações em vez de criar manualmente cadeias de caracteres XML. Isso fornece uma API mais limpa e mais mantenedível que é consistente com os padrões de SDK do Aplicativo Windows.
Etapa 4: Recompilar e testar
Agora recompile o complemento com o código atualizado:
npm run build-nativeWindowsAddon
Atualize a mensagem src/index.js para refletir a alteração:
nativeWindowsAddon.showNotification(
'Hello from Electron!',
'This notification is powered by the Windows App SDK!'
);
Execute seu aplicativo novamente:
npm start
Você verá a notificação atualizada usando as APIs de SDK do Aplicativo Windows modernas!
Próximas etapas
Parabéns! Você criou com êxito um complemento C++ nativo que chama APIs de SDK do Aplicativo Windows! 🎉
Agora você está pronto para:
- Empacotar seu aplicativo para distribuição – Criar um pacote MSIX que você pode distribuir
Ou explore outros guias:
- Creating a Phi Silica Addon – Saiba como usar APIs de IA do Windows em um complemento C#
- Creating a WinML Addon – Saiba como usar Windows Machine Learning em um complemento C#
- Visão geral de introdução – Retornar ao guia principal
Recursos adicionais
- Documentação da CLI do winapp – Referência completa da CLI
- Aplicativo Electron - Exemplo funcional completo com addon C++
- node-addon-api – biblioteca de interoperabilidade C++ ↔ JavaScript
- SDK do Aplicativo Windows Samples - Coleção de amostras de SDK do Aplicativo Windows
Windows developer