Dans la partie du forum 'application' j'ai trouvé un morceau de code qui permet de créer un deuxième bureau avec les icones du bureau par défaut. Ca me semble etre une piste serieuse par rapport au fait que mon Windows XP Pro sans droits ADMIN ne veut jamais modifier l'image en arriere plan (et oui, j'en suis toujours là).
Cependant je n'arrive pas à modifier l'image avec le code ci-dessous qui est quand même très complexe...
Code : Tout sélectionner
Declare .s FormatMessage(erreur.l)
Declare .l OpenDesktop(nom.s, *desktophd.Long)
Declare CreateProcess(application.s, desktop_name.s, *lpProcessInformation.PROCESS_INFORMATION)
nom_du_bureau.s = "bureau_de_test"
res = OpenDesktop(nom_du_bureau, @desktop_hd)
If res = 0 :MessageRequester("INFO","Erreur lors de la création du bureau : " + nom_du_bureau):End:EndIf
If res = 1: MessageRequester("INFO","Création du bureau : " + nom_du_bureau)
; on lance explorer dans le nouveau bureau, mais juste la 1ère fois
CreateProcess("C:\Windows\explorer.exe", "bureau_de_test", @information_process.PROCESS_INFORMATION)
Else
;MessageRequester("INFO","Ouverture du bureau : " + nom_du_bureau)
EndIf
;CreateProcess("C:\Windows\System32\calc.exe", "bureau_de_test", @information_process.PROCESS_INFORMATION)
;--------------------------------------
Procedure.s FormatMessage(erreur.l)
lpbuffer.s = Space(255)
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError_(), 0, @lpbuffer, 255, 0)
ProcedureReturn lpbuffer
EndProcedure
;--------------------------------------
;--------------------------------------
Procedure.l CreateDesktop(nom.s)
Define.SECURITY_ATTRIBUTES lpsa
lpsa\nLength = SizeOf(SECURITY_ATTRIBUTES)
lpsa\lpSecurityDescriptor = 0
lpsa\bInheritHandle = #True
desktop_hd.l = CreateDesktop_(nom, #NULL$, #Null, 0, #GENERIC_ALL, @lpsa)
ProcedureReturn desktop_hd
EndProcedure
Procedure.l OpenDesktop(nom.s, *desktophd.Long) ; ouvre un bureau existant, ou le créer si il n'existait pas
*desktophd\l = OpenDesktop_(nom, 0, #True, #GENERIC_ALL)
res = 2 ; le bureau spécifié existe déjà
If *desktophd\l = 0
; Debug "Le bureau : " + nom + " n'existe pas. On va le recréer."
*desktophd\l = CreateDesktop(nom)
If *desktophd\l = 0
; Debug "Création du bureau : " + FormatMessage(GetLastError_())
ProcedureReturn 0 ; on retourne une erreur
EndIf
res = 1 ; on crée le bureau, car il n'existait pas
EndIf
ProcedureReturn res
EndProcedure
;--------------------------------------
;--------------------------------------
Procedure CreateProcess(application.s, desktop_name.s, *lpProcessInformation.PROCESS_INFORMATION)
Define.SECURITY_ATTRIBUTES lpProcessAttributes
With lpProcessAttributes
\nLength = SizeOf(SECURITY_ATTRIBUTES)
\lpSecurityDescriptor = 0
\bInheritHandle = #True
EndWith
Define.STARTUPINFO lpStartupInfo
With lpStartupInfo
\cb = SizeOf(STARTUPINFO)
\lpDesktop = @desktop_name
EndWith
res = CreateProcess_(#Null, #DQUOTE$ + application + #DQUOTE$, lpProcessAttributes, #Null, #True, #NORMAL_PRIORITY_CLASS, #Null, GetPathPart(application), lpStartupInfo, *lpProcessInformation)
If res = 0
Debug "Failed"
Debug "CreateProcess : " + FormatMessage(GetLastError_())
Else
; Debug "Created"
EndIf
ProcedureReturn res
EndProcedure
;--------------------------------------
avec comme commande pour aller sur le nouveau bureau:
et ça pour retourner sur le bureau par défaut
Code : Tout sélectionner
desktop_default = OpenDesktop_("Default", 0, #True, #GENERIC_ALL)
; on retourne sur le bureau par défaut
SwitchDesktop_(desktop_default)
par contre pour ce qui est de modifier l'arriere plan....
je me disais qu'on peut peut-etre laisser l'image originale avec le bureau par défaut
mais profiter de la création d'un bureau2 pour lui affecter une autre image (??)