static void ChangeWallPaper() { try { var pathElement = _driver.FindElementById("picture-background"); var url = pathElement.GetAttribute("src"); if (_currentImageUrl != url) { _currentImageUrl = url; using (WebClient client = new WebClient()) { IActiveDesktop iad = shlobj.GetActiveDesktop(); client.DownloadFile(new Uri(url), "wallpaper"); iad.SetWallpaper(Path.Combine(Environment.CurrentDirectory, "wallpaper"), 0); WALLPAPEROPT wopt = new WALLPAPEROPT(); iad.GetWallpaperOptions(ref wopt, 0); wopt.dwStyle = WallPaperStyle.WPSTYLE_STRETCH; wopt.dwSize = WALLPAPEROPT.SizeOf; iad.SetWallpaperOptions(ref wopt, 0); iad.ApplyChanges(AD_Apply.ALL | AD_Apply.FORCE | AD_Apply.BUFFERED_REFRESH); } } } catch { //driver died most likely, it will get restarted } }
private void ProduceThread() { IActiveDesktop ad = (IActiveDesktop) new ActiveDesktop(); _signal.Set(); while (true) { _signal.WaitOne(); Job query; while (_queue.TryDequeue(out query)) { object retval = null; dynamic input = query.input; try { switch (query.method_idx) { case 0: ad.ApplyChanges((uint)input.dwFlags); break; case 1: retval = StringDelegate((b) => ad.GetWallpaper(b, (uint)b.Capacity, (uint)input.dwFlags)); break; case 2: ad.SetWallpaper((string)input.pwszWallpaper); break; case 3: ad.GetWallpaperOptions((WallpaperOpt)(retval = new WallpaperOpt())); break; case 4: ad.SetWallpaperOptions(new WallpaperOpt((dynamic)input.pwpo)); break; case 5: retval = StringDelegate((b) => ad.GetPattern(b, (uint)b.Capacity)); break; case 6: ad.SetPattern((string)input.pwszPattern); break; case 7: ad.GetDesktopItemOptions((ComponentsOpt)(retval = new ComponentsOpt())); break; case 8: ad.SetDesktopItemOptions(new ComponentsOpt((dynamic)input.pco)); break; case 9: ad.AddDesktopItem(new Component((dynamic)input.pcomp)); break; case 10: ad.AddDesktopItemWIthUI((IntPtr)input.hwnd, new Component((dynamic)input.pcomp), (uint)input.dwFlags); break; case 11: ad.ModifyDesktopItem((Component)(retval = new Component((dynamic)input.pcomp)), (uint)input.dwFlags); break; case 12: ad.RemoveDesktopItem(new Component((dynamic)input.pcomp)); break; case 13: int pcItems; ad.GetDesktopItemCount(out pcItems); retval = pcItems; break; case 14: ad.GetDesktopItem((int)input.nComponent, (Component)(retval = new Component((dynamic)input.pcomp))); break; case 15: ad.GetDesktopItemByID((ulong)input.dwID, (Component)(retval = new Component((dynamic)input.pcomp))); break; case 16: ad.GenerateDesktopItemHtml((string)input.pwszFileName, new Component((dynamic)input.pcomp)); break; case 17: ad.AddUrl((IntPtr)input.hwnd, (string)input.pszSource, new Component((dynamic)input.pcomp), (uint)input.dwFlags); break; case 18: ad.GetDesktopItemBySource((string)input.pszSource, (Component)(retval = new Component((dynamic)input.pcomp))); break; } query.retval = retval; } catch (Exception e) { query.e = e; } query._signal.Set(); } } }