SuperMemoAssistant.Interop 2.1.0-beta.26

This is a prerelease version of SuperMemoAssistant.Interop.
dotnet add package SuperMemoAssistant.Interop --version 2.1.0-beta.26
NuGet\Install-Package SuperMemoAssistant.Interop -Version 2.1.0-beta.26
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="SuperMemoAssistant.Interop" Version="2.1.0-beta.26" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SuperMemoAssistant.Interop --version 2.1.0-beta.26
#r "nuget: SuperMemoAssistant.Interop, 2.1.0-beta.26"
#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.
// Install SuperMemoAssistant.Interop as a Cake Addin
#addin nuget:?package=SuperMemoAssistant.Interop&version=2.1.0-beta.26&prerelease

// Install SuperMemoAssistant.Interop as a Cake Tool
#tool nuget:?package=SuperMemoAssistant.Interop&version=2.1.0-beta.26&prerelease

Enables interactions between SuperMemo Assistant and Plugins.

Product Compatible and additional computed target framework versions.
.NET Framework net472 is compatible.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (13)

Showing the top 5 NuGet packages that depend on SuperMemoAssistant.Interop:

Package Downloads

Facilitate working with graphical user interfaces.


Facilitate bug reporting with Sentry.


Package Description


Package Description


Facilitates working with html content.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on SuperMemoAssistant.Interop:

Repository Stars
A companion app for SuperMemo 17-18 which extends its functionalities through plugins.
Version Downloads Last updated
2.1.0-beta.26 921 5/7/2022
2.1.0-beta.20 2,496 4/16/2021
2.1.0-beta.18 2,359 4/14/2021
2.1.0-beta.17 261 4/13/2021
2.1.0-beta.12 1,440 4/11/2021 624 3/23/2020 473 3/17/2020 1,395 3/17/2020 501 3/13/2020 441 3/12/2020 1,186 3/6/2020 484 3/5/2020 489 3/5/2020
2.0.3 478 2/27/2020 464 2/27/2020
0.1.120-preview 910 6/8/2018

- Added: BeginLearning, Exit
- Added: AssignGrade, ExecuteRepetition
- Added: Color JSON converter
- Added: UniqueId placeholder
- Added: ElementBuilder.TemplateApplyMode
- Added: TemplateUseMode
- Added: IElementWdw.AssignTemplate(int templateId)
- Added: Template in ElementBuilder
- Added: IElement.ToJson()
- Added: Registry member JSON converters
- Added: ISuperMemoEx.cs
- Added: Empty slots definitions
- Added: Improved fields & methods in the ElementBuilder
- Added: TypeEx.IsSubclassOfUnboundGeneric
- Added: Windows Toast Notification interface & models (see package SuperMemoAssistant.Services.ToastNotifications)
- Added: Custom SMA Data Dir location
- Added: *UpdateLock methods to IElementWdw
- Added: Documentation to ISuperMemo.cs
- Added: Plugin Lifecycle event system
- Added: Lifecycle events to ISuperMemoAssistant
- Added: non-generic InvokeRemote extension method
- Added: SMCollection extension methods IsLocked and Exists
- Added: Support for prerelease versions in SMAExecutableInfo
- Added: SMAFileSystem.TempErrorLog
- Added: Documentation
- Added: Async version of the exception handler in RunAsync
- Added: Non-Async vesion of the ConfigurationService Load and Save methods
- Added: version.json
- Added: SuperMemoAssistant.Interop.Shared
- Added: Quote file
- Added: Only one instance of SMA can be run #156
- Added: Rescue tool ("SMA Updater") which can install or update to any SMA version #152
- Added: Installer ability to rollback to a previous version #151
- Added: Distribution channels for SMA updates (stable, beta, nightly) #86
- Added: Update settings accessible from Collection Window
- Added: Shortcut for "SMA Updater" on install
- Added: Debug symbols (pdb) to Services nuspec
- Added: SuperMemo 18.04 compatibility #138
- Added: automated ChangeLog and NuPkg Release notes #52
- Added: Splash screen (also overrides SuperMemo's) #100
- Added: Plugin labels (e.g. Official, Verified)
- Added: A ChangeLog Popup after update, and a Change Logs Tab in the Settings #134
- Added: Limited settings window to one instance displayed at a time #113
- Added: Tool tips (hints) to UI icons that do not have a label #130
- Added: During installation, the confirmation popup displays the install folder destination #129
- Added: Import collection from SuperMemo (supermemo.ini) setup step #73
- Added Notifications #53
- Added Notification + Option to restart on plugin crash
- Added plugin labels #133
- Added ToolTips to UI icons #130
- Added install destination folder in confirmation popup message #129 (Squirrel.Windows)
- Added cancel button + reset in Collection Selection #117
- Added a setup step to import collections from supermemo.ini #73
- Added CfgBase with reset on cancel
- Added automatic version configuration
- Added more documentation
- Added SMA Setup screen
- Added Pugin Setup
- Added License agreement
- Added SMA update notifications
- Added the Logger configuration panel to Settings (will be moved under the General tab later)
- Added nuget.config with local Squirrel.Windows repository
- Added Squirrel.Windows submodule
- Added Logger configuration (WIP) Fix #64
- Added Plugin OnMessage (WIP)
- Added PluginMessage.OnLoggerConfigUpdated (WIP)
- Added SM exe setup window
- Added SuperMemoAssistant.Plugins.Import.BrowserPlugin submodule
- Added Browser Import projects to solution
- Added ObjectToStringJsonConverter.cs
- Added mshtml assembly check
- Added debug key logger
- Added plugin Template
- Added Services.HTML
- Added Title bar collapse option
- Added Layout editor interface [WIP]
- Added SoundContent
- Added Options (SM path, hint addresses) in CollectionSelectionWindow
- Added ImageEx, StreamEx extension classes
- Added Array Buffers in IOHooks
- Added SuperMemoAssistant.Core.Remote project
- Added Error catching in Prod
- Added Sentry
- Added Type to IElement
- Added Global Settings
- Added Element Picker
- Added exception messages
- Added dynamic component building
- Added new Keyboard hook method
- Added EasyHook dll
- Added binary registry
- Added GetFirst* methods to ControlGroup and ComponentGroup
- Added ImageWrapper
- Updated: Hot key manager now accepts null (disabled) hotkeys
- Updated: Packages
- Updated: ChangeLogs
- Updated: ElemCreationFlags reflect the new branch destination system
- Updated: ElemCreationResultCodes introduces DestinationBranchNotCreated, and changed value
- Updated: Created a new SuperMemoAssistant.Interop.SMA namespace and moved ISuperMemoAssistant.cs into it
- Updated: Missing csproj 2.1.0 version update
- Updated: Version to 2.1.0-beta
- Updated: OnSMStarted now takes a parameter to indicate whether SM was already running when the Plugin was initialized.
- Updated: Bumped version to 2.0.5
- Updated: Coding style
- Updated: Fixed a few issues in the API (Template now is an ITemplate instead of IElement, etc.)
- Updated: Cleaned up API for the first public SDK release
- Updated: Overall code quality (missing using statements, SetCurrentValue etc.)
- Updated: Moved logger code to Services/IO/Diagnostics/
- Updated: Applied coding style
- Updated: Project (csproj) to the new SDK format
- Updated: Moved projects under the src/ folder
- Updated: Stub executable now selects the version based on the local RELEASES file first #161 #151
- Updated: Improved Installer ability to optimize the download size by choosing delta updates
- Updated: All windows' default size are less or equal to 800x600 #160
- Updated: Tool tips (wip) #166
- Updated: All projects to PackageReference
- Updated: Change log is now generated before build to include the include the latest commit messages in the package
- Updated: ChangeLogs is now an embedded resource
- Updated: NuSpec dependencies version
- Updated some NuGet packages
- Updated DeviceId package
- Updated nuGets
- Updated gitmodules
- Updated/Fixed WndProc hook to capture SM's program flow only during the requested operations
- Fixed: Hotkey wasn't enabled
- Fixed: Notify property changed (OnActualHotKeyChanged)
- Fixed: HotKeyManager null bug
- Fixed: Converter accessibility
- Fixed: Race condition when a keyboard shortcut targets SM or one of its windows
- Fixed: Element Builder de-referenced null value on Concept and Parent
- Fixed: ElementDisplayState is now Serializable
- Fixed: Attempt at fixing unregistering null handler in Keyboard/KeyboardHook.cs
- Fixed: ISuperMemoAssistant Namespace
- Fixed: Plugin init when SM is already started
- Fixed: Plugin Lifecycle events unregistered even when SM is already started
- Fixed: Plugin's OnSMStarted is called when SM is already running
- Fixed: SMAPluginBase xml-doc
- Fixed: Keyboard hook race condition
- Fixed: Default namespace (RootNamespace in csproj)
- Fixed: ObservableHastSet Remove thrown an exception
- Fixed: SMAExecutableInfo didn't recognize semver 2.0 correctly
- Fixed: Removed GitRepoRoot
- Fixed: Update channel selection
- Fixed: SMA interrupts update mid-way when exiting #88 #161 #151
- Fixed: Updated plugin does not refresh in the UI (still happens in the Browse tab)
- Fixed: Occasional error when updating a Plugin
- Fixed: Change Log window now displays correctly
- Fixed: Wrong offsets for Hook and Concept in NativeDataCfg.json
- Fixed: Collection Selection > Options, and other option windows can now be canceled and revert changes #117
- Fixed an issue where Anotar.Serilog was kept as a reference
- Fixed an issue where updated registry elements would have their Empty property set to true
- Fixed an issue where creating non-memorized element with repetition history would prompt a warning dialog in SM (rep history totally removed from element builder string)
- Fixed logging
- Fixed logging issues
- Fixed several issues
- Fixed collection lock check
- Fixed several smaller issues
- Fixed a bug where the hooked OnWnd method was being called while disposed
- Fixed Logger path. Now logs in AppData/Roaming
- Fixed issue with space in collection path
- Fixed several bugs in Component, Element, Members registries
- Fixed binary file structures
- Fixed slot file paths for .html & .jpg registry members
- Removed: AssemblyEx.GetAssemblyGuid (not reliable)
- Removed: DebuggerAttachStrategy
- Removed JetBrains annotations
- Removed ModuleInit from SuperMemoAssistant.Core
- Removed legacy code (Menus, ElementDataWdw)
- Removed MediaPlayer plugin from this repo
- Misc: Reorganized Template plugin
- Misc: Cleaned up SMAInstaller from legacy Change Log code
- Misc minor fixes
- Misc. minor improvements
- Misc minor improvements
- Misc fixes
- Misc. minor changes
- Change the type casts to soft casts
- Is there a reason they aren't soft casts using `as` rather than hard casts? It can be a bit confusing from the name because AsWeb, AsImage etc. suggest they will return null on failure rather than throwing.
- Fix: Attempt at fixing #SuperMemoAssistant/228
- Several other minor updates
- Plugin Manager is now initialized on startup (but plugins are still run after SM has started)
- Plugin enabled/Disabled is temporarily hidden
- Remove Hint Pattern from the option UI
- Improved Documentation
- Several other fixes & additions
- Plugin system is now fully functional
- Migrated most of the projects to NuGet and referenced them instead of having local project dependencies
- Several smaller UI improvement (Collection Selection, Settings, etc.)
- Started documenting the project
- Refactoring & many minor other additions & fixes
- (Settings) Browse plugins WIP
- (PluginManager) Moved Plugin management core features to their own NuGet package "PluginManager.Core"
- (ElementWdw) Added GenerateCloze and GenerateExtract (new API)
- (ElementWdw) Changed LearningMode to its enum instead of int
- (ElementRegistryBase) Added WaitForElement** methods
- (ElementRegistry17) Fixed crash when unknown element types are produced
- (Plugins) Changed the copy destination to MyDocuments\SuperMemoAssistant\Plugins
- (Plugins) Added DevSandboxPlugin
- (ModuleInitializer) Fixed no exception logging (Anotar reload needed)
- (SMATaskbarIcon) Fixed OnSMStarted crashing due UI access from another thread
- (RemotingConfiguration.CustomErrorsMode) Moved config to static constructors in SMA, InjectLib, SMAPluginBase
- (Configs) Renamed StartupCfg to CoreCfg
- (Configs) Split CoreCfg into two subclasses (UpdateCfg and StartupCfg)
- (Configs) Moved Update configs from App.config to CoreCfg.json
- (Sentry) Moved sentry api token to a parameter
- (Solution) Added NuPack* solution configurations (see MSBuild.Tools)
- (Solution) Cleaned and optimized solution's configurations & platforms
- (Sys.IO.*) Moved Sys.IO.* file and directory facilities to their own NuGet Extensions.System.IO
- (Extensions.System.IO) Added submodule
- Many other minor fixes & enhancements
- Turned SuperMemoAssistant.Services.Sentry in a class library
- Minor fixes
- SMA Installer (Debug only)
- SMA is now located in %LocalAppData%\SuperMemoAssistant, and its data (plugins, configs, logs) in %UserProfile%\Documents\SuperMemo Assistant
- Created a nuget for libs/mhshtml/Microsoft.mshtml.dll called "SuperMemoAssistant.mshtml"
- Several minor improvements & fixes
- Installer (WIP)
- Minor AppHost refactoring
- Minor additions & fixes
- Collection config #56
- added ability to query current learning mode
- Improved KeyboardHook logging
- App.xaml.cs: Replaced Environment.Exit with Shutdown
- SMATaskbarIcon: Fixed null issue when right clicking the tray icon
- NativeDataCfg.json: Updated versions number
- InjectLib: Better exception handling
- Several minor additions, bug fixes, cleanup
- Minor fix
- Enhanced concept handling
- Several minor fixes/additions (Extensions, RemoteTasks, ..)
- Package update
- Open collection through command line
- Minor other improvements & fixes
- Improved logging
- Fix attempt for borderless window for SM18
- Minor cleanup
- Validate SMA location
- Better exception logging for RemoteTask
- Cleanup
- Cleaning up
- VS upgrade
- Multi-sm version system seems to work OK.
- Not quite sure about the direction SMNatives is taking. This is a restore point.
- Multi-Version handling WIP
- Several fixes
- Several minor fixes
- Auto-subfolder, Better element creation control, child per branch setting, minor fixes
- Few additions, Several minor fixes & sanity checks
- ElementRegistry: Element batch creation
- XamlControlHtml: Fixed encoding
- ElementBuilderEx: Improved references + title
- Additions, fixes, ...
- Layout / Layout editor
- Several fixes/improvements (logging, keyboard hook scope, ...)
- Settings, UI, ...
- Layouts
- Other fixes/refactoring/...
- Plugin isolation
- Settings (plugins, layouts, ...)
- Plugin isolation + UI
- Lot of refactoring + improvements
- Remoting/plugin interop additions/fixes
- Finalizing plugin isolation
- Some refactoring
- Upgraded all projects to .NET 7.2
- Many other fixes/additions
- Plugin Manager
- Plugin package management system
- Optimized registries I/O processing
- Vast refactoring
- New element Layout system based on WPF + XAML
- Refactored native calls to only use SM17Natives
- Native calls: Added ShowNextElementInLearningQueue
- Native calls: Added SetElementState
- Native calls: Added ExecuteUncommitedRepetition
- Native calls: Added ScheduleInInterval
- Native calls: Added ForceRepetitionExt
- Native calls: Added ForceRepetitionAndResume (special handling)
- Native calls: Added RestoreLearningMode
- Native calls: Added PostponeRepetition (special handling)
- NuGet: Added DeviceId package
- Sentry: Added User context
- Sentry: Updated to 1.1.0
- Span: Added object holder child class
- Interop: Added SM LearningMode, DisplayState enums
- Several minor changes/additions
- LoadAssembliesOnStartup
- NativeFuncScanner overhaul (caching, centralized procedure store, ...)
- CorePlugin + CoreCfg
- Disabled InitOnLoad
- Fix for Delete preventing update in ElementBase
- Changed default ElementBuilder.TextContent Encoding to Unicode
- Refactored Svc
- Several minor fixes/refactor
- Improved Element/Component builder
- PluginHost/App WIP
- Fixing KeyboardHook.cs
- Started removing FlaUI library
- Handle WM_QUIT in WndProc
- Smaller fixes
- New MainThread execution method
- New keyboard hotkey capture method
- Configured Serilog Logger
- Many fixes/additions
- Many core addition, improvements, bug fixes
- Renamed ControlWeb to ControlHtml.cs
- ElementRegistry: Image creation
- ElementBuilder: New IContent interface & TextContent/ImageContent classes for a more modular element creation system
- ElementClipboardBuilder.cs: Renamed from ElementClipboard.cs
- ElementClipboardBuilder.cs: Handle images
- Image: Several fixes for image registry member
- IRegistryMember: Added Empty, UseCount properties
- Signed-off-by: Alexis <>
- CollectionSelectionWindow: Auto-select first collection
- CollectionSelectionWindow: Enter and Alt+O keyboard shortcut to open collection
- ControlWeb: Fixed exception in setting outerHtml (use innerHtml instead)
- ElementRegistry/ElementBuilder: Images + refactored
- Text/Image/...Registry: Added native (sm) registry ptr
- ImageRegistry: Add image to native (sm) registry
- ElementWdw: Added Delete, FocusWindow + Try/catches on native calls
- ISuperMemo: Added IgnoreUserConfirmation
- CollectionFSService: Added method to get plugin resources path
- Keys: Added shift modifier
- Collection selection interface
- Implemented program flow
- ControlWeb::GetDocument now retries 5 times on ElementNotAvailableException and TimeOutException
- Several small fixes
- AppDomain serialization fixes
- Setup Svc & System.Windows.Application in PluginHost
- Minor fix to ComponentRegistry (component groups did not get inserted while loading)
- Introduced LastElement to DisplayElementChanged event
- Services.Svc refactoring
- Initial Commit