Windows编程核心维度-DLL-具体函数对照速查表。

Windows编程核心维度-DLL-具体函数对照表

核心维度 DLL名称 函数名 主要作用 调用方式(C/C++)
消息 user32.dll SetWindowsHookExW 设置全局/线程钩子(键盘/鼠标/消息等,替代SetWindowsHookExA) 需包含<windows.h>,链接user32.lib;示例: HHOOK hHook = SetWindowsHookExW(WH_KEYBOARD_LL, KeyboardProc, hInst, 0);
CallNextHookEx 调用钩子链中的下一个钩子函数(钩子过程中必须调用) 示例: LRESULT ret = CallNextHookEx(hHook, nCode, wParam, lParam);
UnhookWindowsHookEx 卸载已设置的钩子(释放钩子资源) 示例: UnhookWindowsHookEx(hHook);
GetWindowThreadProcessId 获取指定窗口所属的线程ID和进程ID(核心定位窗口归属) 示例: DWORD dwPid; DWORD dwTid = GetWindowThreadProcessId(hWnd, &dwPid);
EnumWindows 枚举系统中所有顶层窗口(遍历所有窗口) 示例: EnumWindows(EnumWindowsProc, (LPARAM)NULL); // EnumWindowsProc为回调函数
EnumChildWindows 枚举指定父窗口下的所有子控件/子窗口 示例: EnumChildWindows(hParentWnd, EnumChildProc, (LPARAM)NULL);
GetMessagePos 获取当前消息触发时的鼠标屏幕坐标 示例: DWORD dwPos = GetMessagePos(); int x = LOWORD(dwPos), y = HIWORD(dwPos);
GetMessageTime 获取当前消息的时间戳(自系统启动后的毫秒数) 示例: DWORD dwTime = GetMessageTime();
RegisterWindowMessageW 注册自定义窗口消息(避免系统消息冲突) 示例: UINT WM_MY_MSG = RegisterWindowMessageW(L"MY_CUSTOM_MSG_123");
界面 user32.dll GetClientRect 获取窗口客户区(不含边框)的矩形坐标(相对窗口左上角) 需包含<windows.h>,链接user32.lib;示例: RECT rcClient; GetClientRect(hWnd, &rcClient);
GetWindowRect 获取窗口屏幕区(含边框)的矩形坐标(相对屏幕左上角) 示例: RECT rcWindow; GetWindowRect(hWnd, &rcWindow);
MoveWindow 移动窗口位置并调整大小(简单版) 示例: MoveWindow(hWnd, 100, 100, 800, 600, TRUE); // x,y,宽,高,重绘
SetWindowPos 精细设置窗口位置、大小、Z序(置顶/置底等) 示例: SetWindowPos(hWnd, HWND_TOPMOST, 100,100,800,600, SWP_SHOWWINDOW);
EnableWindow 启用/禁用窗口/控件(禁用后无法响应输入) 示例: EnableWindow(hBtn, FALSE); // 禁用按钮
GetDlgItem 通过ID获取对话框中的控件句柄 示例: HWND hEdit = GetDlgItem(hDlg, IDC_EDIT1);
SendDlgItemMessageW 直接向对话框控件发送消息(无需先获取句柄) 示例: SendDlgItemMessageW(hDlg, IDC_BUTTON1, BM_CLICK, 0, 0);
RegisterHotKey 注册全局热键(无窗口焦点也能触发) 示例: RegisterHotKey(hWnd, 1, MOD_CTRL, VK_F5); // Ctrl+F5
UnregisterHotKey 注销已注册的全局热键 示例: UnregisterHotKey(hWnd, 1);
进程 kernel32.dll CreateProcessAsUserW 以指定用户身份创建进程(需权限) 需包含<windows.h>,链接kernel32.lib;示例: CreateProcessAsUserW(hToken, L"notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
WaitForMultipleObjects 等待多个内核对象(进程/线程/事件等)触发 示例: HANDLE hObjs[]={hProcess1, hProcess2}; WaitForMultipleObjects(2, hObjs, TRUE, INFINITE);
GetProcessPriorityClass 获取进程的优先级类别(如高优先级/普通) 示例: DWORD dwPri = GetProcessPriorityClass(hProcess);
SetProcessPriorityClass 设置进程优先级类别 示例: SetProcessPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
GetThreadPriority 获取线程优先级 示例: int nPri = GetThreadPriority(hThread);
SetThreadPriority 设置线程优先级 示例: SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST);
SuspendThread 挂起指定线程(暂停执行) 示例: DWORD dwCount = SuspendThread(hThread);
ResumeThread 恢复挂起的线程(继续执行) 示例: DWORD dwCount = ResumeThread(hThread);
user32.dll AttachThreadInput 附加线程输入队列(共享键盘/鼠标输入) 示例: AttachThreadInput(dwTid1, dwTid2, TRUE);
内存 kernel32.dll ReadProcessMemory 读取其他进程的内存(需进程读写权限) 需包含<windows.h>,链接kernel32.lib;示例: ReadProcessMemory(hProcess, pRemoteAddr, pLocalBuf, 1024, &dwRead);
WriteProcessMemory 写入数据到其他进程的内存(需进程读写权限) 示例: WriteProcessMemory(hProcess, pRemoteAddr, pLocalBuf, 1024, &dwWrite);
VirtualAllocEx 在其他进程地址空间分配虚拟内存 示例: LPVOID pRemoteMem = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_READWRITE);
VirtualFreeEx 释放其他进程中分配的虚拟内存 示例: VirtualFreeEx(hProcess, pRemoteMem, 0, MEM_RELEASE);
HeapSize 获取堆内存块的实际大小 示例: SIZE_T dwSize = HeapSize(GetProcessHeap(), 0, pBuf);
HeapReAlloc 重新分配堆内存(扩容/缩容) 示例: LPVOID pNewBuf = HeapReAlloc(GetProcessHeap(), 0, pBuf, 2048);
psapi.dll GetProcessWorkingSetSize 获取进程工作集大小(物理内存使用) 需包含<psapi.h>,链接psapi.lib;示例: SIZE_T dwMin, dwMax; GetProcessWorkingSetSize(hProcess, &dwMin, &dwMax);
网络 ws2_32.dll gethostbyname 通过主机名(如www.baidu.com)获取IP地址信息 需包含<winsock2.h>,链接ws2_32.lib;示例: hostent* pHost = gethostbyname("www.baidu.com");
gethostname 获取本地主机的名称 示例: char szHost[256]; gethostname(szHost, 256);
WSAGetLastError 获取Winsock API的最后错误码(替代GetLastError) 示例: int nErr = WSAGetLastError();
WSACancelAsyncRequest 取消未完成的异步Winsock请求 示例: WSACancelAsyncRequest(hAsyncReq);
AcceptEx 高性能异步接受TCP连接(IOCP场景) 示例: AcceptEx(sListen, sClient, pBuf, 0, sizeof(sockaddr_in)+16, sizeof(sockaddr_in)+16, &dwRecv, &ov);
ConnectEx 高性能异步连接TCP服务器(IOCP场景) 示例: ConnectEx(s, (sockaddr*)&svrAddr, sizeof(svrAddr), pBuf, 0, &dwSent, &ov);
文件 kernel32.dll FindFirstFileW 查找指定路径下的第一个文件/目录(替代FindFirstFileA) 需包含<windows.h>,链接kernel32.lib;示例: WIN32_FIND_DATAW fd; HANDLE hFind = FindFirstFileW(L"*.txt", &fd);
FindNextFileW 查找下一个文件/目录(遍历文件列表) 示例: while (FindNextFileW(hFind, &fd)) { /* 遍历文件 */ }
FindClose 关闭文件查找句柄(释放FindFirstFileW资源) 示例: FindClose(hFind);
CopyFileW 复制文件(简单版,替代SHCopyFileW) 示例: CopyFileW(L"src.txt", L"dst.txt", TRUE); // 最后参数为TRUE表示目标存在则失败
MoveFileW 移动/重命名文件 示例: MoveFileW(L"old.txt", L"new.txt");
DeleteFileW 删除指定文件(替代SHFileOperationW的删除) 示例: DeleteFileW(L"test.txt");
GetFullPathNameW 将相对路径转换为绝对路径 示例: WCHAR szFullPath[MAX_PATH]; GetFullPathNameW(L"test.txt", MAX_PATH, szFullPath, NULL);
CreateFileMappingW 创建文件映射(内存映射文件,共享内存) 示例: HANDLE hMap = CreateFileMappingW(hFile, NULL, PAGE_READWRITE, 0, 4096, L"MyFileMap");
MapViewOfFile 将文件映射到进程内存空间 示例: LPVOID pMap = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
IO kernel32.dll CancelIo 取消指定文件句柄的所有未完成异步IO操作 需包含<windows.h>,链接kernel32.lib;示例: CancelIo(hFile);
CancelIoEx 更灵活取消指定的异步IO操作(可指定OVERLAPPED) 示例: CancelIoEx(hFile, &ov);
ReadDirectoryChangesW 监控目录变化(文件创建/删除/修改等) 示例: ReadDirectoryChangesW(hDir, pBuf, 4096, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME, &dwBytes, &ov, NULL);
DeviceIoControl 向设备驱动发送控制码(如操作串口/磁盘) 示例: DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, pGeom, sizeof(DISK_GEOMETRY), &dwOut, NULL);
FlushFileBuffers 刷新文件缓冲区(强制将缓存数据写入磁盘) 示例: FlushFileBuffers(hFile);

总结

  1. 函数命名规则
    • A后缀的函数(如SetWindowsHookExA)为ANSI编码,W后缀为Unicode编码,Windows系统优先使用W版本;
    • 核心定位类函数(如GetWindowThreadProcessId)无A/W后缀,直接兼容Unicode。
  2. 调用关键注意事项
    • 跨进程操作(如ReadProcessMemoryCreateProcessAsUserW)需获取足够权限(如PROCESS_ALL_ACCESS),否则调用失败;
    • 钩子函数(SetWindowsHookExW)需保证回调函数在有效内存中,DLL钩子需注入目标进程;
    • 资源类句柄(如文件映射、钩子、套接字)必须手动释放(如UnhookWindowsHookExFindClose),避免泄漏。
  3. 高频场景关联
    • 窗口监控用EnumWindows+GetWindowThreadProcessId
    • 全局热键/键盘监控用RegisterHotKeySetWindowsHookExW
    • 高性能网络IO用AcceptEx/ConnectEx+IO完成端口;
    • 内存共享用CreateFileMappingW+MapViewOfFile
相关推荐
草履虫建模6 小时前
Java 集合框架:接口体系、常用实现、底层结构与选型(含线程安全)
java·数据结构·windows·安全·决策树·kafka·哈希算法
qq_24218863327 小时前
快速搭建跨环境检测服务的步骤
linux·开发语言·windows·python·macos
呉師傅7 小时前
【操作技巧】Win10关机提示这个应用阻止关机。怎么解决?
运维·网络·windows·电脑
FL16238631298 小时前
windows从源码安装python版本paddleocr3.4.0
开发语言·windows·python
x***r15110 小时前
TUPortable安装步骤详解(附流量监控与进程占用查看教程)
windows
Zzz 小生13 小时前
LangChain Messages:消息使用完全指南
数据库·windows·microsoft
发现你走远了1 天前
Windows 下手动安装java JDK 21 并配置环境变量(详细记录)
java·开发语言·windows
love530love1 天前
【OpenClaw 本地实战 Ep.3】突破瓶颈:强制修改 openclaw.json 解锁 32k 上下文记忆
人工智能·windows·json·cuda·lm studio·openclaw·context length
刮涂层_赢大奖1 天前
我给MAC做了一个 Windows 任务栏,用了之后再也回不去 Dock 了
windows·macos·ios