У меня есть список оконных дескрипторов, и для каждого из них нужно оценить, относится ли это к MS Excel или нет. Я написал небольшую функцию isExcel для этой цели.Ошибка GetClassName в определенном приложении (Lync)
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 для этого дескриптора конкретного приложения; но я бы скорее решил проблемы, а затем обойти их.
Любое понимание этой проблемы, почему это происходит и как с ней справиться .... было бы весьма полезно.
Thanks
Вы забыли установить Capacity StringBuilder, это не 100, как вы и обещали. Повреждение кучи вызывает очень случайное поведение при сбоях. –
Спасибо, Ганс .. я сейчас чувствую себя глупо! – Esby