0

我有一个窗口句柄列表,对于每个句柄,都需要评估它是否指的是 MS Excel。为此,我编写了一个小的“isExcel”函数。

private bool isExcel(IntPtr wHdl){
        bool f = false;
        StringBuilder lpClassName = new StringBuilder();
        GetClassName(wHdl, lpClassName, 100);
        f = ((lpClassName.ToString() == "MS-SDIb") || (lpClassName.ToString() == "XLMAIN"));
        return f;
   }

这完美地工作....除了在某些情况下。MS Lync 和 MS SQL Server Management Studio 2012

当与这些应用程序关联的窗口句柄遇到上述过程时,它不仅会失败,还会使我的应用程序崩溃。失败的线路和错误如下:

GetClassName(wHdl, lpClassName, 100);

“vshost32.exe 已停止工作”

然后我的应用程序关闭。

我显然可以解决这个问题,并绕过这些特定应用程序句柄的 isExcel 过程;但我宁愿解决问题然后解决它们。

对此问题的任何见解,它发生的原因以及如何处理它......将不胜感激。

谢谢

4

1 回答 1

1

我有类似的问题。我通过使用另一个 StringBuilder 构造函数来修复它:StringBuilder lpClassName = new StringBuilder("",256);

于 2017-01-20T09:30:38.850 回答