Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V této příručce se dozvíte, jak volat rozhraní API Windows – Windows App SDK i Windows SDK – přímo z JavaScriptu vaší aplikace Electron bez nativního doplňku a bez node-gyp kroku MSBuild. Otevřete nativní dialog pro výběr souboru (Windows App SDK) a pak prozkoumáte vybraný obrázek pomocí rozhraní API pro soubory a zpracování obrazu z Windows SDK přidaných prostřednictvím winapp.jsBindings.
Předpoklady
Než začnete s touto příručkou, ujistěte se, že máte:
- Dokončili jste nastavení vývojového prostředí.
Krok 1: Potvrzení vazeb
Instalační proces vygeneroval adresář .winapp/bindings/ vedle vašich zdrojových souborů – jeden pár .js + .d.ts pro každou vygenerovanou třídu Windows App SDK a také index.js, který je všechny znovu exportuje:
.winapp/bindings/
├── index.js # entry — re-exports every emitted class
├── index.d.ts # TS bundle
├── FileOpenPicker.js # one pair of files per emitted class
├── FileOpenPicker.d.ts
├── PickerLocationId.js
├── PickerLocationId.d.ts
└── …
Krok 2: Přidání rozhraní API sady Windows SDK do vazeb
Výchozí vazby pokrývají pouze Windows App SDK rozhraní API. K otevření a dekódování vybraného obrázku potřebujeme také dvě třídy sady WINDOWS SDK:
-
Windows.Storage.StorageFile— zalomení cesty k souboru. -
Windows.Graphics.Imaging.BitmapDecoder— pro zjištění jeho rozměrů.
Otevřete package.json a přidejte additionalWinmds pole uvnitř vytvořeného winapp.jsBindings bloku winapp init :
// package.json
{
"winapp": {
"jsBindings": {
"additionalWinmds": [
{ "namespace": "Windows.Storage", "classes": ["StorageFile"] },
{ "namespace": "Windows.Graphics.Imaging", "classes": ["BitmapDecoder"] }
]
}
}
}
Potom znovu vygenerujte vazby:
npx winapp node generate-bindings
StorageFile.js, BitmapDecoder.jsa soubory výčtu, na které jsou závislé (FileAccessMode.js, BitmapPixelFormat.js, ...), se nyní zobrazují v .winapp/bindings/.
Note
dynwinrt-codegen automaticky zahrnuje závislé typy, které potřebujete k volání těchto tříd (například IRandomAccessStream, vrácené funkcí StorageFile.openAsync), takže výběr pouze tříd vstupních bodů obvykle stačí.
Krok 3: Volání rozhraní API Windows z vašeho elektronového kódu
Všechny vygenerované třídy se exportují prostřednictvím #winapp/bindings:
Vyžaduje
@microsoft/dynwinrt-codegen≥0.1.0-preview.8– viz Začínáme s Elektronem , kde najdete náhradní řešení starších projektů.
// src/index.js (Electron main, CommonJS)
const { app, BrowserWindow, ipcMain } = require('electron');
const {
// Windows App SDK (default bindings)
FileOpenPicker,
PickerLocationId,
PickerViewMode,
// Windows SDK (added via additionalWinmds in Step 2)
StorageFile,
FileAccessMode,
BitmapDecoder,
} = require('#winapp/bindings');
async function pickAndInspectImage(mainWindow) {
// FileOpenPicker needs the parent window's HWND wrapped in a WindowId struct.
// Electron's getNativeWindowHandle() returns an 8-byte buffer on 64-bit Windows.
const hwnd = mainWindow.getNativeWindowHandle().readBigUInt64LE(0);
const picker = FileOpenPicker.createInstance({ value: hwnd });
picker.viewMode = PickerViewMode.Thumbnail;
picker.suggestedStartLocation = PickerLocationId.PicturesLibrary;
picker.fileTypeFilter.replaceAll(['.png', '.jpg', '.jpeg', '.gif']);
const result = await picker.pickSingleFileAsync();
if (!result?.path) return null; // User cancelled.
// Use Windows SDK APIs to inspect the picked image.
const file = await StorageFile.getFileFromPathAsync(result.path);
const stream = await file.openAsync(FileAccessMode.Read);
const decoder = await BitmapDecoder.createAsync(stream);
return {
path: result.path,
width: decoder.pixelWidth,
height: decoder.pixelHeight,
};
}
// Expose it to the renderer via IPC so a button click can trigger the flow.
ipcMain.handle('pick-and-inspect-image', (event) => {
const win = BrowserWindow.fromWebContents(event.sender);
return pickAndInspectImage(win);
});
Pak jej propojte s rendererem pomocí preload skriptu:
// src/preload.js
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('winapp', {
pickAndInspectImage: () => ipcRenderer.invoke('pick-and-inspect-image'),
});
Nakonec přidejte do svého rendereru tlačítko a při kliknutí na něj zavolejte window.winapp.pickAndInspectImage():
<!-- src/index.html -->
<button id="pick">Pick an image</button>
<p id="result"></p>
<script>
document.getElementById('pick').addEventListener('click', async () => {
const info = await window.winapp.pickAndInspectImage();
document.getElementById('result').textContent = info
? `${info.path} (${info.width}×${info.height})`
: 'Cancelled';
});
</script>
Krok 4: Spusťte ho
Než bude výběr souboru fungovat, musíte zajistit, aby vaše aplikace běžela s identitou. Běh:
npx winapp node add-electron-debug-identity
Note
Tento příkaz je již součástí postinstall skriptu, který jsme přidali v průvodci nastavením, takže se spustí automaticky po npm install. Musíte ho ale spustit ručně pokaždé, když upravíte Package.appxmanifest, aktualizujete prostředky aplikace nebo přeinstalujete závislosti.
Teď spusťte aplikaci:
npm start
Klikněte na tlačítko: Zobrazí se nativní výběr souboru Windows a jakmile vyberete obrázek, jeho cesta a rozměry pixelů se zobrazí pod tlačítkem. 🎉 Import z .winapp/bindings/ načte @microsoft/dynwinrt, které přesměruje každé volání do podkladového rozhraní WinRT API — zcela transparentně pro váš kód.
Další kroky
Gratulujeme! Teď voláte rozhraní API Windows – Windows App SDK a Windows SDK – přímo z JavaScriptu, bez nativního doplňku a kroku node-gyp sestavení. 🎉
Teď jste připraveni:
-
Zabalte aplikaci pro distribuci — vytvořte balíček MSIX, který můžete distribuovat (modul
@microsoft/dynwinrtruntime už je součástí vaší sadydependencies).
Nebo prozkoumejte další příručky:
- Zobrazení oznámení z JavaScriptu – zobrazení Windows App SDK oznámení prostřednictvím vazeb JS.
- Volání Phi Silica pomocí JavaScriptu — shrňte text pomocí Windows App SDK AI prostřednictvím vazeb pro JavaScript.
-
Spusťte WinML v JavaScriptu – použijte zjišťování poskytovatele ML ve Windows App SDK s
onnxruntime-node. - Vytvoření nativního doplňku jazyka C++ – pro rozhraní API win32 / pure-COM, která nemají projekci WinRT.
- Vytvoření doplňku Phi Silica – Windows rozhraní API AI z doplňku jazyka C#.
- Úvodní přehled – vraťte se k hlavnímu průvodci.
Další zdroje
-
Dokumentace k rozhraní příkazového řádku winapp – kompletní referenční dokumentace k rozhraní příkazového řádku (
init,restore,node generate-bindings). - Ukázková aplikace Electron — kompletní funkční příklad, včetně vazeb pro JS.
- @microsoft/dynwinrt – modul runtime, který řídí generované vazby.
- @microsoft/dynwinrt-codegen – generátor kódu.
Windows developer