Chức năng của Windows API Nói một cách cơ bản, Windows API quản lý mọi vấn đề làm ra Windows, bao gồm cả những vấn đề như truy xuất đĩa, cấp phát bộ nhớ, hiển thị trên màn hình… Win
Trang 1Thư viện API, lập trình API
1
Trang 2CÁC THƯ VIỆN API, LẬP
TRÌNH SỬ DỤNG API
Giáo viên bộ môn: Phạm Văn Hưởng Sinh viên thực hiện:
1.Đỗ Khắc Tâm 2.Nguyễn Xuân Minh 3.Lê Văn Sơn
4.Nguyễn Thị Xuân
Thư viện API, lập trình API
2
Trang 3CÁC THƯ VIỆN API, LẬP TRÌNH
Trang 4Tổng quan về API
Thư viện API, lập trình API
4
Trang 5Bộ API của từng hệ điều hành không giống nhau, làm cho các
hệ điều hành thường không tương thích với nhau
Thư viện API, lập trình API
5
Trang 6Tổng quan về API
2 Chức năng của Windows API
Nói một cách cơ bản, Windows API quản lý mọi vấn đề làm ra Windows, bao gồm cả những vấn đề như truy xuất đĩa, cấp phát bộ nhớ, hiển thị trên màn hình…
Windows API cung cấp hầu hết các tính năng thông dụng cho tất cả các chương trình trên nền Windows ví dụ: các hộp thoại thông dụng (Open, Save As, Choose Font, …), các thiết lập hệ điều hành, các sự kiện, …
Thư viện API, lập trình API
6
Trang 7Tổng quan về API
3 Windows API nằm ở đâu?
Hầu hết các hàm Windows API được chứa trong các file *.DLL (Dynamic Link Library ) chứa trong thư mục hệ thống của Windows (thường là
Trang 8Tổng quan về API
4 Các thành phần của windows API
Các hàm (function): Các hàm chính là hạt nhân của Window API Là các đoạn mã lệnh để
hoàn thành các công việc khác nhau, chúng được chứa trong các file dll
Cấu trúc (structure): Là sự kết hợp của nhiều biến riêng biệt, nhóm các thông tin liên quan
đến nhau thành một nhóm.
Các hằng được đặt tên (named constant): Các hằng được đặt tên là một cách thức thuận
lợi để tham chiếu đến các mã số khó nhớ (ví dụ mã quét của bàn phím chẳng hạn) Cũng như với cấu trúc, các hằng phải được định nghĩa rõ ràng trong chương trình.
Các hàm gọi lại (callback function): Được định nghĩa trong chương trình và được API gọi
lại khi thực thi một tác vụ Nó tương tự như con trỏ hàm (pointer function) trong C/C++.
Thư viện API, lập trình API
8
Trang 9Tổng quan về API
5 Cách dùng các hàm API
Cách khai báo
Khai báo cho hàm có trị trả về
Declare Function < tên hàm API > Lib < Tên thư viện > [Alias < tên bí danh >] ([danh sách các đối số]) as < kiểu dữliệu >
Khai báo cho các thủ tục:
Declare Sub < tên hàm API > Lib < tên thư viện > [Alias < tên bí danh >] ([danh sách các đối số])
Ví dụ Hàm API "AddfontResource " sau đây được đặt lại bí danh là AddFont cho ngắn gọn mỗi lần gọi hàm:
Declare Function AddFontResource Lib "gdi32" Alias "AddFont" (ByVal lpFileName As
String) As Long
Thư viện API, lập trình API
9
Trang 10Tổng quan về API
6 Các thư viện API phổ biến
các API bao gồm bảo mật và các lời gọi Registry.
Gdi32.dll: Các hàm giao tiếp thiết bị đồ họa
Thư viện API, lập trình API
10
Trang 11Bốn thư viện chính của Window API
quản lý cửa sổ, cho người dùng nhập dữ liệu.
thiết.
nhiệm của các chương trình đang chạy.
Thư viện API, lập trình API
11
Trang 121 Định nghĩa
- User32.dll là một trong các thư
viện liên kết động quan trọng của hệ điều hành Window.
- User32.dll chứa các hàm cơ bản liên
quan đến việc quản lý cửa sổ, cho người dùng nhập dữ liệu…
- User32.dll là một trong những thành phần rất quan trọng đối với hoạt động của Windows Nếu tập tin này bị xóa hoặc loại bỏ, hệ thống sẽ không làm việc.
Thư viện API, lập trình API
12
Trang 132 Chức năng của User32.dll
- User32.dll thực hiện các thành phần người dùng Windows tạo
ra và quản lý toàn bộ các yếu tố tiêu chuẩn của giao diện người dùng Windows, chẳng hạn như Desktop, cửa sổ và menu.
- Nó cho phép các chương trình thực hiện một giao diện đồ hoạ người dùng(GUI) phù hợp với Windows.
Thư viện API, lập trình API
13
Trang 143 Hoạt động
- Chương trình gọi các hàm từ Windows USER để thực hiện các hoạt động như:
+ tạo và quản lý các cửa sổ + cửa sổ nhận tin nhắn (chủ yếu là người sử dụng đầu vào như các sự kiện chuột
và bàn phím, cũng như các thông báo từ hệ điều hành) + hiển thị văn bản trong một cửa sổ
Trang 16_In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMenu hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam );
Thư viện API, lập trình API
16
Trang 174 Một số hàm tiêu biểu có trong User32.dll 4.1 CreateWindow
Các tham số:
lpClassName: Nếu lpClassName là một chuỗi, nó xác định tên lớp cửa sổ
lpWindowName: tên cửa sổ
dwStyle: kiểu cửa sổ được tạo ra
x: vị trí nằm ngang ban đầu của cửa sổ
y: vị trí thẳng đứng ban đầu của cửa sổ
nWidth: chiều rộng của cửa sổ
nHeight: chiều cao của cửa sổ
hWndParent: handle của cửa sổ
hMenu: xác định menu được sử dụng với cửa sổ
hInstance: một handle thể hiện các mô-đun được liên kết với cửa sổ
lpParam: một con trỏ trỏ tới một giá trị được truyền vào cửa sổ thông qua cấu trúc CREATESTRUCT.
Thư viện API, lập trình API
17
Trang 19_In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_ BOOL bRepaint );
Thư viện API, lập trình API
19
Trang 204 Một số hàm tiêu biểu có trong User32.dll4.2 MoveWindow
Các tham số:
hWnd: handle của cửa sổ.
x: vị trí mới của phía bên trái cửa sổ
y: vị trí mới của phía trên cửa sổ
nHeight: chiều cao mới của cửa sổ
nWidth: chiều rộng mới của cửa sổ
bRepaint: Cho biết các cửa sổ sẽ được sơn lại Nếu tham số này là TRUE,
cửa sổ nhận được một thông điệp, Nếu tham số này là FALSE, không sơn lại bất cứ cửa sổ nào
Thư viện API, lập trình API
20
Trang 214 Một số hàm tiêu biểu có trong User32.dll
4.2 MoveWindow
Kiểu trả về: BOOL Nếu hàm thực hiện thành công, giá trị trả về khác không Ngược lại, giá trị trả về bằng không
Chức năng
Thay đổi kích thước và vị trí của một cửa sổ cho trước Thư viện API, lập trình API
21
Trang 22Thư viện API, lập trình API
22
Trang 23Thu nhỏ(nhưng không phá huỷ) cửa sổ được chỉ định.
Thư viện API, lập trình API
23
Trang 24Thư viện API, lập trình API
24
Trang 25idThread: định danh cho các cửa sổ hoặc chủ đề muốn lấy thông tin.
lpgui: Một con trỏ trỏ tới một cấu trúc GUITHREADINFO để tiếp nhận thông tin mô tả các
chủ đề hoặc cửa sổ được chỉ định.
Kiểu trả về: BOOL
Chức năng: Lấy thông tin về các cửa sổ đang hoạt động hoặc một GUI được chỉ định
Thư viện API, lập trình API
25
Trang 26- Các tham số:
hWnd: handle của cửa sổ được chỉ định.
bEnable: nếu là True thì cửa sổ sẽ được kích hoạt Còn False, cửa sổ sẽ bị vô hiệu hoá(đối với chuột và bàn phím).
- Kiểu trả về: INT
Nếu bằng 0, cửa sổ hoặc control sẽ bị disable Nếu khác 0, cửa sổ sẽ được enable.
- Chức năng:
Cho phép hoặc vô hiệu hoá chuột và bàn phím đối với cửa sổ hoặc control được chỉ định Khi đầu vào
bị vô hiệu hóa, cửa sổ không nhận được đầu vào như click chuột và phím bấm Khi đầu vào được kích hoạt, cửa sổ nhận được tất cả đầu vào
Thư viện API, lập trình API
26
Trang 28 Ntdll.dll ánh xạ các yêu cầu API tới dịch vụ Kernel tương ứng thông qua 1 cơ chế được gọi là system service dispatching, điều khiển sự chuyển đổi từ User mode sang Kernel mode thông qua 1 xử lý đặc biệt, có thể là 1 ngắt
Hình vẽ sau minh họa quá trình chuyển một lời gọi hàm từ User mode vào Kernel mode:
Thư viện API, lập trình API
28
Trang 29Thư viện API, lập trình API
29
Trang 30 Ntdll.dll chủ yếu liên quan đến các tác vụ của hệ thống
Thư viện API, lập trình API
30
Trang 312 Các hàm cơ bản
2.1 NTClose
Chức năng:đóng các handle cụ thể, hàm NTClose được thay thế bằng hàm
CloseHandle trong kernel32.dll
Khai báo:
NTSTATUS WINAPI NtClose(
_In_ HANDLE Handle );
Các tham số:
Handle [in]: Handle bị đóng
Kiểu trả về: NTSTATUS
STATUS_SUCCESS: Handle đã được đóng
Thư viện API, lập trình API
31
Trang 322 Các hàm cơ bản2.2 NtOpenThread
Chức năng: mở ra một đối tượng thread handle, phải sử dụng hàm
LoadLibrary và GetProcAddress để tự động liên kết đến Ntdll.dll
Khai báo:
NTSTATUS NtOpenThread(
_Out_ PHANDLE ThreadHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ PCLIENT_ID ClientId
);
Thư viện API, lập trình API
32
Trang 33ObjectAttributes [in]: Trỏ tới cấu trúc OBJECT_ATTRIBUTES, xác định các thuộc tính có thể
được áp dụng cho các đối tượng ObjectName của cấu trúc này phải là NULL.
ClientId [in]: Trỏ tới cấu trúc CLIENT_ID để xác định các thread cần được mở ra.
Kiểu trả về:
NTSTATUS
Thư viện API, lập trình API
33
Trang 34_In_ ULONG ObjectInformationLength, _Out_opt_ PULONG ReturnLength );
Thư viện API, lập trình API
34
Trang 35ObjectBasicInformation: Trả về một cấu trúc PUBLIC_OBJECT_BASIC_INFORMATION
ObjectTypeInformation: Trả về một cấu trúc PUBLIC_OBJECT_TYPE_INFORMATION
Thư viện API, lập trình API
35
Trang 37Thư viện API, lập trình API
37
Trang 382 Các hàm cơ bản
2.4 NTQueryAttributesFile
ObjectAttributes [in]: Trỏ tới một cấu trúc OBJECT_ATTRIBUTES cung
cấp các thuộc tính được sử dụng cho các fileObject
FileInformation [out]: Trỏ tới một cấu trúc FILE_BASIC_INFORMATION
để nhận được các thông tin thuộc tính returned file
Kiểu trả về:
NTSTATUS
Thư viện API, lập trình API
38
Trang 39 GDI là thư viện cung cấp các hàm(functions) và các cấu trúc dữ liệu (structures) cần thiết để ứng dụng tạo ra những kết xuất dưới dạng đồ họa (hiển thị lên màn hình, in ra máy in,…)
Các hàm GDI cho phép vẽ đường thẳng,đường cong, các hình đa giác, xuất ký tự,hiển thị ảnh bitmap, in ấn,…
GDI không tương tác trực tiếp với thiết bị phần cứng, mà thông qua các driver
Thư viện API, lập trình API
39
Trang 41…
Các thông số này chi phối những thao tác vẽ lên thiết bị tại thời điểm thực hiện
Mỗi thiết bị được đặc trưng bởi 1 cấu trúc DC
Ứng dụng thực hiện các thao tác vẽ lên thiết bị thông qua DC của thiết bị đó
Thư viện API, lập trình API
41
Trang 43 Các loại DC:
Display DC: sử dụng trong các thao tác vẽ lên màn hình/cửa sổ
Printer DC: sử dụng để kết xuất dữ liệu đồ họara máy in
Memory DC: tương ứng với thiết bị “logic”,thường dùng để “chuẩn bị”
dữ liệu trước khi hiển thị ra thiết bị vật lý
Thư viện API, lập trình API
43
Trang 453.Một số hàm
3.1 ArcSegment function:vẽ hình elip
Trang 463.Một số hàm
3.1 ArcSegment function:vẽ hình elip
Tham số
point [in, ref]: Type: const D2D1_POINT_2F ( Điểm cuối của vòng cung.)
size [in, ref] Type: const D2D1_SIZE_F (X bán kính và y-bán kính của vòng cung.)
rotationAngle [in] Cho số của độ mà hình elip được xoay tương đối so với hệ tọa độ hiện
hành.
sweepDirection [in] Type: D2D1_SWEEP_DIRECTION Một giá trị chỉ định việc quét
hồ quang cùng chiều kim đồng hồ hoặc ngược chiều kim đồng.
arcSize [in] Type: D2D1_ARC_SIZE Một giá trị chỉ định cho dù vòng cung lớn hơn
180 độ.
Thư viện API, lập trình API
46
Trang 473.Một số hàm
3.3: WICCreateBitmapFromSection function
Chức năng: Trả về một IWICBitmapSource được hỗ trợ bởi các điểm ảnh của một thiết bị đồ
họa giao diện Windows (GDI) phần xử lý.
_In_ UINT stride, _In_ UINT offset,
_Out_ IWICBitmap ** pIBitmap );
Thư viện API, lập trình API
47
Trang 483.Một số hàm
3.3: WICCreateBitmapFromSection function
Tham số:
width [in] Chiều rộng của các điểm ảnh bitmap.
height [in] Chiều cao của các điểm ảnh bitmap.
pixelFormat Định dạng pixel của bitmap.
hSection [in] Phần xử lý Đây là một tập tin bản đồ đối tượng khiển trả về từ
CreateFileMapping chức năng
stride [in] Số lượng byte của mỗi scanline
offset [in] Bù đắp vào phần này.
pIBitmap [out] Một con trỏ tiếp nhận bitmap.
Thư viện API, lập trình API
48
Trang 49 Là các thư viện liên kết động trong hệ điều hành.
Nó thực hiện các công việc quản lí bộ nhớ, hoạt động vào ra, hoạt động liên quan đến tiến trình và ngắt.
Khi Windows khởi động, nó được nạp vào một không gian bộ nhớ riêng mà các ứng dụng khác không thể sử dụng được.
Thư viện API, lập trình API
49
Trang 50_In_ DWORD dwFlagsAndAttributes, _In_opt_ HANDLE hTemplateFile);
Thư viện API, lập trình API
50
Trang 512 Một số hàm cơ bản
2.1 CreateFile.
• lpFileName [in]: tên của file hoặc thiết bị được tạo hoặc mở
• dwDesiredAccess [in] yêu cầu truy cập đến file hoặc thiết bị
• dwShareMode [in] : chế độ chia sẻ yêu cầu của file hoặc thiết bị
• dwCreationDisposition [in]:một hành động để đưa vào một tập tin hoặc thiết bị tồn tại hay không tồn tại
• dwFlagsAndAttributes [in] Thuộc tính file hoặc thiết bị và cờ, FILE_ATTRIBUTE_NORMAL là giá trị mặc định phổ biến nhất cho các tập tin
Thư viện API, lập trình API
51
Trang 52BOOL WINAPI WriteFile(
_In_ HANDLE hFile, _In_ LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped
);
Thư viện API, lập trình API
52
Trang 532 Một số hàm cơ bản
2.2 WriteFile
Tham số:
• hFile [in]: một handle tới tập tin hoặc thiết bị vào ra.
• lpBuffer [in]: đâylà một nơi mà bộ đệm chứa dữ liệu đã được ghi lên file hoặc thiết
bị
• nNumberOfBytesToWrite [in]: số của file đã được ghi lên file hoặc thiết bị.
• lpNumberOfBytesWritten [out,optional]: một con trỏ tới một biến mà nhận số của các byte đã viết khi sử dụng tham số hFile đồng bộ
• lpOverlapped [in,out,optional.
Giá trị trả về:
Nếu hàm này thành công, giá trị trả về là là nonzero (true).
Nếu hàm bị lỗi hoặc là hoàn thiện đồng bộ thì giá trị trả về là zero.
Thư viện API, lập trình API
53
Trang 54BOOL WINAPI CreateDirectory(
_In_ LPCTSTR lpPathName, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes);
Tham số:
• lpPathName [in]: đường dẫn của thư mục đã được tạo.
• lpSecurityAttibutes [in,optional]: một con trỏ tới hàm SECURITY_ATTRIBUTES
Giá trị trả về:
• Nếu hàm succeed, trả về giá trị nonzero.
• Nếu làm fail, trả về giá trị là zero.
Thư viện API, lập trình API
54
Trang 55 Tham số:
lpNewFileName [in] tên của file mới.
bFaillExists [in]:true, false
Giá trị trả về:Nếu hàm thành công, giá trị trả về là nonzero,ngược lại zero.
Thư viện API, lập trình API
55
Trang 56_In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCTSTR lpCurrentDirectory, _In_ LPSTARTUPINFO lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation );
Thư viện API, lập trình API
56
Trang 572 Một số hàm cơ bản
2.5 CreateProcess.
Tham số:
lpApplicationName [in, optional]: Tên của các module được thực thi
• lpCommandLine [in, out, optional] dòng lệnh được thực thi
• lpProcessAttributes [in, optional] Một con trỏ tới cấu trúc
SECURITY_ATTRIBUTES quyết định chuyển điều khiển trả về cho các tiến trình mới.
• bInheritHandles [in]
• dwCreationFlags [in] các cờ để điều khiển thứ tự ưu tiên của các lớp và sự tạo tiến
trình
• lpEnvironment [in, optional] Một con trỏ vào khối môi trường cho tiến trình mới.
Thư viện API, lập trình API
57
Trang 58PROCESS_INFORMATION tiếp nhận thông tin nhận dạng về một tiến trình mới.
Giá trị trả về:
• Nếu thành công, giá trị trả về khác 0 Ngược lại giá trị trả về là 0
Thư viện API, lập trình API
58
Trang 59BOOL WINAPI CreatePipe(
_Out_ PHANDLE hReadPipe, _Out_ PHANDLE hWritePipe, _In_opt_ LPSECURITY_ATTRIBUTES lpPipeAttributes, _In_ DWORD nSize);
Tham số:
Giá trị trả về: là khác 0 nếu thành công, bằng không nếu không thành cong
Thư viện API, lập trình API
59
Trang 60 Giá trị trả về: hàm không có giá trị trả về.
Thư viện API, lập trình API
60
Trang 61_tprintf(TEXT("Usage: %s <dir>\n"), argv[0]); return;
}
Thư viện API, lập trình API
61
Trang 62KERNEL32.DLL//tao thu muc
if (!CreateDirectory(argv[1], NULL)) {
printf("CreateDirectory failed (%d)\n", GetLastError()); return;
} // bat dau tim kiem file van ban co trong thu muc day hSearch = FindFirstFile(TEXT("*.txt"), &FileData);
if (hSearch == INVALID_HANDLE_VALUE) {
printf("No text files found.\n");
return;
} //copy file while (!fFinished) { StringCchPrintf(szNewPath, sizeof(szNewPath)/sizeof(szNewPath[0]), TEXT("%s\\%s"), argv[1], FileData.cFileName);
Thư viện API, lập trình API
62