public static IEnumerable <WinHandle> FindWindows(Predicate <WinHandle> pred) { if (pred == null) { throw new ArgumentNullException(nameof(pred)); } List <WinHandle> winList = null; NtApi.EnumWindows((ptr, lp) => { var win = new WinHandle(ptr); if (pred.Invoke(win)) { if (winList == null) { winList = new List <WinHandle>(); } winList.Add(win); } return(NtApi.EnumWindowsContinueEnumerating); }, IntPtr.Zero); return(winList ?? Enumerable.Empty <WinHandle>()); }
public static WinHandle FindWindow(Predicate <WinHandle> pred) { if (pred == null) { throw new ArgumentNullException(nameof(pred)); } var ret = WinHandle.Invalid; NtApi.EnumWindows((ptr, lp) => { var win = new WinHandle(ptr); if (pred.Invoke(win)) { ret = win; return(NtApi.EnumWindowsStopEnumerating); } return(NtApi.EnumWindowsContinueEnumerating); }, IntPtr.Zero); return(ret); }