我有一个窗口句柄列表,对于每个句柄,都需要评估它是否指的是 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 过程;但我宁愿解决问题然后解决它们。
对此问题的任何见解,它发生的原因以及如何处理它......将不胜感激。
谢谢