>>5
var lst = new List<IntPtr>();

EnumWindows( ( hwnd, lParam ) =>
{
 lst.Add( hwnd );
 return 1;
}, IntPtr.Zero );


じゃあかんのか?
ローカルなデリゲートのメモリ上の位置って移動したっけ?
スコープ抜けるまでは有効なんじゃね?