Catalog · How the catalog works
nano-view
Wrapper Windows nativo minimalista (Delphi + WebView2) que transforma qualquer site em app de desktop com bandeja, tema sincronizado e instância única.
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
NanoView
Wrapper Windows minimalista para transformar sites em aplicativos nativos de desktop. Escrito em Delphi puro sobre a Win32 API + WebView2 (Edge/Chromium), sem VCL nem FMX — um único arquivo .dpr, binário compacto e baixo consumo de memória.
Funcionalidades
- WebView2 (Chromium) — renderização moderna via runtime do Edge instalado no Windows.
- Abre maximizado e respeita DPI por monitor (Per-Monitor v2).
- Tema sincronizado com o site — a barra de título do Windows acompanha em tempo real o tema do site (lê
localStorage.themee cai emprefers-color-schemecomo fallback). Mudanças são detectadas via monkey-patch emStorage.prototype+window.chrome.webview.postMessage. - Ícone na bandeja do sistema permanente.
- Fechar vai para a bandeja (X esconde, não encerra).
- Menu de contexto (clique direito na bandeja):
- Abrir — restaura a janela no mesmo estado anterior (maximizada ou normal).
- Iniciar com o Windows — checkbox que adiciona/remove entrada em
HKCU\Software\Microsoft\Windows\CurrentVersion\Run. Ao iniciar pelo autorun, o app sobe silenciosamente direto para a bandeja (/tray). - Fechar — encerra o processo de fato.
- Menu escuro seguindo o Windows — usa os ordinais não documentados de
uxtheme.dll(SetPreferredAppMode,AllowDarkModeForWindow,FlushMenuThemes). - Instância única — mutex nomeado +
RegisterWindowMessage+FindWindow: tentar abrir uma segunda vez traz a janela existente de volta. - Multi-app por configuração —
MUTEX_NAMEeSHOW_MSG_NAMEincorporam oCLASS_NAME, então builds comCLASS_NAMEdiferentes coexistem (um binário por site). - Permissões auto-concedidas — notificações, câmera, microfone, clipboard, geolocalização etc. são liberadas via
add_PermissionRequested(escopo: origem carregada). - WebSocket / SSE amigável — app fica vivo em bandeja, então conexões persistentes da página continuam recebendo eventos mesmo com a janela fechada (alternativa prática ao FCM Web Push, que não é suportado pelo WebView2).
Configuração
Todas as constantes ficam no topo de NV.dpr:
const
URL = 'https://conversa.igerp.com/';
CLASS_NAME = 'TConversa';
WINDOWN_TITLE = 'Conversa';
WINDOWN_SIZE : TPoint = (X: 1920; Y: 1080);URL— endereço carregado no WebView.CLASS_NAME— classe Win32 da janela, também usada como chave única para mutex, mensagem registrada e valor no autorun. Troque para rodar várias "instalações" do mesmo binário apontando para sites diferentes.WINDOWN_TITLE— título exibido na barra.WINDOWN_SIZE— tamanho "restaurado" (quando sair de maximizado).
Ícone do executável: edite NV.res (recurso MAINICON).
Requisitos
- Delphi 11 ou superior (usa
Winapi.WebView2, incluído na RTL moderna). - WebView2 Runtime instalado no Windows — já vem com Windows 11 e com Edge Chromium atualizado no Windows 10. Caso precise distribuir, instale o Evergreen Bootstrapper junto.
WebView2Loader.dllao lado do executável (distribuído com o SDK do WebView2).- Windows 10 1903+ para os ajustes de menu escuro. Em versões anteriores, os APIs do
uxtheme.dllretornamnile o menu renderiza no estilo padrão sem crash.
Como compilar
- Abra
NV.dprojno Delphi. - Escolha a plataforma (Win32 ou Win64).
- Build. O executável fica em
Win64\Release\NV.exe(ou similar). - Coloque
WebView2Loader.dllna mesma pasta do.exe.
Arquitetura
Tudo em um único .dpr (~400 linhas), organizado em blocos:
- Single instance — mutex + mensagem Win32 registrada antes de
CoInitialize. - Handlers COM do WebView2 —
TEnvironmentHandler,TControllerHandler,TWebMessageReceivedHandler,TPermissionRequestedHandler(classesTInterfacedObjectimplementando as interfaces do runtime). - Bandeja —
Shell_NotifyIcon+CreatePopupMenu/TrackPopupMenu. - Tema do sistema —
DwmSetWindowAttribute(DWMWA_USE_IMMERSIVE_DARK_MODE)+uxtheme.dll(ordinais 133/135/136). - Sincronização de tema com o site — script injetado via
AddScriptToExecuteOnDocumentCreated+add_WebMessageReceived. - Autorun —
RegSetValueEx/RegDeleteValueemHKCU\...\Runcom arg/tray.
Por que não Electron / Tauri / WebView padrão?
- Binário de ~1MB em vez de dezenas/centenas.
- Sem bundler, sem Node, sem Rust toolchain — só o Delphi.
- Reaproveita o runtime do Edge que a maioria das máquinas Windows já tem instalado, mesmo approach do Tauri no Windows.
- Controle direto sobre a janela nativa (DWM, temas, bandeja, mensagens Win32).
Licença
MIT

