对于WM_QUERYENDSESSION,输入法编辑器窗口返回FALSE - 为什么?

时间:2009-09-30 16:36:19

标签: c++ windows ime

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

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

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

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

(c)有没有人见过这个?你知道,Misery喜欢公司。

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

2 个答案:

答案 0 :(得分:2)

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

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

  

Microsoft Known Bug 870774

     

关闭Windows

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

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

  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在关机期间挂起并出现终止程序对话框

   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

答案 1 :(得分:0)

另一个建议:

如果您知道哪个窗口出现故障,并且每次都可以尝试对窗口进行子类化并直接处理WM_QUERYSESSIONEND消息,那么它就是相同的窗口。这使得IME窗口脱离了等式,应该是一个相当可维护的解决方案。