Windows系统编程在网络、内存、进程、文件、界面、消息、IO 7个核心维度的表格中补充更多像SetWindowsHookExA、GetWindowThreadProcessId这类具体且高频的系统API函数名并完善每个函数的作用和调用方式。以下是补充后的完整表格所有函数均标注精确名称区分A/W后缀优先推荐W版本调用示例聚焦“可直接参考的极简写法”Windows编程核心维度-DLL-具体函数对照表核心维度DLL名称函数名主要作用调用方式C/C消息user32.dllSetWindowsHookExW设置全局/线程钩子键盘/鼠标/消息等替代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(LMY_CUSTOM_MSG_123);界面user32.dllGetClientRect获取窗口客户区不含边框的矩形坐标相对窗口左上角需包含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); // CtrlF5UnregisterHotKey注销已注册的全局热键示例UnregisterHotKey(hWnd, 1);进程kernel32.dllCreateProcessAsUserW以指定用户身份创建进程需权限需包含windows.h链接kernel32.lib示例CreateProcessAsUserW(hToken, Lnotepad.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.dllAttachThreadInput附加线程输入队列共享键盘/鼠标输入示例AttachThreadInput(dwTid1, dwTid2, TRUE);内存kernel32.dllReadProcessMemory读取其他进程的内存需进程读写权限需包含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.dllGetProcessWorkingSetSize获取进程工作集大小物理内存使用需包含psapi.h链接psapi.lib示例SIZE_T dwMin, dwMax; GetProcessWorkingSetSize(hProcess, dwMin, dwMax);网络ws2_32.dllgethostbyname通过主机名如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.dllFindFirstFileW查找指定路径下的第一个文件/目录替代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(Lsrc.txt, Ldst.txt, TRUE); // 最后参数为TRUE表示目标存在则失败MoveFileW移动/重命名文件示例MoveFileW(Lold.txt, Lnew.txt);DeleteFileW删除指定文件替代SHFileOperationW的删除示例DeleteFileW(Ltest.txt);GetFullPathNameW将相对路径转换为绝对路径示例WCHAR szFullPath[MAX_PATH]; GetFullPathNameW(Ltest.txt, MAX_PATH, szFullPath, NULL);CreateFileMappingW创建文件映射内存映射文件共享内存示例HANDLE hMap CreateFileMappingW(hFile, NULL, PAGE_READWRITE, 0, 4096, LMyFileMap);MapViewOfFile将文件映射到进程内存空间示例LPVOID pMap MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);IOkernel32.dllCancelIo取消指定文件句柄的所有未完成异步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);总结函数命名规则带A后缀的函数如SetWindowsHookExA为ANSI编码W后缀为Unicode编码Windows系统优先使用W版本核心定位类函数如GetWindowThreadProcessId无A/W后缀直接兼容Unicode。调用关键注意事项跨进程操作如ReadProcessMemory、CreateProcessAsUserW需获取足够权限如PROCESS_ALL_ACCESS否则调用失败钩子函数SetWindowsHookExW需保证回调函数在有效内存中DLL钩子需注入目标进程资源类句柄如文件映射、钩子、套接字必须手动释放如UnhookWindowsHookEx、FindClose避免泄漏。高频场景关联窗口监控用EnumWindowsGetWindowThreadProcessId全局热键/键盘监控用RegisterHotKey或SetWindowsHookExW高性能网络IO用AcceptEx/ConnectExIO完成端口内存共享用CreateFileMappingWMapViewOfFile。