Ошибка 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);

Другие вопросы по тегам