【问题标题】:Input Method Editor windows return FALSE for WM_QUERYENDSESSION - why?输入法编辑器窗口为 WM_QUERYENDSESSION 返回 FALSE - 为什么?
【发布时间】:2010-12-02 17:26:42
【问题描述】:

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

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

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

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

(c) 其他人以前见过这个吗?痛苦喜欢陪伴,你知道的。

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

【问题讨论】:

  • 听起来 MFC 的隐藏 IME 窗口没有将 WM_QUERYENDSESSION 消息传递给 DefWindowProc()。

标签: c++ windows ime


【解决方案1】:

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

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

Microsoft Known Bug 870774

关闭 Windows 时消息框需要 30 秒才能关闭

当您尝试关闭具有 Office 2003 框架的基于日语 Windows 2000 的计算机时,该框架用于支持安装了高级文本服务,而无需先关闭所有 您打开的程序,您会收到每个打开程序的消息框。单击“结束”时,关闭每个消息框大约需要 30 秒,然后 Windows 才能关闭。

文件名 版本 ---------------------- Msctf.dll 5.1.2409.39 Msimtf.dll 5.1.2409.39 输入.cpl 5.1.2409.39 Sptip.dll 5.1.2409.39

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

Microsoft Known Bug 811147

Windows Messenger 在关机期间挂起并出现终止程序对话框

日期时间版本大小文件名 -------------------------------------------------- -- 2003 年 1 月 17 日 15:36 8.1.4008.0 57,400 Cplexe.exe 2003 年 1 月 17 日 15:34 8.1.4008.0 335,917 Imjp81.ime 2003 年 2 月 6 日 13:56 8.1.4008.0 827,438 Imjp81k.dll 2003 年 2 月 6 日 13:56 8.1.4008.0 360,494 Imjpcic.dll 2003 年 2 月 6 日 13:56 8.1.4008.0 716,857 Imjpcus.dll 2003 年 2 月 6 日 13:56 8.1.4008.0 81,977 Imjpdct.dll 2003 年 1 月 22 日 09:52 8.1.4008.0 307,258 Imjpdct.exe 2003 年 1 月 17 日 15:36 8.1.4008.0 155,706 Imjpdsvr.exe 2003 年 1 月 17 日 15:36 196,666 Imjpinst.exe 2003 年 1 月 17 日 15:36 8.1.4008.0 208,953 Imjpmig.exe 2003 年 1 月 17 日 15:36 8.1.4008.0 233,528 Imjprw.exe 2003 年 1 月 17 日 15:36 8.1.4008.0 262,201 Imjputy.exe 2003 年 2 月 6 日 13:56 8.1.4008.0 274,490 Imjputyc.dll 2002 年 11 月 14 日 10:01 5.3.10.0 4,608 Spmsg.dll

【讨论】:

  • 他们不太可能在服务器上安装 Office,但值得一试。我还会让他们关闭高级文本服务,看看是否有什么不同。
  • 是的,我收到了来自德国的通知,说关闭高级文本服务可以解决问题,所以我会接受这个。
  • 老鼠,所以不会让我投票(太老了),但我还是接受了。
【解决方案2】:

另一个建议:

如果您知道哪个窗口有问题并且每次都相同,您可以尝试对窗口进行子分类并直接处理 WM_QUERYSESSIONEND 消息。这将 IME 窗口排除在外,应该是一个相当可维护的解决方案。

【讨论】:

  • 我希望有一些方法可以配置 IME 或 Windows 本身以防止系统范围内的问题,我真的不想修改大约 30 个服务器端的代码没有非常好的理由的 MFC 应用程序 :-)。不过我会考虑的……
  • @Bob,可能有。我对 IME 有点陌生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 2014-11-17
  • 2014-03-11
  • 2019-07-12
  • 2012-08-24
  • 2013-03-08
相关资源
最近更新 更多