De Windows API is een set API's (application programming interface) die het besturingssysteem Windows aanbiedt aan programma's. Vroeger noemde men deze de Win32 API. De naam Windows API is echter een betere beschrijving aangezien ondertussen ook 64 bit-Windowsversies ondersteund worden. Bijna alle Windowsprogramma's integreren met de Windows API.

Een softwareontwikkelaar kan gebruikmaken van de Microsoft Windows-SDK (Software Development Kit), die documentatie en tools voorziet om de Windows API en andere Windowstechnologieën te gebruiken.

Overzicht De werking van de Windows API kan verdeeld worden in 8 categorieën: BasisservicesZij voorzien toegang tot de fundamentele bronnen die voor een Windowssysteem beschikbaar zijn. Enkele voorbeelden zijn bestandssystemen, hardware, processen, threads en foutverwerking. Deze functies bevinden zich in de bestanden kernel.exe, krnl286.exe of krnl386.exe voor een 16 bit-Windows, en de bestanden kernel32.dll en KernelBase.dll op 32 bit- en 64 bit-Windowsversies.

Geavanceerde services Deze voorzien toegang tot de werking die een toevoeging is aan de kernel. Enkele voorbeelden zijn het Windowsregister, het systeem opstarten of herstarten, een Windows-service starten/stoppen/aanmaken en gebruikersaccounts beheren. Deze functies bevinden zich in het bestand advapi32.dll op een 32 bit-Windows.

Graphics Device Interface Voorziet de werking om grafische inhoud weer te geven op beeldschermen, printers en andere uitgangsapparaten. Deze interface bevindt zich in gdi.exe op een 16 bit-Windows en in gdi32.dll op een 32 bit-Windows in gebruikersmodus. Ondersteuning voor kernel-mode-GDI is voorzien door win32k.sys, hetgeen rechtstreeks met de grafische driver communiceert.

Grafische Gebruikersinterface Voorziet de werking om vensters te maken en beheren en de meeste basisbewerkingen zoals knoppen, schuifbalken, muis- en toetsenbordinvoer ontvangen, en andere werkingen die te maken hebben met het GUI-deel van Windows. Deze functies bevindt zich in user.exe op een 16 bit-Windows versie, en in user32.dll op een 32 bit-Windows. Sinds Windows XP bevinden de basisbewerkingen zich in comctl32.dll, samen met de common controls (Common Control Library).

Common Dialog Box Library Voorziet de standaard dialoogkaders om bestanden op te slaan, kleur en lettertype te kiezen etc. De bibliotheek bevindt zich in het bestand commdlg.dll op een 16 bit-Windows, en comdlg32.dll op een 32 bit-Windows. De bibliotheek valt onder de User Interface-categorie van de API.

Common Control Library Geeft applicaties toegang tot sommige geavanceerde functies die voorzien zijn door het besturingssysteem. Bijvoorbeeld statusbalken, menubalken en tabbladen. Deze bibliotheek bevindt zich in een DLL-bestand dat comctrl.dll heet in een 16 bit-Windowsversie, of comctl32.dll op een 32 bit-Windowsversie. De bibliotheek valt onder de User Interface-categorie van de API.

Windows Shell Een component van de Windows API die toepassingen toelaat de functionaliteit die de shell van het besturingssysteem biedt aan te spreken en deze functionaliteit ook te veranderen en te verbeteren. Dit onderdeel bevindt zich in shell.dll op een 16 bit-Windowsversie, en in shell32.dll op een 32 bit-Windows. De Shell Lightweight Utility Functions zitten in het bestand shlwapi.dll. Deze component wordt ook gegroepeerd onder de User Interface-categorie van de API.

Netwerk Services Geven toegang tot de verschillende netwerkmogelijkheden van het besturingssysteem. Zijn subcomponenten bevatten onder andere NetBIOS, Winsock, NetDDE, RPC.

Web De webbrowser Internet Explorer kan ook beschouwd worden als onderdeel van de Windows API, aangezien deze verschillende API's biedt die vaak gebruikt worden door andere toepassingen. Internet Explorer zit mee in het besturingssysteem sinds de tweede editie van Windows 98 en biedt webgerelateerde services aan toepassingen sinds Windows 98. Specifieker wordt het gebruikt: als embeddable webbrowsercontrole (in shdocvw.dll en mshtml.dll) als URL-monitorservice (in urlmon.dll) die COM-objecten voorziet aan toepassingen die URL's verwerken om bibliotheken te voorzien die meertalige en internationale tekstondersteuning bieden (mlang.dll) voor DirectX-transformaties, een set van afbeeldingfilterscomponenten voor XML-ondersteuning (de MSXML-componenten bevinden zich in het bestand msxml*.dll)

Multimedia Microsoft voorziet sinds Windows 95 OSR2 elke Windows-installatie van de DirectX-API's. DirectX voorziet een los gerelateerde set van multimedia en gamingservices, zoals: Direct3D voor hardware-accelerated graphics DirectDraw voor hardware-accelerated toegang tot de 2D-framebuffer. Sinds DirectX 9 heeft deze component plaats moeten ruimen voor Direct3D, dat meer algemene grafische werking met hoge performantie voorziet (aangezien 2D-rendering onderdeel is van 3D-rendering) DirectSound voor toegang tot een low-level hardware-accelerated geluidskaart DirectInput voor communicatie met invoerapparaten zoals joysticks en gamepads DirectPlay als multiplayer-gaminginfrastructuur. Deze component is verouderd sinds DirectX 9 en Microsoft het gebruik ervan niet meer aanraadt voor gameontwikkeling DirectShow dat generische multimediapipelines maakt en draait. Het is vergelijkbaar met het Gstreamer-framework en is vaak gebruikt om in-gamevideos te renderen en mediaplayers te maken (Windows Media Player is erop gebaseerd). DirectShow is niet meer aangeraden voor gameontwikkeling DirectMusic van MIDI-bestanden afspelen, maar dit is verouderd

Programma-interactie De Windows API houdt zich vooral bezig met de interactie tussen het besturingssysteem en een toepassing. Voor de communicatie tussen de verschillende Windowstoepassingen onderling heeft Microsoft een reeks technologieën ontwikkeld naast de hoofdzakelijke Windows API. Dit begon met Dynamic Data Exchange (DDE), dat vervangen werd door Object Linking and Embedding (OLE) en later door het Component Object Model (COM), Automation Objects, ActiveX Controls en het .NET-framework. Er is niet altijd een duidelijk onderscheid tussen deze technologieën en ze overlappen vaak.

De variëteit van termen is voornamelijk het resultaat van groeperen van softwaremechanismen die te maken hebben met een specifiek aspect van softwareontwikkeling. Automatisering in het bijzonder heeft te maken met het exporteren van de werking van een toepassing of component (als API) zodat deze door een andere toepassing of een menselijke gebruiker kan gebruikt worden.

Wrapperbibliotheken Microsoft heeft verschillende wrappers ontwikkeld die sommige lagelevelfuncties van de Windows API overnamen en zo toepassingen toeliet op een abstractere manier te communiceren met de API. De Microsoft Foundation Class-bibliotheek (MFC) kapselt de Windows API-werking in in C++-klassen, en laat zo een meer objectgeoriënteerde manier van communiceren met de API toe. De Active Template-bibliotheek (ATL) is een templategeoriënteerde wrapper voor COM. De Windows Template-library (WTL) was ontwikkeld als een extensie voor ATL, en was bedoeld als een lichter alternatief voor MFC.

Ook opmerkelijk zijn sommige aanbiedingen van Borland. De Object Windows-library (OWL) werd uitgebracht als een concurrerend product van MFC en bood een gelijkaardige objectgeoriënteerde wrapper. Borland moest later plaatsmaken voor de Visual Component-library (VCL), die geschreven is in Object Pascal en zowel in de Delphi als C++ Builder beschikbaar is.

De meeste applicatieframeworks voor Windows kapselen (ten minste gedeeltelijk) de Windows API in. Vandaar dat zowel het .NET-framework, Java als alle andere programmeertalen in Windows een wrapperbibliotheek hebben of zijn. Windows API Code Pack for Microsoft .NET Framework is een .NET-wrapperbibliotheek voor de Windows API.

In de 64 bit-Windowsversies is dezelfde benaming gebruikt voor de DLL-bestanden.

Geschiedenis De Windows API heeft altijd een groot deel van de onderliggende structuur van de Windowssystemen blootgelegd aan de programmeur. Dit geeft de programmeurs een grote flexibiliteit en macht over hun toepassingen. Het geeft de Windowstoepassingen echter ook een grote verantwoordelijkheid om verschillende low-levelhandelingen te verwerken die verband houden met een GUI.

Charles Petzold, auteur van de veel gelezen Windows API-boeken, heeft het volgende gezegd: "Het originele "hello world"-programma in de Windows 1.0-SDK was een klein schandaal. HELLO.C was ongeveer 150 lijnen lang en het HELLO.RC-bronscript telde een 20-tal lijnen. (...) Oudere C-programmeurs voelden vaak afschuw of hilariteit wanneer ze het Windows-hello-worldprogramma tegenkwamen."

Over de jaren heen zijn er verschillende veranderingen en toevoegingen gedaan aan het Windows-besturingssysteem, en de Windows API veranderde en weerspiegelde dit. De Windows API voor Windows 1.0 ondersteunde minder dan 450 functieoproepen, terwijl moderne versies van de Windows API er duizenden ondersteunen. Over het algemeen bleef de interface echter vrij consistent; een oude Windows 1.0-toepassing zal nog steeds herkenbaar zijn voor een programmeur die gewoon is aan de moderne Windows API.

Microsoft doet inspanningen om software achterwaarts compatibel te maken en houden. Om dit te bereiken gaat Microsoft soms zo ver dat ze software ondersteunen die de API in een ongedocumenteerde of zelfs (voor de programmeur) illegale manier gebruikt. Raymond Chen, een ontwikkelaar bij Microsoft die aan de Windows API werkt, heeft het volgende gezegd: "Ik zou waarschijnlijk maanden kunnen schrijven over enkel en alleen toepassingen die foute dingen doen en wat we hebben moeten doen om hen weer werkende te krijgen (vaak ondanks zichzelf). Dit is waarom ik zeer kwaad word wanneer mensen Microsoft ervan beschuldigen met kwaad opzet toepassingen te beschadigen tijdens besturingssysteem-upgrades. Als er ook maar één toepassing niet meer werkte op Windows 95, nam ik dit op als een persoonlijk falen."

Een van de grootste veranderingen die de Windows API onderging, was de overgang van Win16 (te vinden in Windows 3.1 en ouder) naar Win32 (Windows NT, Windows 95 en hoger). Terwijl Win32 oorspronkelijk geïntroduceerd werd met Windows NT 3.1 en Win32s het gebruik van de Win32-subset al toeliet voor Windows 95, was het pas vanaf Windows 95 dat vele applicaties werden overgezet naar Win32. Om de overgang te vergemakkelijken, werd er in Windows 95, zowel voor de externe ontwikkelaars als voor Microsoft, een complex schema van zogenaamde 'API thunks' gebruikt, die het mogelijk maakten voor 32 bit-code om 16 bit-code aan te roepen en (in enkele gevallen) vice versa. Zogenaamde 'flat thunks' lieten 32 bit-code toe om 16 bit-library's aan te roepen, en het schema werd intensief gebruikt binnen Windows 95 om te vermijden dat het hele besturingssysteem in een keer naar Win32 zou moeten overgezet worden. In Windows NT was het besturingssysteem enkel 32 bit (behalve de delen voor compatibiliteit met 16 bit-toepassingen), en enkel 'generic thunks' waren beschikbaar voor de thunk van Win16 naar Win32, alsook voor Windows 95. De Platform SDK bevatte een compiler die de nodige code kon produceren voor deze thunks.

Versies Bijna elke nieuwe versie van Windows introduceerde zijn eigen toevoegingen en veranderingen aan de Windows API. De naam van de API echter, werd consistent gehouden tussen verschillende Windowsversies, en naamsveranderingen werden beperkt tot grote structurele en platformveranderingen voor Windows. Microsoft veranderde uiteindelijk de naam van de toenmalige 'Win32 API' familie naar 'Windows API', en veranderde de naam zo in een alomvattende term voor zowel verleden als toekomstige versies van de API.