Mindjet
V2EX  ›  Windows

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

  •  
  •   Mindjet · Jul 12, 2020 · 2520 views
    This topic created in 2171 days ago, the information mentioned may be changed or developed.

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

    如何做到这一点?

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

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


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

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

    之所以显得那么着急,主要是因为心里比较急迫,事实上大多时候都没必要精确。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5019 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 04:02 · PVG 12:02 · LAX 21:02 · JFK 00:02
    ♥ Do have faith in what you're doing.