windows开发学习方向,包括那些api

一、常用API

1. 基础API:
   - GetModuleHandle:获取模块句柄。
   - LoadLibrary:加载动态链接库。

2. 窗口和消息处理:
   - CreateWindowEx:创建一个窗口。
   - SendMessage:向指定窗口发送消息。
   - PostMessage:向窗口的消息队列中放置消息。
   - TranslateMessage:将虚拟键消息转换为字符消息。

3. 图形和绘制:
   - CreateDC:创建设备上下文。
   - SelectObject:选择图形对象,如笔、刷子或字体。
   - DrawText:绘制文本。
   - BitBlt:位块传输,用于高效地复制像素。

4. 文件和I/O操作:
   - CreateFile:创建或打开文件。
   - ReadFile和WriteFile:读取或写入文件。
   - FindFirstFile、FindNextFile:遍历文件。

5. 进程和线程管理:
   - CreateProcess:创建新的进程。
   - GetCurrentProcess:获取当前进程句柄。
   - CreateThread:创建线程。

6. 动态链接库(DLL):
   - LoadLibrary:加载DLL。
   - GetProcAddress:获取DLL中导出函数的地址。
   - FreeLibrary:释放DLL。

7. 网络通信:
   - socket:创建套接字。
   - connect:连接到远程主机上的特定端口。
   - send和recv:发送和接收数据。

8. 注册表操作:
   - RegOpenKeyEx:打开注册表键。
   - RegQueryValueEx:查询注册表键的值。
   - RegSetValueEx:设置注册表键的值。

9. 系统信息:
   - GetSystemInfo:获取系统信息。
   - GetVersion:获取操作系统版本。

10. 错误处理:
    - GetLastError:获取上一次错误代码。
    - FormatMessage:将错误代码转换为可读的字符串。

11. 内存管理:
    - GlobalAlloc和GlobalFree:分配和释放全局内存。
    - LocalAlloc和LocalFree:分配和释放局部内存。

12. 安全和权限:
    - AdjustTokenPrivileges:调整访问令牌的权限。
    - LookupPrivilegeValue:查找权限值。

13. 时间函数:
    - GetTickCount:获取自系统启动以来的毫秒数。
    - GetLocalTime:获取本地时间。

14. 字符串操作:
    - lstrcpy和lstrlen:复制和获取字符串长度。

15. 同步:
    - CreateEvent、WaitForSingleObject、SetEvent:事件对象的创建和使用。
    - CreateMutex、ReleaseMutex:互斥体的创建和释放。

16. 性能计数器:
    - QueryPerformanceCounter、QueryPerformanceFrequency:高精度时间测量。

二、例子

1.读写文件

  1. 打开文件: 使用CreateFile函数打开一个文件,如果文件不存在则创建它。

  2. 读取文件: 使用ReadFile函数从文件中读取数据。

  3. 写入文件: 使用WriteFile函数向文件写入数据。

  4. 关闭文件: 使用CloseHandle函数关闭文件句柄。

2.读写注册表

        使用RegCreateKeyExRegOpenKeyEx函数打开一个已存在的注册表项或创建一个新的注册表项。RegCreateKeyEx可以创建一个新的注册表项,如果该项已存在则打开它;RegOpenKeyEx则是打开一个已存在的注册表项。

HKEY hKey;
LONG result = RegCreateKeyEx(
    HKEY_CURRENT_USER, // 或 HKEY_LOCAL_MACHINE 等
    "Path\\To\\Registry\\Key",
    0,
    NULL,
    REG_OPTION_NON_VOLATILE,
    KEY_ALL_ACCESS,
    NULL,
    &hKey,
    NULL
);

        使用RegSetValueEx函数来设置注册表项的值。这个函数允许你指定键的名称、数据类型、数据缓冲区及其大小。

        

result = RegSetValueEx(
    hKey,
    "ValueName", // 要设置的键的名称
    0,
    REG_SZ,     // 数据类型,例如 REG_SZ 表示字符串
    (BYTE*)"ValueData", // 要设置的数据
    sizeof("ValueData") // 数据长度
);

        使用RegQueryValueEx函数来读取注册表项的值。通常需要调用两次:第一次获取数据长度,第二次读取数据。

DWORD dataSize = 0;
result = RegQueryValueEx(
    hKey,
    "ValueName",
    NULL,
    NULL,
    NULL,
    &dataSize
);

if (result == ERROR_SUCCESS) {
    std::vector<BYTE> buffer(dataSize);
    result = RegQueryValueEx(
        hKey,
        "ValueName",
        NULL,
        NULL,
        buffer.data(),
        &dataSize
    );
    if (result == ERROR_SUCCESS) {
        std::wstring value((wchar_t*)buffer.data(), dataSize / sizeof(wchar_t));
    }
}

        操作完成后,使用RegCloseKey函数关闭打开的注册表项以释放资源。

RegCloseKey(hKey);

3.读取INI配置文件

        INI文件是一种简单的文本文件格式,通常包含节(sections)、键(keys)和值(values)

windows api 读取字符串类型代码

#include <windows.h>
#include <iostream>

int main() {
    char buffer[255];
    const char* section = "SectionName";
    const char* key = "KeyName";

    // 读取INI文件中的值
    GetPrivateProfileString(
        section,             // 节名
        key,                // 键名
        "default",          // 如果没有找到键,则返回默认值
        &buffer,           // 存储读取的数据
        sizeof(buffer),     // 接收数据的缓冲区大小
        "config.ini"       // INI文件路径
    );

    std::cout << "Value: " << buffer << std::endl;

    return 0;
}

如果需要读取整数类型使用GetPrivateProfileInt。

自定义代码实现解析INI配置文件

  1. 打开文件: 使用std::ifstream打开INI文件。

  2. 读取内容: 逐行读取文件内容,使用std::getline

  3. 解析内容: 对于每一行,检查是否是节的开始(例如以[Section]开头),或者是否是键值对(例如key=value)。

  4. 存储数据: 根据解析结果,将数据存储到适当的数据结构中,例如std::map或自定义的数据结构。

#include <fstream>
#include <iostream>
#include <map>
#include <string>

int main() {
    std::ifstream iniFile("config.ini");
    std::string line;
    std::string currentSection;

    std::map<std::string, std::map<std::string, std::string>> iniData;

    if (iniFile.is_open()) {
        while (std::getline(iniFile, line)) {
            if (line.substr(0, 1) == "[") {
                // 这是一个新的节
                currentSection = line.substr(1, line.find("]") - 1);
            } else if (line.find("=") != std::string::npos) {
                // 这是一个键值对
                std::string key = line.substr(0, line.find("="));
                std::string value = line.substr(line.find("=") + 1);

                iniData[currentSection][key] = value;
            }
        }
        iniFile.close();
    }

    // 打印INI文件内容
    for (const auto& section : iniData) {
        std::cout << "[" << section.first << "]" << std::endl;
        for (const auto& keyValuePair : section.second) {
            std::cout << keyValuePair.first << "=" << keyValuePair.second << std::endl;
        }
    }

    return 0;
}

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值