我有一个窗口句柄列表,每个窗口句柄都需要评估它是否引用了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程序;但我宁愿解决问题然后解决它们。
对此问题的任何见解,为什么会发生以及如何处理它......将不胜感激。
由于
答案 0 :(得分:1)
我有类似的问题。我通过使用另一个StringBuilder构造函数来修复它:StringBuilder lpClassName = new StringBuilder("",256);