private Dictionary<string, object> GetWindowAttributes(IntPtr hwnd, Win32.WINDOWINFO windowinfo) { Dictionary<string, object> attributes = new Dictionary<string, object>(); attributes["handle"] = hwnd; ExpensiveWindowInfo expensiveInfo; if (!_windowInfo.TryGetValue(hwnd, out expensiveInfo)) { expensiveInfo = new ExpensiveWindowInfo(Win32.GetClassName(hwnd), Win32.GetWindowText(hwnd), Win32.GetProcessPathFromWindowHandle(hwnd)); _windowInfo.Add(hwnd, expensiveInfo); } attributes["processfilename"] = expensiveInfo.ProcessFilePath; attributes["title"] = expensiveInfo.Title; attributes["classname"] = expensiveInfo.ClassName; attributes["style"] = windowinfo.dwStyle; attributes["exstyle"] = windowinfo.dwExStyle; return attributes; }