0

ウィンドウ ハンドルのリストがあり、それぞれについて、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 プロシージャを迂回することができます。しかし、私は問題を解決してから回避したいと考えています。

この問題についての洞察、なぜそれが発生するのか、そしてそれをどのように処理するのか....大歓迎です。

ありがとう

4

1 に答える 1