c++ - 输入法编辑器窗口为 WM_QUERYENDSESSION 返回 FALSE - 为什么?

标签 c++ windows ime

我们有一个奇怪且非常罕见的问题,即人们无法在我们的产品运行时注销 Windows 服务器。系统是多应用的,都是MFC/C++。这些应用程序从管理服务运行,因此它们在注销后仍然存在。多年来,它在世界各地的大量安装中一直运行良好。

我编写了一个测试应用程序来枚举所有窗口,向它们发送 WM_QUERYENDSESSION 消息,并在返回 FALSE 时停止。该测试是针对德国出现的问题重现的罕见案例之一进行的。它似乎总是一个不可见的 IME(输入法编辑器)窗口是罪魁祸首,但 IME 窗口始终属于我们的 MFC 应用程序之一。我想我可以通过调用 ImmDisableIME (-1) 来解决单个应用程序的问题。但我正在寻找的是...

(a) 如果有人有一个配置方法来解决这个问题,那么我们就不必修改所有国家/地区的所有应用程序的所有版本 - 这是一项艰巨的工作。

(b) 为什么首先要发生这种情况。为什么不是我们创建的 IME 窗口会决定用户无法注销?

(c) 有没有其他人见过这个?你知道,苦难喜欢陪伴。

如前所述,目前它正在德国的一台机器上进行。当然,我们不能在任何版本的 Windows 上重现。呸。

最佳答案

Microsoft 似乎在使用各种版本的 IME 时遇到了其中的一些问题。我发现了一些相对较旧的更新。您的客户运行的是什么操作系统,他们是否安装了 Office 版本?是否可以确定在您的案例中创建 IME 窗口的模块的文件名和版本?

这是 Office 2003 中与 IME 相关的更新:

Microsoft Known Bug 870774

The message box takes 30 seconds to close when you shutdown Windows

When you try to shutdown a Japanese Windows 2000-based computer that has the Office 2003 framework that is used to support advanced text services installed without first closing all your open programs, you receive a message box for each open program. When you click End, it takes approximately 30 seconds to close each message box before Windows can shutdown.

  File name   Version
   -----------------------
   Msctf.dll   5.1.2409.39
   Msimtf.dll  5.1.2409.39
   Input.cpl   5.1.2409.39
   Sptip.dll   5.1.2409.39

这是与 Windows XP IME 相关的更新:

Microsoft Known Bug 811147

Windows Messenger Hangs During Shutdown and a Terminate Program Dialog Box Appears

   Date         Time   Version     Size     File name
   ----------------------------------------------------
   17-Jan-2003  15:36  8.1.4008.0   57,400  Cplexe.exe
   17-Jan-2003  15:34  8.1.4008.0  335,917  Imjp81.ime
   06-Feb-2003  13:56  8.1.4008.0  827,438  Imjp81k.dll
   06-Feb-2003  13:56  8.1.4008.0  360,494  Imjpcic.dll
   06-Feb-2003  13:56  8.1.4008.0  716,857  Imjpcus.dll
   06-Feb-2003  13:56  8.1.4008.0   81,977  Imjpdct.dll
   22-Jan-2003  09:52  8.1.4008.0  307,258  Imjpdct.exe
   17-Jan-2003  15:36  8.1.4008.0  155,706  Imjpdsvr.exe
   17-Jan-2003  15:36              196,666  Imjpinst.exe
   17-Jan-2003  15:36  8.1.4008.0  208,953  Imjpmig.exe
   17-Jan-2003  15:36  8.1.4008.0  233,528  Imjprw.exe
   17-Jan-2003  15:36  8.1.4008.0  262,201  Imjputy.exe
   06-Feb-2003  13:56  8.1.4008.0  274,490  Imjputyc.dll
   14-Nov-2002  10:01  5.3.10.0      4,608  Spmsg.dll

关于c++ - 输入法编辑器窗口为 WM_QUERYENDSESSION 返回 FALSE - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499293/

相关文章:

python - Windows 上的子进程未收到信号 (SIGTERM)

java - Selenium ImeActivationFailedException 和 ImeNotAvailableException

c++ - 如何在类对象中分配数组

c++ - libstdc++ 在 Mac 上找不到线程文件

c - 以编程方式查找单词含义并将其打印到文件

android - 手势输入是 AOSP LatinIME 的一部分吗?

C# - 在同一键盘布局中的两个不同 IME 之间自动切换

C++ 函数原型(prototype)

c++ - Eigen Sparse LU 求解器返回值

java - 从 Java 调用时隐藏 BAT 文件窗口