ウィンドウ ハンドルのリストがあり、それぞれについて、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 プロシージャを迂回することができます。しかし、私は問題を解決してから回避したいと考えています。
この問題についての洞察、なぜそれが発生するのか、そしてそれをどのように処理するのか....大歓迎です。
ありがとう