I am familiar with WinForms and MFC which are both built on top of the WIN32 API. So really in either of those two, when you call for a Button
in the background that framework calls multiple API functions to get the work done.
So my question is, do all other libraries interact with windows via the WIN32 API?
The only other one I can think of is WPF (Maybe Qt? Idk what Qt is at all), I am not familiar with anything else.
The Windows API is the public programming interface for Windows, and any (desktop) application running on Windows will eventually call into the Windows API to get things done. This is accomplished through different levels of abstraction:
- An application written in C accessing the Windows API, without CRT support will directly use the services provided through the Windows API.
- An application written in C or C++ using the CRT will use a mix of directly calling into the Windows API and using the CRT's abstraction. For example, memory allocations using
malloc
or new
will be mapped to Windows API calls by the CRT.
- Applications using a C++ framework like MFC, Qt, or WTL can still call the Windows API directly, but will usually use the services provided by the framework. The services provided by the framework will eventually call into the Windows API.
- .NET applications compiled to Common Intermediate Language (CIL) will be compiled to native code by the Common Language Runtime (CLR). The services provided by the CLR are implemented on top of the Windows API.
- Scripting languages like VBScript are executed by an execution environment (e.g. the Windows Scripting Host for VBScript). This execution environment is implemented on top of the Windows API as well.
The only exception I could think of is WinRT. Some parts of WinRT use existing Windows services by means of the Windows API. Other parts are completely new from top to bottom, and directly interact with the kernel.
There is also the possibility to sidestep the Windows API and directly interact with the kernel through the Native API. This, however, is not publicly documented, and not an official programming interface.