V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Mindjet
V2EX  ›  Windows

如何阻止 Windows 系统中的某个窗口关闭?

  •  
  •   Mindjet · 2020-07-12 16:07:03 +08:00 · 2021 次点击
    这是一个创建于 1594 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想阻止用户通过 Alt+F4 或单击“关闭”按钮关闭窗口。

    如何做到这一点?

    我想 WindowsAPI 可以做到,但我没有任何经验,也找不到具体的解决方案。

    当然,能够实现它是很好的,不必使用特定的 API 。


    背景:用 Word 来读书,关闭之后过了几天再找到想看的地方变得很难,Word2013 后自带了可以回到之前阅读位置的方法,但是那个东西很不稳定,经常保存不下来。我想在 word 关闭的时候,阻止关闭,并弹出通知提醒,先加入书签再退出。

    11 条回复    2020-07-12 18:00:40 +08:00
    zhyl
        1
    zhyl  
       2020-07-12 16:10:58 +08:00 via Android
    点击关闭按钮一般是发送 wm_close 消息,hook word 的消息处理函数可以拦截关闭。结束进程是 exitthread 函数,hook 它也能阻止关闭。
    fuchunliu
        2
    fuchunliu  
       2020-07-12 16:11:05 +08:00 via Android
    打印成 pdf
    kn007
        3
    kn007  
       2020-07-12 16:14:25 +08:00
    最简单的应该是用 user32.dll 的 SetWindowLongPtrW 方法,把 SYSMENU 去掉
    Mindjet
        4
    Mindjet  
    OP
       2020-07-12 16:17:28 +08:00
    @kn007 #3 去掉之后,用 Alt+F4 也关不掉吗?
    BBrother
        5
    BBrother  
       2020-07-12 16:21:13 +08:00
    如果一定要用 word 的话,可以把要读的部分字体变大,养成习惯就好
    kn007
        6
    kn007  
       2020-07-12 16:24:32 +08:00
    @Mindjet 哦,不好意思,没审题清楚,alt+f4 的话是 SendMessage 给窗口,只能 hook wm_close 信号。
    你可以同样使用 SetWindowLongPtrW,然后注册个回调函数,函数抓取 wm_close 信号直接 return 1 就好了,确认无误想关闭的时候用 CallWindowProc 就可以了
    Mindjet
        7
    Mindjet  
    OP
       2020-07-12 16:33:00 +08:00
    @kn007 #6
    @zhyl #1
    谢谢两位,看来 Hook 是最好的方案,之前没接触过 WindowsAPI 的调用,准备去学学看。感觉上面的示例文档都是用 C 语言写的,学过点 Java,据说 C#和 Java 类似,而且是微软自家的,准备用 C#试试看。
    ipwx
        8
    ipwx  
       2020-07-12 16:47:13 +08:00
    。。。说真的,我觉得打印成 PDF 然后用 whatever 阅读器,你的体验会好很多的。比你折腾这个有效多了。
    Yourshell
        9
    Yourshell  
       2020-07-12 17:00:19 +08:00
    刻舟求剑不可取
    Mindjet
        10
    Mindjet  
    OP
       2020-07-12 17:28:13 +08:00
    @ipwx #8 PDF 的主要特点是高度还原内容,在各种平台有良好的一致性,而且任何内容转成 PDF 都很简单。由于这些特点,作为阅读电子书格式的时候不可避免的有些缺点,之前一直用 PDF,现在主要用 Word,互有优劣。
    Mindjet
        11
    Mindjet  
    OP
       2020-07-12 18:00:40 +08:00
    @BBrother #5
    现在感觉 PDF 太精准也未必好,如果某本书很长时间没看,复习上一段也是挺有好处的,看同一个内容获取的知识,居然还有不一样的地方。

    之所以显得那么着急,主要是因为心里比较急迫,事实上大多时候都没必要精确。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:22 · PVG 23:22 · LAX 07:22 · JFK 10:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.