更新桌面使用接口:IActiveDesktop
Com接口不能直接在.net中使用,所以需要在.net中重新定义,接口中使用的 , 结构也需要重新定义从网上找到这样一个类
引用地址:http:
//
www.dotnet247.com/247reference/msgs/41/205722.aspx
using
System;
using
System.Runtime.InteropServices;
namespace
WallPaper
{
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
*/
{ }
}
该类使用方法
ActiveDesktop ad
=
new
ActiveDesktop();
IActiveDesktop iad
=
ad
as
IActiveDesktop;
if
(iad
!=
null
)
{
iad.SetWallpaper(
"
d:\\WallPaper\\飞翔.jpg
"
,
0
);
iad.ApplyChanges(AD_APPLY.ALL);
System.Runtime.InteropServices.Marshal.ReleaseComObject(ad);
ad
=
null
;
}
转载于:https://www.cnblogs.com/yangxiao/articles/1084011.html