Application MultiBureaux

Programmation d'applications complexes
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Application MultiBureaux

Message par graph100 »

nico a écrit :ça marche chez moi, mais n'oublie pas de mettre des interger dans tes procedures de thread sinon on ne peut pas compiler en 64 bits
Tu veux dire des integers dans les paramètres seulement ? pour tout ce qui est adresses ?

Code : Tout sélectionner

Procedure ThreadRaccourcisClavier(*adresse.i)
Ok, c'est noté ;)
nico a écrit :Remarque:je perd aéro dans la création des nouveaux bureaux
Tiens, bizarre ça.
[edit] à bah si, ça le fait chez moi aussi... Je n'avais pas remarqué -_-
Je me demande si ça va être solvable ça, c'est peut être la structure même d'aéro qui n'est pas faites pour fonctionner sur plusieurs explorer.exe ... à fouiller :?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Application MultiBureaux

Message par bombseb »

Alors ca avance ?
:mrgreen:
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Application MultiBureaux

Message par graph100 »

arf ! Je me suis perdu en retrouvant mon ordi ^^ et j'ai donc consacré mon temps à rendre distribuable mon applis pour lire les scans ;:)

Et ensuite j'ai commencé le projet CustomGadget qui va me permettre de faire une nouvelle version de mon applis pour les scans XD
En fait j'ai bloqué à un moment sur ce projet, et je ne vois pas trop comment continuer.
Le programme n'est pas très stable, il y a trop de thread et je ne comprend pas toutes les erreurs. Je ne sais pas quelle direction prendre.
- doit-je arreter de faire des bureau réellement séparés comme mes derniers codes ?
- dois-je partir dans une direction ou je change juste le dossier du répertoire courant et la position des icones sur le bureau ??

Je ne sais pas trop ;s voila voila ;)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Application MultiBureaux

Message par bombseb »

faudrais voir dans d'autres appli de multidesktop comment ils font....
marsu
Messages : 7
Inscription : ven. 16/mai/2008 7:18

Re: Application MultiBureaux

Message par marsu »

Bonjour à tous, j'ai moi-même développer un utilitaire appeler MultiBureaux en Purebasic. il permet de créer des bureaux, de switcher par raccourci clavier.
Il intègre une gestion de positionnement de fenêtre également par raccourci, une capture d"écran multi-moniteur, multi-bureau, un blocage de mise en veille ainsi qu'un système de verrouillage par mot de passe.

Pour info, le changement de fenêtre d'un bureau à un autre est impossible.
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Application MultiBureaux

Message par bombseb »

Salut Marsu, où peux t-on télécharger ton application ?
(et les sources ?)
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: Application MultiBureaux

Message par Anonyme 2 »

j'ai moi-même développer un utilitaire appeler MultiBureaux en Purebasic
Salut Marsu, où peux t-on télécharger ton application ?
(et les sources ?)
Salut Marsu, où peux t-on télécharger ton application ?
(et les sources ?)
+1 :|
Je ne sais pas quelle direction prendre
Si tu continue ce projet, je suis impatient de voir ce que ca donne.. ca risque d'être interessant :mrgreen:
marsu
Messages : 7
Inscription : ven. 16/mai/2008 7:18

Re: Application MultiBureaux

Message par marsu »

Si tu veux savoir sur quel bureau se trouve un thread, tu peux utuiliser GetThreadDesktop_
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: Application MultiBureaux

Message par david »

La création du 'bureau_de_test' fonctionne parfaitement sous windows XP Pro
Je souhaitais modifier l'image d'arrière plan, mais uniquement pour le 'bureau_de_test'

J'avais trouvé dans le forum:

Code : Tout sélectionner

Procedure SetWallpaper(FileName.s, Style.s)
    ; style = 0 : centrer 
    ; style = 2 : étirer 
    RegOpenKeyEx_ ( #HKEY_CURRENT_USER , "Control Panel\Desktop\" , #Null , #KEY_ALL_ACCESS , @hKey)
    RegSetValueEx_ (hKey, "WallpaperStyle" , #Null , #REG_SZ , @Style, Len (Style) + 1 )
  Style = "0" 
    RegSetValueEx_ (hKey, "TileWallpaper" , #Null , #REG_SZ , @Style, Len (Style) + 1 )
    SystemParametersInfo_ ( #SPI_SETDESKWALLPAPER , 0, FileName, #SPIF_UPDATEINIFILE | #SPIF_SENDWININICHANGE )
  EndProcedure 

SetWallpaper("c:\images\mon-image.bmp", "2" )
Mais je n'arrive pas à l'adapter: il change le fond d'écran dans le 'bureau_de_test' mais cela à affecté également le bureau 'desktop_default'
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: Application MultiBureaux

Message par david »

j'ai modifié le programme en rajoutant l'appel a chaque exécution d'un fichier qui est renommé entre AFF.INI et OFF.INI en fonction que l'on soit sur le bureau-de-test ou le bureau 'par defaut'
j'ai fait un raccourci de l'executable dans ma barre des taches à cote de l'icone bureau comme ça il est toujours bien accessible...

A chaque fois que je clic dessus il me permute d'un bureau a l'autre
Chacun a ses icones de programme ouverts dans la barre des taches, chacun a ses icones de raccourcis sur le bureau (en l'occurence les memes pour l'instant mais chaque bureau les conserve à l'emplacement ou ils sont)

Par contre je paierais cher pour pouvoir mettre sur le bureau-de-test une image d'arriere plan de mon choix et de pourvoir revenir sur le bureau 'par defaut' avec ses paramètres inchangés. J'avais suivi un post dans Débutant/changer l'image de fond du bureau.. mais je dois le faire sur le PC Windows XP pro d'une collègue qui est verouillé ((le PC!)) et qui empeche toute modification de l'arriere plan (quelles que soient les méthodes et astuces).
Je me dis que si je crée ce deuxieme bureau copie conforme (ça a l'air de fonctionner) il me suffirait d'en faire le 'bureau principal' si cette satanée image de #@h! de fond pouvait etre modifié
SVP HELP !!!

Code : Tout sélectionner

cheminapp$=GetCurrentDirectory()

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)





;****************************************************************************
;*********************AFF***************************************
;****************************************************************************
mettre_aff:

Resultat = RenameFile(cheminapp$+"off.ini", cheminapp$+"aff.ini") ; dit aff
If resultat = 0
  Gosub mettre_off

EndIf 
Goto va_copie
End






va_copie:
SwitchDesktop_(desktop_hd)
End


va_original:
desktop_default = OpenDesktop_("Default", 0, #True, #GENERIC_ALL)
; on retourne sur le bureau par défaut
SwitchDesktop_(desktop_default)
End

;;****************************************************************************
;*********************OFF***************************************
;****************************************************************************
mettre_off:
Resultat = RenameFile(cheminapp$+"aff.ini", cheminapp$+"off.ini") ;dit masque/ferme
If resultat = 0
;Gosub mettre_aff  
EndIf 
Goto va_original
Return
 


;######################################################################################################
;######################################################################################################

;--------------------------------------
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
;--------------------------------------
Répondre