News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests

Main Menu

ole32.lib

Started by six_L, May 08, 2018, 11:50:26 PM

Previous topic - Next topic

six_L

Do you have the ole32.lib(win64) which includes _imp__CoCreateInstance@20 ?
i hope you upload it on here attachment.
Say you, Say me, Say the codes together for ever.

jj2007

Masm64 SDK: \Masm32\lib64\ole32.lib

six_L

thanks your response。
QuoteMasm64 SDK: \Masm32\lib64\ole32.lib
no _imp__CoCreateInstance@20
Say you, Say me, Say the codes together for ever.

Vortex

Hi six_L,

If we are talking about Win64 programming, the decorated symbol _imp__CoCreateInstance@20 is not valid as the default calling x64 convention if fastcall. You would expect this one from the VS2010 Express installation : C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\Ole32.Lib exports CoCreateInstance

hutch--

Both in OLE32.LIB and INC.


externdef __imp_CoCreateInstance:PPROC
CoCreateInstance equ <__imp_CoCreateInstance>

externdef __imp_CoCreateInstanceEx:PPROC
CoCreateInstanceEx equ <__imp_CoCreateInstanceEx>

six_L

Hi,Vortex
thanks yout respone.
Quotethe decorated symbol _imp__CoCreateInstance@20 is not valid as the default calling x64 convention if fastcall.
this is the cause of the problem.i can't find the VS2010 Express on internet,use the another method.i'm testing your codes "SetWallpaper.asm",the codes can't work rightly,it setted my Wallpaper into black.
option casemap:none
option win64:3
;option frame:auto
;option fieldalign:8
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \UASM64\include\windows.inc

includelib \UASM64\Lib\kernel32.lib
includelib \UASM64\Lib\user32.lib
includelib \UASM64\Lib\ole32.lib
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
COMINTERFACE IActiveDesktop

CVIRTUAL  ApplyChanges ,DWORD, :DWORD
CVIRTUAL  GetWallpaper ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  SetWallpaper ,DWORD, :PTR, :DWORD
CVIRTUAL  GetWallpaperOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  SetWallpaperOptions ,DWORD,:PTR,:DWORD
CVIRTUAL  GetPattern  ,DWORD,:PTR, :DWORD, :DWORD
CVIRTUAL  SetPattern ,DWORD, :PTR, :DWORD
CVIRTUAL  GetDesktopItemOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  SetDesktopItemOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  AddDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  AddDesktopItemWithUI ,DWORD, :DWORD, :DWORD, :DWORD
CVIRTUAL  ModifyDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  RemoveDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemCount ,DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItem ,DWORD, :DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemByID ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  GenerateDesktopItemHtml ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  AddUrl ,DWORD, :DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemBySource ,DWORD, :PTR, :DWORD, :DWORD

ENDCOMINTERFACE

WPSTYLE_CENTER              equ 0
AD_APPLY_ALL                equ 7
CLSCTX_INPROC_SERVER        equ 1
NULL                        equ 0

WALLPAPEROPT STRUCT
dwSize     dd ?
dwStyle    dd ?
WALLPAPEROPT ENDS

GUID    STRUCT
Data1   dd ?
Data2   dw ?
Data3   dw ?
Data4   db 8 dup(?)
GUID ENDS

sCLSID_IActiveDesktop   TEXTEQU <{075048700h,0EF1Fh,011D0h,{098h,088h,00h,060h,097h,0DEh,0ACh,0F9h}}>
sIID_IActiveDesktop     TEXTEQU <{0F490EB00h,01240h,011D1h,{098h,088h,00h,060h,097h,0DEh,0ACh,0F9h}}>
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
;externdef __imp_CoCreateInstance:PPROC
;CoCreateInstance equ <__imp_CoCreateInstance>

;externdef __imp_CoCreateInstanceEx:PPROC
;CoCreateInstanceEx equ <__imp_CoCreateInstanceEx>

LPad TYPEDEF PTR IActiveDesktop
OPTION LITERALS:ON

_PCoCreateInstance typedef proto :qword,:qword,:qword,:qword,:qword
PCoCreateInstance typedef ptr _PCoCreateInstance
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
.data
CLSID_IActiveDesktop    GUID sCLSID_IActiveDesktop
IID_IActiveDesktop      GUID sIID_IActiveDesktop

DesktopImg dw "j","2",".","b","m","p",0,0
;DesktopImg dw "j2.bmp",0
pAD LPad 0
hole32_dll dq 0
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
.data?
wpo WALLPAPEROPT <>
_CoCreateInstance PCoCreateInstance ?
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
.code
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
getaddr_CoCreateInstance PROC
invoke LoadLibrary,CStr("ole32.dll")
.if rax
mov hole32_dll,rax
invoke GetProcAddress,hole32_dll,CStr("CoCreateInstance")
mov _CoCreateInstance,rax
.else
invoke MessageBox,NULL,CStr("ole32.dll load Failed"),CStr("LoadLibrary"),MB_OK
.endif
ret
getaddr_CoCreateInstance ENDP
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
start PROC
LOCAL uEdbuffer[260]:BYTE

invoke   getaddr_CoCreateInstance
.if _CoCreateInstance != 0

invoke   CoInitialize,NULL

invoke   _CoCreateInstance,ADDR CLSID_IActiveDesktop, NULL,CLSCTX_INPROC_SERVER,\
ADDR IID_IActiveDesktop,ADDR pAD           

mov      rdx,OFFSET wpo
mov      WALLPAPEROPT.dwSize[rdx],SIZEOF(WALLPAPEROPT)
mov      WALLPAPEROPT.dwStyle[rdx],WPSTYLE_CENTER

;invoke MultiByteToWideChar,CP_ACP,0,CStr("j2.bmp"),-1,addr uEdbuffer,260
;_VINVOKE pAD,IActiveDesktop,SetWallpaper,addr uEdbuffer,0
;_VINVOKE pAD,IActiveDesktop,SetWallpaper,CStr("j2.jpg"),0
_VINVOKE pAD,IActiveDesktop,SetWallpaper,addr DesktopImg,0
.if rax!=S_OK
invoke MessageBox,NULL,CStr("SetWallpaper Failed"),CStr("IActiveDesktop"),MB_OK
.endif
_VINVOKE pAD,IActiveDesktop,SetWallpaperOptions,ADDR wpo,0
_VINVOKE pAD,IActiveDesktop,ApplyChanges,AD_APPLY_ALL
_VINVOKE pAD,IActiveDesktop,Release

invoke   CoUninitialize
.endif
invoke FreeLibrary,hole32_dll

invoke  ExitProcess,0

start ENDP
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

end

Using the Active Desktop Object
[This feature is supported only under Windows XP or earlier. ]

This article contains information on the ActiveDesktop object that is part of the Windows Shell API. This object, through its IActiveDesktop interface, enables you to add, remove, and change items on the desktop.

Hi,hutch--
thanks yout respone.
Say you, Say me, Say the codes together for ever.

aw27

You don't need  VS2010 Express and the  OLE32.LIB that comes with Masm32/64-bit is all right.

The problem is that you are including Windows.inc from the HJWASM\JWASM\UASM WinInc distribution which has a few problems, namely it includes ObjBase.inc which defines:

proto_ typedef proto WINSTDCALLCONV  :REFCLSID, :LPUNKNOWN, :DWORD, :REFIID, :ptr LPVOID
externdef WINSTDCALLCONV _imp__CoCreateInstance@20: ptr proto_CoCreateInstance
CoCreateInstance equ <_imp__CoCreateInstance@20>

What you need to do in Objbase.inc is:
; proto_ typedef proto WINSTDCALLCONV  :REFCLSID, :LPUNKNOWN, :DWORD, :REFIID, :ptr LPVOID
; externdef WINSTDCALLCONV _imp__CoCreateInstance@20: ptr proto_CoCreateInstance
; CoCreateInstance equ <_imp__CoCreateInstance@20>

Then in your source code simply use this prototype:
CoCreateInstance proto :ptr, :ptr, :dword, :ptr, :ptr

No need for loadlibrary, getprocaddresses and all typedefes and things like that.

Vortex

Hi six_L,

I am sending the SetWallpaper example rebuilt with UASM 2.46.10 64-bit. You don't need VS2010, it was just an example to display the exported symbols ( they are not decorated. )

Building the example :

\uasm64\uasm64.exe -win64 SetWallpaper.asm

\PellesC\bin\polink /SUBSYSTEM:CONSOLE /ENTRY:start /LARGEADDRESSAWARE /LIBPATH:H:\masm32\lib64 SetWallpaper.obj


You can use Hutch's import libraries for Masm64 programming.

option casemap:none
option win64:3

include     SetWallpaper.inc
includelib  kernel32.lib
includelib  ole32.lib

LPad TYPEDEF PTR IActiveDesktop

OPTION LITERALS:ON

.data

CLSID_IActiveDesktop    GUID sCLSID_IActiveDesktop
IID_IActiveDesktop      GUID sIID_IActiveDesktop

DesktopImg  dw "test.bmp",0
pAD         LPad 0

.data?

wpo             WALLPAPEROPT <>

.code

start PROC

    invoke      CoInitialize,NULL

    invoke      CoCreateInstance,ADDR CLSID_IActiveDesktop,\
                NULL,CLSCTX_INPROC_SERVER,\
                ADDR IID_IActiveDesktop,ADDR pAD           

    mov         rdx,OFFSET wpo
    mov         WALLPAPEROPT.dwSize[rdx],SIZEOF(WALLPAPEROPT)
    mov         WALLPAPEROPT.dwStyle[rdx],WPSTYLE_CENTER

    _VINVOKE    pAD,IActiveDesktop,SetWallpaper,ADDR DesktopImg,0
    _VINVOKE    pAD,IActiveDesktop,SetWallpaperOptions,ADDR wpo,0
    _VINVOKE    pAD,IActiveDesktop,ApplyChanges,AD_APPLY_ALL
    _VINVOKE    pAD,IActiveDesktop,Release

    invoke      CoUninitialize
    invoke      ExitProcess,0

start ENDP

END start


The include file containing all the definitions and equates :

COMINTERFACE IActiveDesktop

CVIRTUAL  ApplyChanges ,DWORD, :DWORD
CVIRTUAL  GetWallpaper ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  SetWallpaper ,DWORD, :PTR, :DWORD
CVIRTUAL  GetWallpaperOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  SetWallpaperOptions ,DWORD,:PTR,:DWORD
CVIRTUAL  GetPattern  ,DWORD,:PTR, :DWORD, :DWORD
CVIRTUAL  SetPattern ,DWORD, :PTR, :DWORD
CVIRTUAL  GetDesktopItemOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  SetDesktopItemOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  AddDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  AddDesktopItemWithUI ,DWORD, :DWORD, :DWORD, :DWORD
CVIRTUAL  ModifyDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  RemoveDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemCount ,DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItem ,DWORD, :DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemByID ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  GenerateDesktopItemHtml ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  AddUrl ,DWORD, :DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemBySource ,DWORD, :PTR, :DWORD, :DWORD

ENDCOMINTERFACE

WPSTYLE_CENTER              equ 0
AD_APPLY_ALL                equ 7
CLSCTX_INPROC_SERVER        equ 1
NULL                        equ 0

WALLPAPEROPT STRUCT
dwSize     dd ?
dwStyle    dd ?
WALLPAPEROPT ENDS

GUID    STRUCT
    Data1   dd ?
    Data2   dw ?
    Data3   dw ?
    Data4   db 8 dup(?)
GUID ENDS

ExitProcess PROTO :QWORD
CoCreateInstance PROTO :QWORD,:QWORD,:QWORD,:QWORD,:QWORD
CoInitialize PROTO :QWORD
CoUninitialize PROTO

sCLSID_IActiveDesktop       TEXTEQU <{075048700h,0EF1Fh,011D0h,{098h,088h,00h,060h,097h,0DEh,0ACh,0F9h}}>
sIID_IActiveDesktop         TEXTEQU <{0F490EB00h,01240h,011D1h,{098h,088h,00h,060h,097h,0DEh,0ACh,0F9h}}>


six_L

Hi,aw27
Objbase.inc is:
; proto_ typedef proto WINSTDCALLCONV  :REFCLSID, :LPUNKNOWN, :DWORD, :REFIID, :ptr LPVOID
; externdef WINSTDCALLCONV _imp__CoCreateInstance@20: ptr proto_CoCreateInstance
; CoCreateInstance equ <_imp__CoCreateInstance@20>

Then in your source code simply use this prototype:
CoCreateInstance proto :ptr, :ptr, :dword, :ptr, :ptr

this is ok when i use "uasm64.exe -win64" and "link /ENTRY:start /SUBSYSTEM:windows /MACHINE:X64".
thanks you.

Hi,Vortex
Thanks you.
the wallpaper has setted by three background modes(Picture,Slide show,Pure color),the "SetWallpaper.exe(SetWallPaper64b)" sets the wallpaper into "Pure color",not the test.bmp.
Say you, Say me, Say the codes together for ever.

Vortex

Hi six_L,

I tested my code on Windows XP 64-bit. I will repeat it on Windows 7.

six_L

Hi,Vortex
Thanks you.
OS:windows 10 pro 64-bit
ver:1709 16299.431
Say you, Say me, Say the codes together for ever.

Vortex

Hi six_L,

Adding this line solved the problem :

invoke      GetFullPathName,ADDR DesktopImg,256,ADDR buffer,0

six_L

#12
Hi,Vortex
the codes work rightly.this is a frist 64-bit codes about COM.
thank you very much.

option casemap:none
option win64:3

include \UASM64\include\windows.inc

includelib \UASM64\Lib\kernel32.lib
includelib \UASM64\Lib\ole32.lib

COMINTERFACE IActiveDesktop

CVIRTUAL  ApplyChanges ,DWORD, :DWORD
CVIRTUAL  GetWallpaper ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  SetWallpaper ,DWORD, :PTR, :DWORD
CVIRTUAL  GetWallpaperOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  SetWallpaperOptions ,DWORD,:PTR,:DWORD
CVIRTUAL  GetPattern  ,DWORD,:PTR, :DWORD, :DWORD
CVIRTUAL  SetPattern ,DWORD, :PTR, :DWORD
CVIRTUAL  GetDesktopItemOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  SetDesktopItemOptions ,DWORD, :DWORD, :DWORD
CVIRTUAL  AddDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  AddDesktopItemWithUI ,DWORD, :DWORD, :DWORD, :DWORD
CVIRTUAL  ModifyDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  RemoveDesktopItem ,DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemCount ,DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItem ,DWORD, :DWORD, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemByID ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  GenerateDesktopItemHtml ,DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  AddUrl ,DWORD, :DWORD, :PTR, :DWORD, :DWORD
CVIRTUAL  GetDesktopItemBySource ,DWORD, :PTR, :DWORD, :DWORD

ENDCOMINTERFACE

WPSTYLE_CENTER              equ 0
AD_APPLY_ALL                equ 7
CLSCTX_INPROC_SERVER        equ 1
NULL                        equ 0

WALLPAPEROPT STRUCT
dwSize     dd ?
dwStyle    dd ?
WALLPAPEROPT ENDS

GUID    STRUCT
Data1   dd ?
Data2   dw ?
Data3   dw ?
Data4   db 8 dup(?)
GUID ENDS

CoCreateInstance PROTO :QWORD,:QWORD,:QWORD,:QWORD,:QWORD

sCLSID_IActiveDesktop   TEXTEQU <{075048700h,0EF1Fh,011D0h,{098h,088h,00h,060h,097h,0DEh,0ACh,0F9h}}>
sIID_IActiveDesktop     TEXTEQU <{0F490EB00h,01240h,011D1h,{098h,088h,00h,060h,097h,0DEh,0ACh,0F9h}}>

LPad TYPEDEF PTR IActiveDesktop
OPTION LITERALS:ON

.data
CLSID_IActiveDesktop    GUID sCLSID_IActiveDesktop
IID_IActiveDesktop      GUID sIID_IActiveDesktop

DesktopImg db "j2.bmp",0
pAD LPad 0

.data?
wpo             WALLPAPEROPT <>
buffer          db 256 dup(?)

.code

start PROC
LOCAL uEdbuffer[1024]:BYTE

invoke   CoInitialize,NULL

invoke   CoCreateInstance,ADDR CLSID_IActiveDesktop, NULL,CLSCTX_INPROC_SERVER,\
         ADDR IID_IActiveDesktop,ADDR pAD           

mov      rdx,OFFSET wpo
mov      WALLPAPEROPT.dwSize[rdx],SIZEOF(WALLPAPEROPT)
mov      WALLPAPEROPT.dwStyle[rdx],WPSTYLE_CENTER

invoke   GetFullPathName,ADDR DesktopImg,256,ADDR buffer,0
invoke MultiByteToWideChar,CP_ACP,0,ADDR buffer,-1,addr uEdbuffer,1024

_VINVOKE pAD,IActiveDesktop,SetWallpaper,ADDR uEdbuffer,0
_VINVOKE pAD,IActiveDesktop,SetWallpaperOptions,ADDR wpo,0
_VINVOKE pAD,IActiveDesktop,ApplyChanges,AD_APPLY_ALL
_VINVOKE pAD,IActiveDesktop,Release

invoke   CoUninitialize
invoke   ExitProcess,0

start ENDP

end


QuoteWPSTYLE_CENTER (0x0)

0x0. Center the wallpaper image in its original size, filling the remaining area with a solid background color if image is smaller than screen or cropping image if image is larger.

WPSTYLE_TILE (0x1)

0x1. Tile the wallpaper image, starting in the upper left corner of the screen. This uses the image in its original size.

WPSTYLE_STRETCH (0x2)

0x2. Stretch the image to cover the full screen. This can result in distortion of the image as the image's aspect ratio is not retained.

WPSTYLE_KEEPASPECT (0x3)

0x3. Introduced in Windows 7. Enlarge or shrink the image to fill the screen, retaining the aspect ratio of the original image. If necessary, the image is padded either on the top and bottom or on the right and left with the background color to fill any screen area not covered by the image.

WPSTYLE_CROPTOFIT (0x4)

0x4. Introduced in Windows 7. Enlarge or shrink the image to fill the screen, retaining the aspect ratio of the original image. If necessary, the image is cropped either on the top and bottom or on the left and right as necessary to fit the screen.

WPSTYLE_SPAN (0x5)

0x5. Introduced in Windows 8. Spans the wallpaper across multiple monitors. When this value is set, the WPSTYLE_MAX value must also be set.

WPSTYLE_MAX

The maximum legitimate value of these flags, used for validation purposes.
[edit]: attached the source code.
Say you, Say me, Say the codes together for ever.

Vortex

Hi six_L,

Thanks. It looks like that Windows 7 and above are sensitive about the full paths. XP didn't seem to care about it my tests.