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:
o Jeffrey Richter, Christopher Nasarre Windows via C/C++ (wydanie 5), Microsoft Press, Warszawa 2009 o Johnson M. Hart
Programowanie w systemie Windows (wydanie 4), Helion 2010
o 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