Ошибка GetClassName в конкретном приложении (Lync)
У меня есть список оконных дескрипторов, и для каждого нужно оценить, относится ли это к 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 ответ
У меня похожая проблема. Я исправляю это с помощью другого конструктора StringBuilder: StringBuilder lpClassName = new StringBuilder("",256);