In today’s post, we’re covering how PC software can leverage the rich functionality of Windows 10. This is valuable background for the post, “Adding UWP Features to your Existing PC Software,” which goes into even more detail on the topic.
So here’s a question that generates a lot of confusion. Can PC software written in WPF, WinForms or MFC access the Windows 10 APIs used by the Universal Windows Platform (UWP)?
The answer is yes. There are some exceptions to this rule (and we’ll go over how to find them), but in general you can access the Windows 10 APIs. Or put a different way, there are no secret APIs being kept away from Windows developers.
How to access the Windows 10 APIs from WPF
You can access the Windows 10 APIs from a pre-existing WPF project. To do so, go to your Solution Explorer window and …
- Right click on References. Select “Add Reference…” from the context menu. On the left of the Reference Manager, choose Browse and find the following file: C:Program Files (x86)Windows Kits10UnionMetadatawinmd. Add it to your project as a reference. Note: You will need to change the filter to “All Files”.
- Right click on References. Select “Add Reference…” from the context menu. On the left of the Reference Manager, go to Browse and find the directory “C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETCorev4.5”. Add System.Runtime.WindowsRuntime.dll to your project.
Let’s say I want to make my WPF application location aware by calling on the Geolocator class in the Windows 10 Windows.Devices.Geolocation API. I can now do this and even use the asynchronous pattern common in UWP. Classes and methods I commonly think of as UWP code are now interweaved with classes and methods from WPF. In the example show below, I take my latitude and longitude from Geolocator and display it in a WPF MessageBox.
[code lang=”csharp”]
private async void Button_Click(object sender, RoutedEventArgs e)
{
var locator = new Windows.Devices.Geolocation.Geolocator();
var location = await locator.GetGeopositionAsync();
var position = location.Coordinate.Point.Position;
var latlong = string.Format(«lat:{0}, long:{1}», position.Latitude, position.Longitude);
var result = MessageBox.Show(latlong);
}
[/code]
How do I know which APIs are available?
As mentioned above, there are exceptions to the rule that Windows 10 APIs are accessible from PC software. The first big exception concerns XAML UI APIs. The XAML framework in UWP is different from the one in WPF and you really don’t want to be mixing them up, anyways.
The second set of APIs that you can’t use are ones that depend on an app’s package identity. UWP apps have package identities while PC software does not. Package identity information can be found in the app manifest file.
How do you determine which Windows 10 APIs require a package identity and which do not? The easiest way is to refer to this MSDN topic.
Unlocking even more APIs
There’s actually a way to provide PC software with a package identity. The Desktop Bridge lets you package PC software for deployment in the Windows Store. As part of this process, you create an app manifest file for it, effectively giving it a package identity.
[code lang=”xml”]
<?xml version=»1.0″ encoding=»utf-8″?>
<Package xmlns=»http://schemas.microsoft.com/appx/manifest/foundation/windows10″
xmlns:uap=»http://schemas.microsoft.com/appx/manifest/uap/windows10″
<Identity Name=»YOUR-APP-GUID-90cd-a7cdf2e0a180″
Publisher=»CN=YOUR COMPANY»
Version=»1.x.x.x» />
</Package>
[/code]
If you package your PC software for the Windows Store using Desktop Bridge, then most of the APIs you couldn’t previously use, because they require a package identity, will be available to you. APIs that depend on CoreWindow will still be a problem. However, once you have a desktop bridge package, you can add a UWP component (that runs in a separate app container process), and call literally any UWP API from there.
A quicker way to get at those Windows 10 APIs
But say you don’t want to deploy to the Windows Store at the moment and just want to use some of those Windows 10 APIs. How do you get to them from your app?
There’s a NuGet package for that. It’s called UwpDesktop and is written by Vladimir Postel and Lucian Wischik. If you want to examine the source code, it is maintained on GitHub.
For demonstration purposes, let’s build a console app based on a 2012 article by Scott Hanselman on using WinRT APIs (partly to show how much easier it is to do today). After creating a new desktop console application, insert the original code from 2012 into the Main method in Program.cs.
[code lang=”csharp”]
static void Main(string[] args)
{
LightSensor light = LightSensor.GetDefault();
if (light != null)
{
uint minReportInterval = light.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
light.ReportInterval = reportInterval;
light.ReadingChanged += (s, a) =>
{
Console.WriteLine(String.Format(«There was light! {0}», a.Reading.IlluminanceInLux));
};
}
while (Console.ReadLine() != «q») { }
}
[/code]
This code sadly will not compile because .NET 4.5 doesn’t know what the LightSensor class is, as shown below.
Here’s how we fix that. Install the UWPDesktop package to your project using the NuGet Package Manager.
Back in Program.cs, add the following using directive to the top of the file:
[code]
using Windows.Devices.Sensors;
[/code]
Next … well, actually that’s all it took. The app works now (assuming you have a light sensor attached to your computer).
And that’s the quick way to go about using Windows 10 APIs in a managed app.
How to access the Windows 10 APIs from C++
Calling Window 10 APIs isn’t just for managed code. You’ve also always been able to call them from C++ native apps.
Start by creating a new C++ Win32 application project. Alternatively, open a pre-existing C++ windows application project. Right click on your project and select Properties to bring up the configuration window. There are just four steps required to configure your application to make Windows 10 API calls.
- Select the Configuration Properties > C/C++ > General node in the left pane. Set the Consume Windows Runtime Extension property to Yes.
- In the same window, edit the Additional #using Directories property, adding the following entries:
- C:Program Files (x86)Microsoft Visual Studio 14.0VCvcpackages;
- C:Program Files (x86)Windows Kits10UnionMetadata;
- C:Program Files (x86)Windows Kits10ReferencesWindows.Foundation.UniversalApiContract1.0.0.0;
- C:Program Files (x86)Windows Kits10ReferencesWindows.Foundation.FoundationContract1.0.0.0;
- Select the Configuration Properties > C/C++ > Code Generation node in the left pane. Set the Enable Minimal Rebuild property to No.
- Last of all, select the Configuration Properties > General node and pick your Target Windows 10 version. Click OK to save your configuration settings.
Now you can start calling Windows APIs. Let’s finish off this app with something easy – calling the Launcher API from the C++ menubar.
Add the following using directives to the top of your project’s main CPP file:
[code lang=”csharp”]
using namespace std;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::System;
Include the header ROApi.h in your stdafx.h file.
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#include «ROApi.h»
Initialize Windows::Foundation in your program’s entry point.
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
Windows::Foundation::Initialize();
}
[/code]
Initialize Windows::Foundation in your program’s entry point.
[code lang=”csharp”]
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
Windows::Foundation::Initialize();
}
[/code]
By default the Help menu only has one entry for About, so you will need to add a new button. Define the button in your Resource.h file:
#define IDM_SETTINGS 106
Then edit the *.rc file to add a new button for settings, in order to launch the Windows 10 Settings app.
[code]
IDC_HELLOWORLDWIN32TOUWP MENU
BEGIN
POPUP «&File»
BEGIN
MENUITEM «E&xit», IDM_EXIT
END
POPUP «&Help»
BEGIN
// add settings item to help menu around Line 47
MENUITEM «&Settings …», IDM_SETTINGS
MENUITEM «&About …», IDM_ABOUT
END
END
[/code]
Finally, override the callbacks for the menubar buttons to make them call the Windows 10 Launcher instead of whatever they are supposed to do.
[code lang=”csharp”]
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_SETTINGS:
Launcher::LaunchUriAsync(ref new Uri(L»ms-settings://»));
break;
case IDM_ABOUT:
Launcher::LaunchUriAsync(ref new Uri(L»https://blogs.windows.com/buildingapps//»));
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
}
}
[/code]
Clicking on Help > Settings will bring up the Windows 10 Settings app, while clicking on Help > About will bring you to this blog (one of my favorite places)!
Let’s go one level deeper. There are many C++ applications and games out there that use alternative build tools and alternative build processes. Many of them continue to target older versions of Windows because this is what their customers are using. How can these application developers gradually move over to the Windows 10 APIs without abandoning their Windows 7 clients?
Reusing the same steps above for building a Windows executable, one could build a DLL to encapsulate any Windows 10 calls one might need, isolating them from the rest of the application. Let’s call this new DLL UWPFeatures.dll.
[code lang=”csharp”]
void Game::UpdateTile(int score, int hiScore)
{
HINSTANCE hinstLib;
UPDATETILE UpdateTileProc;
BOOL fFreeResult;
hinstLib = LoadLibrary(TEXT(«UWPFeatures.dll»));
if (NULL != hinstLib)
{
UpdateTileProc = (UPDATETILE)GetProcAddress(hinstLib, «UpdateTile»);
if (NULL != UpdateTileProc)
{
(UpdateTileProc)(score, hiScore);
}
fFreeResult = FreeLibrary(hinstLib);
}
}
[/code]
Then in the original application, method calls should check to see if the UWPFeatures.dll is packaged with the application (which will be true for Windows 10 installs). If it is present, it can be loaded dynamically and called. If it isn’t present, then the original call is made instead. This provides a quick pattern for not only accessing the Windows 10 APIs from pre-existing C++ games and applications, but also for doing it in a way that doesn’t require heavy reworking of the current base code.
Wrapping up
It has sometimes been claimed that Windows 10 has secret APIs that are only accessible through UWP apps. In this post, we demonstrated that this is not the case and also went over some of the ins and outs of using Windows 10 APIs in both managed and native desktop apps. You will find links below to even more reference materials on the subject.
Did you find this post helpful? Please let us know in the comments below—and also let us know if there’s anything else you’d like us to dig into for you about this topic.
Want to go a step further? Be sure to come back next week for our next blog, where we go into more detail about adding a UWP feature to your existing PC software with the Desktop Bridge.
- UWP APIs callable from desktop applications
- Calling UWP APIs from a desktop application
- This NuGet package lets you use UWP APIs from your desktop apps
- Desktop Bridge
- UWP package identity
- Call WinRT APIs from C# Desktop Applications (Win
Did you know that you can call Windows 10 WinRT APIs from your WPF and WinForms apps? In this blog post I’ll show you how to display toast messages from a WPF application by using the Windows 10 ToastNotificationManager.
In the previous blog post you learned that you can host UWP Controls in WPF, WinForms, and Win32 with a technology called XAML Islands.
But sometimes you don’t want to include a UWP Control in your WPF app. Instead, you want to call a Windows 10 API. Or maybe you want to do both: Include a UWP control and call a Windows 10 API. In any case, you need to reference the Windows 10 WinRT APIs in your WPF project. Let’s see how to do this.
Reference the Windows 10 WinRT APIs in your WPF project
If you’ve tried already in the past to use Windows 10 WinRT APIs in WPF, you might have come across documentation that said that you have to reference several files …
- … from .NET Framework – like System.Runtime.WindowsRuntime.dll
- and from the corresponding Windows SDK, like Windows.Foundation.UniversalApiContract.winmd
This is not necessary anymore. Microsoft made this whole process much simpler.
All you need to do to use Windows 10 WinRT APIs in your WPF project is to install the NuGet package Microsoft.Windows.SDK.Contracts.
That package is the the so-called Windows 10 WinRT API Pack . Let me quote the package description:
The Windows 10 WinRT API Pack enables you to add the latest Windows Runtime APIs support to your .NET Framework 4.5+ and .NET Core 3.0+ libraries and apps. This package includes all the supported Windows Runtime APIs up to Windows 10 version 1903
Wow, amazing. Just adding a single NuGet package and it works. Let’s try it.
Add the NuGet package
Let’s create a brand new WPF application and let’s install the NuGet package Microsoft.Windows.SDK.Contracts. It’s still in preview, so ensure to check the “Include prerelease” option like below:
When you look at the dependencies of the Microsoft.Windows.SDK.Contracts package, you can see that it brings in the other stuff that you had to add manually before this package existed, like the System.Runtime.WindowsRuntime.dll that I mentioned above:
Switch from packages.config to PackageReference
When you install the Microsoft.Windows.SDK.Contracts NuGet package in a .NET Core WPF app, you’re fine. But in a .NET Framework WPF app, you have to switch the NuGet package management format from packages.config to PackageReference, else it won’t work. The description of the Microsoft.Windows.SDK.Contracts package contains also this statement:
Requires default package management format set to PackageReference, and NuGet 4.0 or higher.
If you have a .NET Framework WPF app that still uses packages.config, just right-click on “References” in the Solution Explorer. In the context menu you find a menu item to“Migrate packages.config to PackageReference”, as you can see in the screenshot below.
After you clicked that menu item, the packages.config file will be deleted and the references to the NuGet packages are stored in the .csproj file. Great, now installing the NuGet package Microsoft.Windows.SDK.Contracts works fine, and you should see that package including its dependencies in the references like below:
Now, no matter if you’re using .NET Core 3 or .NET Framework, you’re ready to display a toast message from your WPF app. Let’s write the code.
Display a Toast Message
Let’s add a simple Button in the MainWindow.xaml file:
<Button Content="Show Toast"
Padding="10"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Click="ButtonShowToast_Click"/>
In the codebehind file (MainWindow.xaml.cs), let’s add this ButtonShowToast_Click event handler:
private void ButtonShowToast_Click(object sender, RoutedEventArgs e)
{
string title = "The current time is";
string timeString = $"{DateTime.Now:HH:mm:ss}";
string thomasImage = "https://www.thomasclaudiushuber.com/thomas.jpg";
string toastXmlString =
$@"<toast><visual>
<binding template='ToastGeneric'>
<text>{title}</text>
<text>{timeString}</text>
<image src='{thomasImage}'/>
</binding>
</visual></toast>";
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(toastXmlString);
var toastNotification = new ToastNotification(xmlDoc);
var toastNotifier = ToastNotificationManager.CreateToastNotifier();
toastNotifier.Show(toastNotification);
}
As you can see in the code snippet above, the ButtonShowToast_Click event handler initializes a toastXmlString variable with a valid toast template. Then it loads that string into an XmlDocument (the WinRT one from the namespace Windows.Data.Xml.Dom). Next a ToastNotification object is created with that XmlDocument.
Then a ToastNotifier instance is created by calling the static CreateToastNotifier method of the ToastNotificationManager class. Finally, the Show method is called on that ToastNotifier instance to show the toast notification.
You can just copy paste that code snippet into your app. When you place the cursor on the ToastNotificationManager class, you can press “CTRL+.” and Visual Studio will suggest you to add a using directive for the WinRT namespace Windows.UI.Notifications, as you can see below:
For the XmlDocument class, you need to add a using directive for Windows.Data.Xml.Dom (and not for the .NET variant that lives in System.Xml). The using directives of the MainWindow.xaml.cs file look like below. As you can see, a nice mixture between .NET and WinRT namespaces:
using System;
using System.Windows;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
Now let’s run the application and let’s push the “Show Toast”-Button in the MainWindow.
Oh no, we get an Exception at the line where the CreateToastNotifier method is called. It says “Element not found”. What does this mean?
The problem here is that your WPF application doesn’t have a package identity. A UWP app has a package identity, and it is installed in Windows 10 with that identity. But a WPF app doesn’t have such an identity, so let’s create one.
Create an Identity for Your WPF App
You can easily create an identity for your WPF app by packaging it as MSIX. To do this, just add a Windows Application Packaging Project to your solution. In the previous blog post we used the Windows Application Packaging Project already to target a specific windows version with WPF. This time we need that Packaging Project to get an identity, and in addition, that Packaging Project let’s us target a specific windows version. So let’s add it. Let’s right-click the solution and let’s add a new Windows Application Packaging Project.
My WPF project is called “WpfCallingWin10Api.Framework”. Let’s call the packaging project “WpfCallingWin10Api.Framework.App“. The creation shows the dialog below, where I select 18362 as a minimum version:
After that packaging project was added to the solution, you have to right-click the “Applications” node in Solution Explorer to reference the WPF project. Finally, set the packaging project as a startup project. The final result should look like this:
Now with the Packaging Project set as a start up project, let’s try the app again, as we have now an identity.
Let’s Toast It!
Let’s run the application and let’s click the “Show Toast”-Button.
*drumroll*
And voilà! In the bottom right corner of my screen, above the icon tray, appears a nice toast that displays the current time like we’ve specified it with the toast template, including the thomas.jpg that we’ve also specified in that toast template.
Fantastic, it just works!
And all that was necessary were these 2 steps:
- Installing the NuGet package Microsoft.Windows.SDK.Contracts
- Packaging the WPF app, so that it gets an identity.
Go and Grab the Code!
I have created this sample for you with .NET Framework and .NET Core. Grab the .NET Framework and .NET Core solutions from this Git repository to try it on your own, and don’t forget to set the packaging project as a startup project:
https://github.com/thomasclaudiushuber/Wpf-Calling-Win10-WinRT-Toast-Api
Can we talk again about XAML Islands?
Sure. What’s the question?
Hey Thomas, at the beginning of this blog post you wrote this:
“… sometimes you don’t want to include a UWP Control in your WPF app. Instead, you want to call a Windows 10 API. Or maybe you want to do both: Include a UWP control and call a Windows 10 API. In any case, you need to reference the Windows 10 WinRT APIs in your WPF project. Let’s see how to do this. “But in your previous blog post where you used XAML Islands to display the UWP MapControl in a WPF app, you neither referenced the UWP .winmd file, nor did you install the Microsoft.Windows.SDK.Contracts package. But in this blog post you’re saying “In any case, you need to reference the Windows 10 WinRT APIs in your WPF project.”
In your previous blog post you didn’t add a reference, why did it work there?
Ok, let’s answer this.
In the previous blog post we installed the NuGet package Microsoft.Toolkit.Wpf.UI.Controls. That package contains wrapper controls for WPF that make the usage of UWP controls like MapControl and InkCanvas straight forward. Or in other words: That package makes the usage of XAML Islands straight forward.
We installed the preview4 version of that NuGet package. And now go and click here on this NuGet link to look at the Dependencies of the preview4 version of that package, the latest available version.
Instead of clicking on the link above, you can also manage NuGet packages in Visual Studio, search for that preview version of the Microsoft.Toolkit.Wpf.UI.Controls package, click on it and look at its dependencies. The dependencies of that Microsoft.Toolkit.Wpf.UI.Controls package look like below. Do you notice something?
Exactly, the package Microsoft.Toolkit.Wpf.UI.Controls has a dependency on Microsoft.Windows.SDK.Contracts.
That means in other words: If you’re using that XAML Islands NuGet package, you automatically get access to the Windows 10 WinRT APIs, as Microsoft.Windows.SDK.Contracts is added too, as it is a dependency.
Isn’t this awesome? I love it!
Happy coding,
Thomas
Windows 10: How to get started with windows 10 APIs?
Discus and support How to get started with windows 10 APIs? in Windows 10 Ask Insider to solve the problem; I have simple tasks that i need to trigger, but i don’t know how to communicate with windows APIs, what language do i use, what are those APIs for…
Discussion in ‘Windows 10 Ask Insider’ started by /u/yassinebridi, Mar 27, 2020.
-
How to get started with windows 10 APIs?
I have simple tasks that i need to trigger, but i don’t know how to communicate with windows APIs, what language do i use, what are those APIs for every task that i want to trigger.
For example: i want trigger Dark mode with a single click.
submitted by /u/yassinebridi
[link] [comments] -
Windows 10 Tweaks
Pressing “Windows+Pause Break” (it’s up there next to scroll lock) opens the “System” Window.
Windows 10: In the new version of Windows, Explorer has a section called Quick Access. This includes your frequent folders and recent files. Explorer defaults to opening this page when you open a new window. If you’d rather open the usual This PC, with links to your drives and library folders, follow these steps:
- Open a new Explorer window.
- Click View in the ribbon.
- Click Options.
- Under General, next to “Open File Explorer to:” choose “This PC.”
- Click OK
credit to Lifehacker.
-
Unlocked Realtek HD Audio Drivers Windows 7 & 8 (With Dolby Digital Live and DTS Interactive)DTS supported natively by Windows 8/8.1 and it should work on windows 10 too just DDL require to unlock your driver .
-
How to get started with windows 10 APIs?
Is it time for Windows 10 already?
Here’s a good step by step guide on doing a fresh install.
How to clean install Windows 10 from a USB drive — Software — Feature — HEXUS.net
How to get started with windows 10 APIs?
-
How to get started with windows 10 APIs? — Similar Threads — started APIs
-
This device cannot start. Code 10 Insufficient system resources exist to complete the API….
in Windows 10 Gaming
This device cannot start. Code 10 Insufficient system resources exist to complete the API….: This device cannot start. Code 10 Insufficient system resources exist to complete the API. with Nvidia Geforce Tesla K80.can I reallocate resources I remember doing this in Win 95?… -
This device cannot start. Code 10 Insufficient system resources exist to complete the API….
in Windows 10 Software and Apps
This device cannot start. Code 10 Insufficient system resources exist to complete the API….: This device cannot start. Code 10 Insufficient system resources exist to complete the API. with Nvidia Geforce Tesla K80.can I reallocate resources I remember doing this in Win 95?… -
api-ms-win-core-path-l1-1-0.dll is missing from your computer. when trying to start qmeu-img
in Windows 10 Gaming
api-ms-win-core-path-l1-1-0.dll is missing from your computer. when trying to start qmeu-img: i install qemu recently and when i trying running it it gave me this error message Do you know any souloution ??https://answers.microsoft.com/en-us/windows/forum/all/api-ms-win-core-path-l1-1-0dll-is-missing-from/1e20f113-18f1-4a79-a40a-f84a26a6c5d9
-
api-ms-win-core-path-l1-1-0.dll is missing from your computer. when trying to start qmeu-img
in Windows 10 Software and Apps
api-ms-win-core-path-l1-1-0.dll is missing from your computer. when trying to start qmeu-img: i install qemu recently and when i trying running it it gave me this error message Do you know any souloution ??https://answers.microsoft.com/en-us/windows/forum/all/api-ms-win-core-path-l1-1-0dll-is-missing-from/1e20f113-18f1-4a79-a40a-f84a26a6c5d9
-
Http error 500 Invalid Query while calling BizTalkManagementService API HostInstances Start…
in Windows 10 Gaming
Http error 500 Invalid Query while calling BizTalkManagementService API HostInstances Start…: I am trying to do PUT calls via Postman to following endpoints of BizTalkManagementService Rest API in BizTalk 2020,But getting http error «500 Invalid Query» as shown below, while PUT calls to other endpoint works fine. For example… -
Http error 500 Invalid Query while calling BizTalkManagementService API HostInstances Start…
in Windows 10 Software and Apps
Http error 500 Invalid Query while calling BizTalkManagementService API HostInstances Start…: I am trying to do PUT calls via Postman to following endpoints of BizTalkManagementService Rest API in BizTalk 2020,But getting http error «500 Invalid Query» as shown below, while PUT calls to other endpoint works fine. For example… -
I’m getting a api-ms-win-core-com-l1-1-0.dll missing error when trying to start the game…
in Windows 10 Gaming
I’m getting a api-ms-win-core-com-l1-1-0.dll missing error when trying to start the game…: Hello,I am just trying to start this game I mention in the title. I will provide all the contract I had with epic tech support if that may help. The support staff are all using nicknames, so there’s no breach of private data. This is me talking to them, trying to solve this… -
I’m getting a api-ms-win-core-com-l1-1-0.dll missing error when trying to start the game…
in Windows 10 Software and Apps
I’m getting a api-ms-win-core-com-l1-1-0.dll missing error when trying to start the game…: Hello,I am just trying to start this game I mention in the title. I will provide all the contract I had with epic tech support if that may help. The support staff are all using nicknames, so there’s no breach of private data. This is me talking to them, trying to solve this… -
Missing file api-ms-win-core-com-l1-1-0.dll and unable to start the game Wolfenstein: The…
in Windows 10 Gaming
Missing file api-ms-win-core-com-l1-1-0.dll and unable to start the game Wolfenstein: The…: Hello, I recently got the aforementioned game. When trying to start it, I get the following error:»The program can’t start because api-ms-win-core-com-l1-1-0.dll is missing from your computer. Try reinstalling the program to fix this problem.»I looked around for a solution,…
Решая проблемы с работой какого-либо устройства, открыв его свойства, пользователи могут увидеть сообщение об ошибке «Недостаточно системных ресурсов для завершения вызова API» с кодом 10 в диспетчере устройств.
В этой инструкции о способах исправить ошибку в Windows 11 и Windows 10 и вернуть работоспособность устройства.
Обновления Windows
Если до недавнего времени устройство работало исправно, а после установки недавних обновлений системы стало сообщать об ошибке, возможно, причина именно в обновлении Windows.
Например, в начале 2025-го года (спасибо комментаторам, которые сообщили), после установки обновлений безопасности и накопительного обновления (упоминаются номера KB5049981 и KB5050021) в системе был обновлён драйвер wdma_usb.inf который привёл к ошибке «Недостаточно системных ресурсов для завершения вызова API» на внешних аудио-устройствах пользователей. Не исключено, что подобное может повториться и это следует учитывать.
Возврат прошлогодней версии драйвера или удаление обновлений позволило решить проблему. Здесь могут быть полезными материалы: Как удалить обновления Windows 11, Как удалить обновления Windows 10.
UpperFilters и LowerFilters
Прежде чем приступать к использованию далее описанных способов решения проблемы, рекомендую создать точку восстановления системы: есть вероятность того, что что-то пойдёт не так — все действия под вашу ответственность.
Основной способ исправить ошибку «Недостаточно системных ресурсов для завершения вызова API» — изменить параметры в реестре для соответствующего класса устройств, шаги будут следующими:
- В диспетчере устройств, в свойствах устройства с ошибкой перейдите на вкладку «Сведения» и выберите «GUID класса» в поле «Свойство», не закрывайте окно.
- Нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter для запуска редактора реестра.
- Перейдите к следующему разделу, где в качестве GUID класса следует использовать значение, полученное на 1-м шаге:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{GUID_класса}
- При наличии в этом разделе параметров с именами LowerFilters и UpperFilters — удалите их: нажмите правой кнопкой мыши по параметру — «Удалить».
- Перезагрузите компьютер.
Проверьте, решило ли это проблему с работой устройства: возможно, ошибка будет исправлена.
Параметры управления памятью в реестре
Следующий вариант — изменить параметры управления памятью в реестре Windows. Как и в предыдущем случае, имеет смысл озаботиться созданием точки восстановления, прежде чем приступать. Дальнейшие действия:
- Нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter.
- Перейдите к разделу
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management
- При отсутствии параметров DWORD с именами PoolUsageMaximum и PagedPoolSize, создайте их: правый клик мышью в пустом месте правой панели реестра — Создать — параметр DWORD (32 бита), даже для x64 систем, после чего укажите приведённые имена параметров.
- Дважды нажмите по параметру PoolUsageMaximum и измените его значение на 60 в десятичном представлении, нажмите «Ок».
- Тем же образом измените значение параметра PagedPoolSize, установив для него FFFFFFFF в шестнадцатеричном представлении.
- Перезагрузите компьютер.
После перезагрузки проверьте, была ли решена проблема с работой устройства.
Некоторые дополнительные возможные нюансы и варианты решения проблемы:
- Если вы столкнулись с ошибкой после изменения параметров файла подкачки, попробуйте вернуть его параметры по умолчанию. Подробнее: настройка файла подкачки в Windows.
- В случае, если до недавнего времени проблема не наблюдалась, попробуйте использовать точки восстановления системы на дату до появления ошибки: нажмите клавиши Win+R на клавиатуре, введите rstrui и нажмите Enter, выберите подходящую точку восстановления.
- В некоторых случаях причиной сбоя может оказаться установка стороннего антивируса: если в последнее время вы устанавливали такой, попробуйте его удалить.
- Ошибка «Код 10» в диспетчере устройств может иметь и другие описания и соответствующие подходы к исправлению проблемы, подробнее: Код 10 — Запуск этого устройства невозможен.
Надеюсь, инструкция была полезной: будет отлично, если в комментариях ниже вы сможете рассказать, какой из вариантов помог решить проблему.
После выхода нового поколения приставок появилось много разговоров о быстрой загрузке в играх и возможности появления этой технологии на компьютерах с операционной системой Windows. Спустя некоторое время Майкрософт представила технологию Direct Storage, которая должна принести быструю загрузку и на ПК.
В данной статье мы расскажем о том, что такое Direct Storage в Windows 11 и Windows 10, что требуется для работы этой технологии, а также как включить Direct Storage на Windows 11 или Windows 10.
Содержание
Что такое Direct Storage в Windows 11 и Windows 10
Direct Storage или DirectStorage API – это новый API из семейства DirectX, который доступен на Windows 11 и Windows 10 и предназначен для ускорения загрузки игр. Данная технология позволит создавать большие виртуальные миры и быстро загружать их при необходимости, что должно принести в игры новые игровые механики и в целом улучшить игровой опыт пользователей.
Изначально Майкрософт создавала Direct Storage как DirectX API для консолей Xbox Series X и S. Но, позже было заявлено, что эта технология появится и на Windows. Сейчас Direct Storage поддерживается на Windows 11 и Windows 10 (начиная с версии 1909 и выше). Также данная технология поддерживается последними поколения видеокарт, но поддержки со стороны игр пока нет. Ожидается, что первые игры для ПК с поддержкой Direct Storage появятся не ранее 2022-года.
Принцип работы DirectStorage API заключается в ускорении загрузки данных с накопителя в память видеокарты и к графическому процессору. Дело в том, что современные игры загружают много данных. Чтобы не перегружать вашу память, игры разбивают различные элементы, например текстуры, на более мелкие части. После этого они загружают только те части, которые необходимы для текущей игровой сцены.
К сожалению, использование подобного подхода приводит к созданию большого количества запросов. А современные API для этого не оптимизированы, они обрабатывают каждый запрос индивидуально. Что крайне неэффективно для игр, создающих тысячи или десятки тысяч запросов в секунду. В результате современные NMVe-накопители с интерфейсом PCI Express не могут раскрыть весь свой потенциал и заполнить пропускной канал ввода-вывода.
Для решения этих проблем DirectStorage API использует сразу несколько подходов. В частности, сокращается использование вычислительных ресурсов на каждый запрос, а сами запросы группируются в блоки и обрабатываются параллельно с учетом приоритетов.
Также изменяется путь, который проходят данные. Сейчас, когда игре требуются данные с накопителя, то они сначала считываются в оперативную память (RAM), потом поступают в процессор (CPU), где выполняется их распаковка (Decompress), потом возвращаются в оперативную память и только потом передаются в видеопамять видеокарты.
С Direct Storage этот путь значительно упрощается. Данные с накопителя считываются в оперативную память (RAM) и после этого напрямую передаются в видеопамять видеокарты, при этом функция распаковки данных перекладывается на графический процессор (GPU).
Все эти изменения в работе с данными позволяют значительно ускорить загрузку данных с накопителя в видеокарту и использовать возможности NVMe SSD-дисков на полную.
Системные требования Direct Storage
Для работы DirectStorage API требуются некоторые минимальные условия:
- Операционная система Windows 11 и Windows 10 (версии 1909 и выше).
- Накопитель NVMe SSD емкостью от 1 ТБ и с шиной PCI Express 3.0 или выше, который использует стандартный драйвер контроллера NVM Express.
- Видеокарта с поддержкой DirectX 12 Ultimate и Shader Model 6.0. Сейчас это видеокарты GeForce RTX 2000 и RTX 3000 от Nvidia, а также видеокарты с архитектурой RDNA 2 от AMD.
- Поддержка со стороны игры.
Как включить Direct Storage
В интернете можно часто встретить вопросы о том, как включить Direct Storage. Но, для работы этой технологии от пользователей не требуется никаких дополнительных действий. DirectStorage API является частью DirectX, поэтому если ваш компьютер соответствует системным требованиям, то эта API будет доступна и вы сможете ее использовать. Ничего включать отдельно не понадобится.
Другой вопрос, что игр с поддержкой Direct Storage пока нет. Поэтому, сейчас воспользоваться преимуществами данной технологии нельзя, даже если ваш компьютер соответствует системным требованиям. Ожидается, что игры с поддержкой DirectStorage API начнут появляться в 2022 году, но никой точной информации на этот счет пока нет.
Посмотрите также:
- Как узнать какой DirectX установлен
- Как узнать поддерживает ли видеокарта DirectX 9, 10, 11 или 12
- Как проверить совместимость компьютера с Windows 11
- Запуск Windows 11 на этом компьютере невозможен
Автор
Александр Степушин
Создатель сайта comp-security.net, автор более 2000 статей о ремонте компьютеров, работе с программами, настройке операционных систем.
Остались вопросы?
Задайте вопрос в комментариях под статьей или на странице
«Задать вопрос»
и вы обязательно получите ответ.