c# 使用ActiveDesktop实现壁纸切换,适合大部分图片格式
2011-08-17 23:54
726 查看
我的广告单元,有空点一下哦,谢谢!
操作步骤: 首先添加类: using System; using System.Runtime.InteropServices; namespace WorkHelper { enum WPSTYLE { CENTER = 0, TILE = 1, STRETCH = 2, MAX = 3 } struct WALLPAPEROPT { public int dwSize; public WPSTYLE dwStyle; } struct COMPONENTSOPT { public int dwSize; [MarshalAs(UnmanagedType.Bool)] public bool fEnableComponents; [MarshalAs(UnmanagedType.Bool)] public bool fActiveDesktop; } struct COMPPOS { public const int COMPONENT_TOP = 0x3FFFFFFF; public const int COMPONENT_DEFAULT_LEFT = 0xFFFF; public const int COMPONENT_DEFAULT_TOP = 0xFFFF; public int dwSize; public int iLeft; public int iTop; public int dwWidth; public int dwHeight; public int izIndex; [MarshalAs(UnmanagedType.Bool)] public bool fCanResize; [MarshalAs(UnmanagedType.Bool)] public bool fCanResizeX; [MarshalAs(UnmanagedType.Bool)] public bool fCanResizeY; public int iPreferredLeftPercent; public int iPreferredTopPercent; } [Flags] enum ITEMSTATE { NORMAL = 0x00000001, FULLSCREEN = 00000002, SPLIT = 0x00000004, VALIDSIZESTATEBITS = NORMAL | SPLIT | FULLSCREEN, VALIDSTATEBITS = NORMAL | SPLIT | FULLSCREEN | unchecked((int)0x80000000) | 0x40000000 } struct COMPSTATEINFO { public int dwSize; public int iLeft; public int iTop; public int dwWidth; public int dwHeight; public int dwItemState; } enum COMP_TYPE { HTMLDOC = 0, PICTURE = 1, WEBSITE = 2, CONTROL = 3, CFHTML = 4, MAX = 4 } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] struct COMPONENT { private const int INTERNET_MAX_URL_LENGTH = 2084; // = // INTERNET_MAX_SCHEME_LENGTH (32) + "://\0".Length + // INTERNET_MAX_PATH_LENGTH (2048) public int dwSize; public int dwID; public COMP_TYPE iComponentType; [MarshalAs(UnmanagedType.Bool)] public bool fChecked; [MarshalAs(UnmanagedType.Bool)] public bool fDirty; [MarshalAs(UnmanagedType.Bool)] public bool fNoScroll; public COMPPOS cpPos; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string wszFriendlyName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = INTERNET_MAX_URL_LENGTH)] public string wszSource; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = INTERNET_MAX_URL_LENGTH)] public string wszSubscribedURL; #if AD_IE5 public int dwCurItemState; public COMPSTATEINFO csiOriginal; public COMPSTATEINFO csiRestored; #endif } enum DTI_ADTIWUI { DTI_ADDUI_DEFAULT = 0x00000000, DTI_ADDUI_DISPSUBWIZARD = 0x00000001, DTI_ADDUI_POSITIONITEM = 0x00000002, } [Flags] enum AD_APPLY { SAVE = 0x00000001, HTMLGEN = 0x00000002, REFRESH = 0x00000004, ALL = SAVE | HTMLGEN | REFRESH, FORCE = 0x00000008, BUFFERED_REFRESH = 0x00000010, DYNAMICREFRESH = 0x00000020 } [Flags] enum COMP_ELEM { TYPE = 0x00000001, CHECKED = 0x00000002, DIRTY = 0x00000004, NOSCROLL = 0x00000008, POS_LEFT = 0x00000010, POS_TOP = 0x00000020, SIZE_WIDTH = 0x00000040, SIZE_HEIGHT = 0x00000080, POS_ZINDEX = 0x00000100, SOURCE = 0x00000200, FRIENDLYNAME = 0x00000400, SUBSCRIBEDURL = 0x00000800, ORIGINAL_CSI = 0x00001000, RESTORED_CSI = 0x00002000, CURITEMSTATE = 0x00004000, ALL = TYPE | CHECKED | DIRTY | NOSCROLL | POS_LEFT | SIZE_WIDTH | SIZE_HEIGHT | POS_ZINDEX | SOURCE | FRIENDLYNAME | POS_TOP | SUBSCRIBEDURL | ORIGINAL_CSI | RESTORED_CSI | CURITEMSTATE } [Flags] enum ADDURL { SILENT = 0x0001 } [ ComImport(), Guid("F490EB00-1240-11D1-9888-006097DEACF9"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown) ] interface IActiveDesktop { void ApplyChanges(AD_APPLY dwFlags); void GetWallpaper([MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pwszWallpaper, int cchWallpaper, int dwReserved); void SetWallpaper([MarshalAs(UnmanagedType.LPWStr)] string pwszWallpaper, int dwReserved); void GetWallpaperOptions(ref WALLPAPEROPT pwpo, int dwReserved); void SetWallpaperOptions([In] ref WALLPAPEROPT pwpo, int dwReserved); void GetPattern([MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pwszPattern, int cchPattern, int dwReserved); void SetPattern([MarshalAs(UnmanagedType.LPWStr)] string pwszPattern, int dwReserved); void GetDesktopItemOptions(ref COMPONENTSOPT pco, int dwReserved); void SetDesktopItemOptions([In] ref COMPONENTSOPT pco, int dwReserved); void AddDesktopItem([In] ref COMPONENT pcomp, int dwReserved); void AddDesktopItemWithUI(IntPtr hwnd, [In] ref COMPONENT pcomp, DTI_ADTIWUI dwFlags); void ModifyDesktopItem([In] ref COMPONENT pcomp, COMP_ELEM dwFlags); void RemoveDesktopItem([In] ref COMPONENT pcomp, int dwReserved); void GetDesktopItemCount(out int lpiCount, int dwReserved); void GetDesktopItem(int nComponent, ref COMPONENT pcomp, int dwReserved); void GetDesktopItemByID(IntPtr dwID, ref COMPONENT pcomp, int dwReserved); void GenerateDesktopItemHtml([MarshalAs(UnmanagedType.LPWStr)] string pwszFileName, [In] ref COMPONENT pcomp, int dwReserved); void AddUrl(IntPtr hwnd, [MarshalAs(UnmanagedType.LPWStr)] string pszSource, [In] ref COMPONENT pcomp, ADDURL dwFlags); void GetDesktopItemBySource([MarshalAs(UnmanagedType.LPWStr)] string pwszSource, ref COMPONENT pcomp, int dwReserved); } [ ComImport(), Guid("75048700-EF1F-11D0-9888-006097DEACF9") ] class ActiveDesktop /* : IActiveDesktop */ { } } 调用:(终于搞定背景图片样式了) public bool SetDeskBg(String filename) { try { ActiveDesktop ad = new ActiveDesktop(); IActiveDesktop iad = ad as IActiveDesktop; if (iad != null) { //WPSTYLE_CENTER 居中 0 //WPSTYLE_TILE 平铺 1 //WPSTYLE_STRETCH 拉伸 2 WPSTYLE dwstyle = WPSTYLE.STRETCH;//这里调整显示背景图片样式 WALLPAPEROPT wp = new WALLPAPEROPT(); wp.dwSize = System.Runtime.InteropServices.Marshal.SizeOf(wp); wp.dwStyle = dwstyle; iad.SetWallpaperOptions(ref wp, 0); iad.SetWallpaper(filename, 0); iad.ApplyChanges(AD_APPLY.ALL); System.Runtime.InteropServices.Marshal.ReleaseComObject(ad); ad = null; } return true; } catch { return false; } }
相关文章推荐
- JPEG图片文件格式浅析,以及使用C#实现图片的解析
- Android中使用imageviewswitcher 实现图片切换轮播导航的方法
- 使用ViewPager实现图片自动切换
- 使用JavaScript实现点击循环切换图片效果
- 使用JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
- C#使用FFmpeg 将视频格式转换成Gif图片示例
- Android开发之使用ViewPager实现图片左右滑动切换效果
- 灵活使用数组制作图片切换js实现
- js实现使用鼠标拖拽切换图片的方法
- C#中使用iframe结合js实现图片异步上传
- C#(WPF)按钮图片不显示,壁纸切换功能
- C#使用Socket实现发送和接收图片的方法
- 使用ViewFlipper实现图片自动切换,并支持手势滑动切换
- Android中使用ImageViewSwitcher实现图片切换轮播导航效果
- 使用jQuery实现验证上传图片的格式与大小
- C#使用适合阅读的格式显示文件大小
- atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
- 关于使用JavaScript实现图片点击切换(附带改变导航图片 方案一)
- 微信小程序例子——使用swiper组件实现图片切换