特定应用程序(Lync)上的GetClassName错误

时间:2014-11-20 09:39:22

标签: c# window-handles

我有一个窗口句柄列表,每个窗口句柄都需要评估它是否引用了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程序;但我宁愿解决问题然后解决它们。

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

由于

1 个答案:

答案 0 :(得分:1)

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