Programowanie Windows (Win32/Win64 API) Jacek Matulewski 17 września 2012 (aktualizacja: 10 marca 2018) http://www.fizyka.umk.pl/~jacek/dydaktyka/winprog/
O czym będzie ten wykład: Tworzenie aplikacji dla systemu Windows z użyciem interfejsu programisty Win32 Aplikacje z graficznym interfejsem użytkownika (GUI). Przede wszystkim MFC, mniej VCL. Powłoka systemu Windows (Windows Shell). Podstawy programowania sieciowego. Wszystkich funkcji jest tysiące. My wycinek.
O czym nie będzie: Win16 i Win32s, .NET/CLR, WinRT Zakładam znajomość podstaw C/C++ (if, for, while, switch). Jeżeli trzeba powtórzę wskaźniki i klasy. Zakładam znajomość podstaw ang. - MSDN Skupię się raczej na rdzeniu WinAPI, niż na nowościach (np. z Windows 8) DirectX/OpenGL – osobny wykład
Co to jest Windows API? Windows API = WinAPI = Win32 API API = application programming interface Interfejs programistyczny pozwalający na dostęp do funkcjonalności Windows z poziomu kodu. Zbiór bibliotek DLL z eksportowanymi funkcjami. Dostęp do niemal wszystkich funkcjonalności Windows (częściowo poza bezpieczeństwem) Windows SDK (m.in. nagłówki C do DLL)
Lista funkcji eksportowanych z DLL Listę eksportowanych funkcji możemy obejrzeć za pomocą uniwersalnego narzędzia dumpbin z Visual C++ c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe Sprawdźmy dla przykładu zawartość biblioteki kernel32.dll dumpbin /exports C:\..\SysWOW64\kernel32.dll Microsoft (R) COFF/PE Dumper Version 14.00.23506.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file c:\Windows\SysWOW64\kernel32.dll File Type: DLL Section contains the following exports for KERNEL32.dll 00000000 characteristics 744765CE time date stamp 0.00 version 1 ordinal base 1595 number of functions 1595 number of names
Lista funkcji eksportowanych z DLL Wydruk z dumpbin dla biblioteki kernel32.dll c.d. dumpbin /exports C:\..\SysWOW64\kernel32.dll ... ordinal hint RVA name 4 0 AcquireSRWLockExclusive (forwarded to NTDLL.RtlAcquireSRWLockExclusive) 5 1 AcquireSRWLockShared (forwarded to NTDLL.RtlAcquireSRWLockShared) 6 2 000176E0 ActivateActCtx 7 3 0001EB30 ActivateActCtxWorker 8 4 00042CE0 AddAtomA 1595 63A 00058290 timeGetTime Summary 10000 .data 30000 .rdata 10000 .reloc 10000 .rsrc 60000 .text
Zasadnicze biblioteki Win32 API: Base services (jądro) – kernel32.dll podstawowe funkcje systemu plików – nie mylić z funkcjami z shell32.dll, obsługa urządzeń peryferyjnych, wątki, obsługa błędów – ale nie wyjątki
Zasadnicze biblioteki Win32 API: Advanced services – advapi32.dll rejestr systemu Windows (baza danych), zamykanie i restart systemu, usługi Windows, obsługa kont użytkowników
Zasadnicze biblioteki Win32 API: Graphics Device Interface – gdi32.dll warstwa abstrakcyjna dla urządzeń wyjścia korzystających z grafiki obsługa urządzeń wyjścia m.in. monitor, drukarka kontakt ze sterownikami urządzeń GDI, obsługa czcionek i palet kolorów, rysowanie okien, kontrolek, menu itp., Od Windows XP: GDI+ (C++) Windows Vista/7: Windows Display Driver Model
Zasadnicze biblioteki Win32 API: User Interface – user32.dll podstawowe kontrolki Windows tworzące GUI: przyciski, paski przewijania, pola wyboru itp. obsługa zarówno wejścia (mysz, klawiatura), jak i wyjścia (zmiana wyglądu kontrolki) Od Windows XP obsługa kontrolek zgromadzona jest w bibliotece comctl32.dll (Common Control Library), też: pasek stanu, zakładki, itp. Nakładki: MCF, ATL, VCL (Borland), Qt, Gimp Toolkit (GTK), AWT (Java), WF (.NET)
Zasadnicze biblioteki Win32 API: Common Dialog Boxes Library – comdlg32.dll okna dialogowe udostępniane przez Windows: 1) wczytywanie i zapisywanie pliku, 2) wybór czcionki, wybór koloru, 3) przeszukiwanie i zastępowanie, 4) okna związane z drukowaniem
Zasadnicze biblioteki Win32 API: Windows Shell (powłoka systemu Windows) shell32.dll wyższa warstwa API (nad jądrem i GUI), CopyFile[Ex], MoveFile itd. (kernel32.dll) vs SHFileOperation i IFileOperation (od Vista) WinExec (Win16) i CreateProcess (kernel32.dll) vs ShellExecute Na funkcjach powłoki bazuje Eksplorator Windows i częściowo narzędzia administracyjne
Zasadnicze biblioteki Win32 API: Networking services NetBIOS = Network Basic I/O System, WinSock = Windows Sockets API (obsługa TCP/IP) RPC = remote procedure call NetDDE, DDE = dynamic data exchange por. też. DCOM, COM+
Zasadnicze biblioteki Win32 API: Desktop Windows Manager (DWM) Windows Management Instrumentation (WMI) Windows Internet (WinINet) Active Directory Cryptography Image Mastering API (IMAPI) Media Control Interface (MCI) i wiele, wiele, wiele innych
Historia Wikipedia: https://en.wikipedia.org/wiki/Microsoft_Windows#/media/File:Windows_Updated_Family_Tree.png
Zgodność wstecz Windows 1.01 – 450 funkcji Windows 7 – tysiące funkcji! (ale te 450 nadal jest) Windows 8 – pierwsze poważne odejścia od zgodności Windows 10 – ostatnia wersja
Źródła MSDN – podstawowe źródło wiedzy: Nowy wygląd: http://msdn.microsoft.com/en-us/library/ee663300(v=VS.85).aspx Stary wygląd: http://msdn.microsoft.com/en-us/library/windows/desktop/hh447209(v=vs.85).aspx Inne strony: EFNet #Winprog: http://www.winprog.org/tutorial/ Adam Boduch (Delphi): http://4programmers.net/ Dla programistów .NET: http://www.pinvoke.net/
Źródła Książki: Jeffrey Richter, Christopher Nasarre Windows via C/C++ (wydanie 5), Microsoft Press, Warszawa 2009 Johnson M. Hart Programowanie w systemie Windows (wydanie 4), Helion 2010 Jacek Matulewski, Maciej Pakulski, Dawid Borycki, Bartosz Biały, Piotr Pepłowski, Michał Matuszak, Daniel Szlag, Dawid Urbański Visual C++. Gotowe rozwiązania dla programistów Windows, Helion 2010