# Windows API
## Windows API là gì?
**API** viết tắt của **Application Programming Interface - Giao diện lập trình ứng dụng**. Là các phương thức, giao thức kết nối với các thư viện ứng dụng.
**Windows API** hay còn gọi là WinAPI, là một bộ các giao diện lập trình ứng dụng mà Microsoft phát triển để hỗ trợ việc phát triển ứng dụng chạy trên hệ điều hành Windows. WinAPI cho phép các ứng dụng giao tiếp hiệu quả với hệ thống máy tính, bao gồm việc tạo và quản lý của sổ, xử lý sự kiện từ người dùng như nhấn phím và di chuyển chuột, vẽ đồ họa, cũng như quản lý các tệp và thư mục. WinAPI là một thành phần thiết yếu trong việc phát triền ứng dụng trên nền tảng Windows.
## WinAPI được sử dụng để làm gì?
1. **Tạo và Quản lý cửa sổ:** WinAPI cho phép lập trình viên tạo cửa sổ ứng dụng, điều chinh kích thước, vị trí và cửa sổ, đổng thời quan lý chu trình sự kiện của chúng.
2. **Xử lý sự kiện nhập liệu:** WinAPI hỗ trợ xử lý các sự kiện từ bản phím, chuột và các thiết bị ngoại vi khác.
3. **Vẽ đồ họa và giao diện người dùng:** cung cấp chức năng vẽ hình ảnh, văn bản và đồ họa, cho phép xây dụng giao diện người dùng đa dạng và tùy chỉnh.
4. **Quản lý tệp và thư mục:** WinAPI có thể tạo, đọc, ghi và xóa tệp tin cũng như quản lý thư mục trên hệ thông file windows.
5. **Tương tác với hệ thông:** Ngày nay, ứng dụng có thê tương tác với các thành phần khác trong hệ thống, như các dịch vụ và cấu hình hệ thống.
## Demo cơ ban với WinAPI
Dưới đây là một đoạn mã mẫu để hiển thị hộp thoại với thông điệp 'You are Hacked':
```cpp=
int MessageBox(
[in, optional] HWND hWnd,
[in, optional] LPCTSTR lpText,
[in, optional] LPCTSTR lpCaption,
[in] UINT uType
);
```
**Parameters:**
- `[in, optional] hWnd` (type: HWND): Handle tới cửa sổ chủ (owner window) của hộp thoại thông báo sẽ được tạo. Nếu tham số này là NULL, hộp thoại thông báo sẽ không có cửa sổ chủ.
- `[in, optional] lpText` (type: LPCTSTR): Thông điệp sẽ được hiển thị. Nếu chuỗi gồm nhiều dòng, bạn có thể tách các dòng bằng ký tự carriage return và/hoặc linefeed giữa các dòng.
- `[in, optional] lpCaption` (type: LPCTSTR): Tiêu đề của hộp thoại. Nếu tham số này là `NULL`, tiêu đề mặc định sẽ là `Error`.
- `[in] uType` (type: UINT): Nội dung và hành vi của hộp thoại. Tham số này có thể là tổ hợp các cờ (flags) thuộc các nhóm sau.Để chỉ định các nút được hiển thị trong MessageBox, hãy truyền một trong các giá trị sau.
```cpp=
#include<Windows.h>
#pragma comment(lib,"user32.lib")
int main()
{
MessageBox(NULL, L"You are hacked!!", L"Malware Simulation", MB_OK | MB_ICONWARNING);
return 0;
}
```
