WindowsXPによるゴーストウインドウを抑制する
http://support.microsoft.com/default.aspx?scid=kb;ja;817611
↑の件に関してWindowsXPで追加されたゴーストウインドウ機能を無効にする方法の一つ。
こんな感じのスタティックメソッドを作っておきアプリケーションの初期化時に呼ぶ。
public static void DisableProcessWindowsGhostingImpl() { int hmod = LoadLibrary("User32"); int funcaddr = GetProcAddress(hmod, "DisableProcessWindowsGhosting"); if (funcaddr != 0) { DisableProcessWindowsGhosting(); } FreeLibrary(hmod); } .. [DllImport("User32")] public extern static void DisableProcessWindowsGhosting();
アドレスが有効か否かを検査しているのはO/Sによっては同APIをサポートしているとは
限らないから。
ゴーストウインドウ機能は、アプリケーションが時間のかかっている処理を行っている際に、操作者にはアプリケーションがハングしている様に見えてしまうのを避ける為に用意
されたそうだが、こちとら処理中に操作者が誤操作しないようにわざわざ全てのコントロールのEnabledプロパティをfalseにしているにも関らず、ボタン等があたかも操作できるように見えてしまうので人によっては大きなお世話も甚だしい機能。
.NETには非同期デリゲートもあるのだしこんな機能は私のシステムにはいらない。