C语言关闭所有打开的Word文档并保存

有时候一次性修改了10几个Word文档没保存,手动关闭很麻烦,写了这个小程序。

通过spy++获取Word句柄,发现Word的保存并不能触发 WM_COMMAND,所以只能在关闭时弹窗的时候来模拟用户按下Enter来保存文档。但因为是模拟用户操作,所以效率并不算高。

c 复制代码
#include <windows.h>
#include <stdio.h>
#include <string.h>
void SendEnterKey(HWND hWnd)
{
    INPUT input[2] = {0};

    // 按下 Enter 键
    input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = VK_RETURN;

    // 释放 Enter 键
    input[1].type = INPUT_KEYBOARD;
    input[1].ki.wVk = VK_RETURN;
    input[1].ki.dwFlags = KEYEVENTF_KEYUP;

    // 发送输入事件
    SendInput(2, input, sizeof(INPUT));
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    TCHAR className[256];
    GetClassName(hwnd, className, sizeof(className) / sizeof(TCHAR));
    if (strcmp(className,"OpusApp") == 0)// 找到了 Word 窗口
    {
        // SendMessage(hwnd, WM_CLOSE, 0, 0); //如果关闭时弹出保存,程序就会进入了消息循环中,等待手动确认,否则不会继续往下执行
        PostMessage(hwnd, WM_CLOSE, 0, 0); // 异步发送
        SetForegroundWindow(hwnd);         // 设置为前台窗口 获得焦点
        SendEnterKey(hwnd);                // 模拟Enter键 确认保存
        Sleep(500);// 等一会 下个窗口弹出需要时间
    }
    return TRUE; // 继续枚举下一个窗口
}
int main()
{
    // 枚举系统中所有的顶级窗口,并对每个窗口调用 EnumWindowsProc 回调函数
    EnumWindows(EnumWindowsProc, 0);
    puts("The End!");
    return 0;
}

要想高效率操作Word,需要用到Office的COM库,但是C语言实现起来非常复杂,C++配置起来也很麻烦,Python导入win32com.client库就可以轻松实现,所以要想高效率的操作Word,就用Python来写。

相关推荐
努力努力再努力wz几秒前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql
mN9B2uk1712 分钟前
MySQL命令行导出数据库
c语言·数据库·mysql
甄心爱学习15 分钟前
【项目实训(个人10)】
开发语言·前端·javascript
右耳朵猫AI21 分钟前
Java & JVM技术周刊 2026年第20周
java·开发语言·jvm
人道领域22 分钟前
【LeetCode刷题日记】538.把二叉搜索树转换为累加树
java·开发语言·后端·算法·leetcode
铁皮哥23 分钟前
【后端开发】什么是守护线程,和普通线程有什么区别?
java·开发语言·数据库·人工智能·python·spring·intellij-idea
并不喜欢吃鱼25 分钟前
从零开始 C++----- 十二【C++ 数据结构】map/set 全解析:从使用到红黑树底层模拟实现
开发语言·数据结构·c++
zlinear数据采集卡26 分钟前
电源纹波无处遁形!工业采集卡电源去耦与滤波电路深度解析
c语言·嵌入式硬件·fpga开发·自动化·硬件架构
枫叶丹428 分钟前
【HarmonyOS 6.0】Live View Kit 实况窗开发详解:进度胶囊支持副文本功能探究
开发语言·华为·harmonyos
不会C语言的男孩28 分钟前
C++ Primer Plus 第17章:输入、输出和文件
开发语言·c++