Runic.Platform.Windows 0.8.0-preview.4

This is a prerelease version of Runic.Platform.Windows.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Runic.Platform.Windows --version 0.8.0-preview.4
                    
NuGet\Install-Package Runic.Platform.Windows -Version 0.8.0-preview.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Runic.Platform.Windows" Version="0.8.0-preview.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Runic.Platform.Windows" Version="0.8.0-preview.4" />
                    
Directory.Packages.props
<PackageReference Include="Runic.Platform.Windows" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Runic.Platform.Windows --version 0.8.0-preview.4
                    
#r "nuget: Runic.Platform.Windows, 0.8.0-preview.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Runic.Platform.Windows@0.8.0-preview.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Runic.Platform.Windows&version=0.8.0-preview.4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Runic.Platform.Windows&version=0.8.0-preview.4&prerelease
                    
Install as a Cake Tool

Runic.Platform.Windows

Explicit Windows x64 file dialog and Unicode text clipboard provider for the Runic SDK. Select WindowsPlatformProvider.CreateFileDialogs(owner) and CreateTextClipboard(owner) with the presentation's verified native owner. The owner dispatches file dialogs on the window's STA and drains native callbacks before disposal. This package does not discover providers or depend on Desktop.

File dialogs require an owner, use filesystem-only Common Item Dialogs and retain the shared runtime's atomic replacement policy. Clipboard reads distinguish absent text (null) from empty text, reject over-limit payloads and return typed busy, permission and I/O failures. Text containing NUL is invalid. Cancellation before native execution prevents the operation; after execution starts, the actual write outcome is returned. Win32 can clear the previous clipboard before a subsequent write fails; failures must not be interpreted as preservation of previous text.

Win32 and COM declarations are private CsWin32-generated unmanaged bindings; the Windows Runtime projection uses raw ABI vtables. Both preserve NativeAOT. The interop inventory records each retained declaration. Windows JIT, NativeAOT and actual interactive selection acceptance are release gates; portable conformance alone does not certify the Windows environment.

Desktop services

Application-scoped appearance and notification providers, and owned file opening, application choice and reveal, are described in the desktop services guide. It includes composition, native API choices, installation/activation requirements, retained file access and the per-platform verification status.

Status icon and window presentation

PlatformServices.CreateStatusIcon() and AddRunicPlatformServices() in Runic.Application.Views.Desktop select this package's notification-area icon on Windows. It is a Shell_NotifyIconW icon with NOTIFYICON_VERSION_4, owned by a hidden window on its own thread. A click or Space/Enter (NIN_SELECT, NIN_KEYSELECT) raises Primary, a middle click Secondary, and the context menu opens with TrackPopupMenuEx after the window takes the foreground, as the shell requires. Menu commands keep their IDs across ShowAsync calls, and a choice resolves against the menu that was shown. Activations arrive one at a time, in order, on a worker thread.

The icon is drawn from the state's RGBA images with CreateIconIndirect, using the smallest image at least as large as the small-icon size. Theme names are ignored; an icon without images shows the application's icon. Windows has no attention state, so NeedsAttention shows the attention icon, and Passive looks like Active. The tooltip is the title and the tooltip text on the next line, cut to szTip's 127 characters. The window is a hidden top-level window rather than a message-only one, because message-only windows do not receive the TaskbarCreated broadcast: after Explorer restarts, the icon is added again. Without a taskbar, ShowAsync returns unavailable and the icon appears when one starts. Applications report that Enter can reach an icon as two NIN_KEYSELECT notifications, so a repeat within 250 ms raises nothing.

The icon belongs to the application: only HideAsync and DisposeAsync remove it. Its window ignores WM_CLOSE from other processes (taskkill without /F, Restart Manager). When the session ends (WM_ENDSESSION), or the window is destroyed some other way, the icon is removed and the window's thread ends. A later ShowAsync starts a new window.

PlatformServices.PresentAsync(owner) restores a minimized Desktop window, shows a hidden one (as a close-to-tray application leaves it), and calls SetForegroundWindow on the window's thread. Windows grants the foreground only to the process the user just started, so ApplicationInstance.ClaimAsync calls AllowSetForegroundWindow for the running instance before it forwards a launch. When Windows still refuses, the taskbar button flashes (FlashWindowEx) and the result is Failed(PermissionDenied) with a SetForegroundWindow diagnostic.

CI's Native / win-x64 job runs the NativeStatusIcon and NativePresentation categories of Runic.Platform.Windows.Tests with JIT and NativeAOT on the runner's desktop session.

WPF windows have no DesktopNativeOwner, so they have no PresentAsync path yet (#267).

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Runic.Platform.Windows:

Package Downloads
Runic.Application.Views.Desktop

Runic Window and View host adapter for Runic Desktop.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.12.1 0 10/27/2026
0.12.0 0 10/27/2026
0.11.0 3,190 10/25/2026
0.10.0 6,346 10/22/2026
0.9.1 979 10/21/2026
0.9.0 193 10/21/2026
0.8.0-preview.6 1,620 10/19/2026
0.8.0-preview.5 446 10/17/2026
0.8.0-preview.4 1,009 10/17/2026
0.8.0-preview.3 893 10/15/2026
0.8.0-preview.2 143 10/15/2026
0.8.0-preview.1 196 10/15/2026
0.7.0-preview.9 590 10/14/2026
0.7.0-preview.8 114 10/12/2026
0.7.0-preview.7 72 10/12/2026
0.7.0-preview.6 511 10/9/2026
0.7.0-preview.5 147 10/9/2026
0.7.0-preview.4 84 10/8/2026
0.7.0-preview.3 69 10/8/2026
0.7.0-preview.2 89 10/7/2026
Loading failed