Sauver le contenu du presse papier puis le remettre

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Sauver le contenu du presse papier puis le remettre

Message par Le Soldat Inconnu »

Salut,

un petit coup de main, siouplait :wink:

je souhaite faire ceci :
- sauvegarder le contenu du presse papier
- vider le presse papier
- faire une opération qui nécessite l'utilisation du presse papier (un copier coller ou couper coller mais qui doit être invisible pour l'utilisateur donc j'ai besion de ne pas perdre les infos que l'utilisateur a mis dans le presse papier)
- remettre le contenu original du presse papier

Pour le moment, j'ai fait ceci mais je ne vois pas du tout comment sauver les data contenu dans le presse papier.

Code : Tout sélectionner

If OpenClipboard_(0)
  NbFormat = CountClipboardFormats_()
  Debug "Nombre de format contenu dans le presse papier : " + Str(NbFormat)
  Format = 0
  For n = 1 To NbFormat
    Debug Str(n) + "\"
    Format = EnumClipboardFormats_(Format)
    Nom_Format.s = Space(255)
    GetClipboardFormatName_(Format, @Nom_Format, 255)
    Debug "     Format = " +  Str(Format) + " (" + Nom_Format + ")"
    ClipBoardData = GetClipBoardData_(Format)
    Debug "     Data handle = " + Str(ClipBoardData)
    
  Next

  CloseClipBoard_()
Else
  Debug "Erreur"
EndIf
Je verrai après pour les remettre dedans.
merci.

merci.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour

As tu essayé de passer par un bloc mémoire, c'est un trés bon buffer à mon avis ! 8)
Denis

Bonne Jounée à tous
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

certe mais comment je récupère la taille de ma data stocké dans le presse papier ?
c'est ça le hic
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Quel type de clipboard risque d'être dans ton presse papier ?
Denis

Bonne Jounée à tous
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Est-ce que tu essayes d'échanger des données entre Processus!
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Bon, j'explique le pourquoi de la chose

c'est pour mon programme bi-exploreur qui permet d'agencer 2 explorateur win l'un en dessous de l'autre et d'ajouter une barre d'outils à droite

je me sert du presse papier pour permettre d'afficher le dossier afficher dans l'explorateur 1 dans l'explorateur 2

pour cela, je procède en envoyant les infos clavier suivantes :
sur l'explorateur 1
- Alt + D pour aller dans la barre d'adresse
- Ctrl + C pour copier l'adresse
puis je passe sur l'explorateur 2 et je fais
- Atl + D
- Ctrl + V
- Enter

j'ai donc les 2 explorateur qui affiche le même dossier après cette manip
je vais également utilsé ce principe pour ouvrir des dossiers prédéfinis

le problème est que j'ai forcément perdu le contenu du presse papier en faisant ce type d'opération or si l'utilisateur (donc moi ;) ) ouvre un dossier par cette méthode, c'est pour copier qlq chose dedans le plus souvent. donc pas pratique car j'ai perdu ce que je voulais copier.

c'est pour cela que j'aimerais bien pouvoir sauver ce fichu presse papier et le remettre en place une fois l'opération finie
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Bon, je vois que j'ai encore posé une colle visiblement :mrgreen:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Peux tu donner ton code, on trouvera peut être une autre astuc que le copier coller !
Denis

Bonne Jounée à tous
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Voilà le code :
http://perso.wanadoo.fr/lesoldatinconnu ... loreur.zip
(fichier zip de 108 ko)

je me sert du copier coller aux lignes suivantes :
- 1146
- 1157
- 1168
- 1181

il sagit du code situé derrière le Case indiqué par les lignes ci-dessus.

c'est ceci si tu te perds dans mon code :

Code : Tout sélectionner

Case #Menu_Operation_1vers2 ; Copier l'explorateur 1 vers l'explorateur 2
        ClearClipboard()
        SetForeGroundWindow(WindowE1)
        Clavier(#PB_ShortCut_D, 2)
        Clavier(#PB_ShortCut_C, 1)
        ; AttenteCopier()
        SetForeGroundWindow(WindowE2)
        Clavier(#PB_ShortCut_D, 2)
        Clavier(#PB_ShortCut_V, 1)
        Clavier(#PB_ShortCut_Return, 0)
Explication des variables :
- WindowE1 : handle de l'explorateur du haut
- WindowE2 : handle de l'explorateur du bas

explication des fonctions :
- SetForeGround : mettre la fen au premier plan
- Clavier : envoyer une touche clavier
Clavier(Touche, ToucheSpecial)
Touche = numéro de la touche
ToucheSpecial = 1 pour Ctrl et = 2 pour Alt

voilà, si tu trouves un autre moyen, je m'incline respectueusement devant toi. (à mon avis, je prend pas trop de risques :wink: , quoi que, ne jamais sous estimer un codeur PureBasic)

Ah oui, mon code ne marche pas avec la version 3.89 beta, et je sais pas pourquoi. d'après Oliv, ça plante au niveau de la création du PopupMenu dans la procedure Fenêtre
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je viens de trouver ça sur le Net:
Pour encore mieux utiliser le soft du Soldat! :)

Code : Tout sélectionner

Explorateur Windows : 

  Maj + Fléche haut étend la sélection des dossiers/fichiers vers le haut 
  Maj + Flèche bas étend la sélection des dossiers/fichiers ves le bas 
  Maj + Flèches droite ou gauche permet de déplacer l’ascenseur horizontal 
  Alt + double clic sur l’objet sélectionné affiche ses Propriétés 
  Alt + lettre soulignée d’un menu sélectionne le menu 
  Alt + Espace = affiche Menu sytème 
  Ctrl + z = annule la dernière action (rattrape une bourde :-)) 
  Ctrl + a = sélection de tout les éléments d’un volet 
  "*"du pavé numérique = ouvre tous les sous dossiers d’un dossier sélectionné 
  "+" ou Flèche droite du pavé numérique ouvre les sous dossiers du niveau suivant 
  "-" ou Flèche gauche du pavé numérique annule l’ouverture des sous dossiers 
  F4 = ouvre la liste des dossiers 
  F6 = active la colonne suivante 
  F10 = active la barre des menus 
  Retour arrière = ouvre le dossier de niveau supérieur 
  Touche Début sélectionne premier fichier 
  Touche Fin sélectionne dernier fichier 
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

voilà, si tu trouves un autre moyen, je m'incline respectueusement devant toi. (à mon avis, je prend pas trop de risques , quoi que, ne jamais sous estimer un codeur PureBasic)
Tu fais un sendmessage:

Code : Tout sélectionner

SendMessage_(HwndEdit, #WM_SETTEXT, 0, "Poste de travail")
Alors tu t'inclines maintenant! 8)
Invité

Message par Invité »

question idiote
pourquoi tu utilise pas un fichier perso pour faire tes sauvegardes
et relecture au lieu d'utiliser le presse papier ??
comme ça t'y touche pas au press papier !

:?

en fait il faudrai savoir ou windows ecrit les donnees du presspapier !!
quand tu sait ça tu fait une copie du fameux "dossier ou fichier" qui sert
au presspapier avant d'ecrire dedans !
le tous c'est de savoir ou windows stocke le press papier !!

je cherche ...

c'est tout ce que j'ai trouver d'interressant sur le sujet

http://www.programmationworld.com/site/ ... Numero=200

Mais bon si nico a trouvé !! :D
Dernière modification par Invité le jeu. 01/avr./2004 22:11, modifié 2 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Dobro,

Tout le problème est de pouvoir coller dans l'edit de l'explorer le chemin que tu souhaites qu'il affiche où trouver une autre solution.
Actuellement, il passe par le presse-papier pour le faire.

Maintenant, y a plus de pb avec ma soluce! eh..eh...eh
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

je suis d'accord sur ton idée vu que j'ai essayé,nico , mais je n'arrive pas à obtenir la handle de la zone "edit" de l'explorateur. j'ai essayé de chopé d'abord directement, puis en chopant le handle eds parents mais rien à faire, j'ai pas réussi.
alors si tu me trouves ça aussi, ce serai super. :D
mais pour le moment, ta soluce est un problème également
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Effectivement, le message n'était pas compliqué à trouver!
Après avoir tout essayé, j'ai mis la main sur la fonction qui allait bien.
Au final, ça reste simple!, toujours une fois fini bien sûr, c'est navrant!
Dans cet exemple, je n'utilise pas de raccourci clavier pour valider la saisi, c'est encore mieux je pense.

Voilà, un exemple concret avec la vérification du String envoyé à l'Edit.
T'es content, maintenant. :lol:

Code : Tout sélectionner

Global HandleEdit

Procedure EnumChildProc(hWnd.l,lParam.s)
  Tampon.s=Space(50)
  GetClassName_(hWnd, @Tampon, 50)
  Debug "hwnd="+Str(hWnd)+"   "+"ClassName="+Tampon
  If Tampon="Edit"
    Tampon1.s=Space(20)
    SendMessage_(hWnd,#WM_GETTEXT,20,Tampon1)
    ;On vérifie que le contenu de l'edit correspond à chemin(lparam)
    If lParam=Tampon1
      HandleEdit=hWnd
    EndIf
  EndIf
  ProcedureReturn #True
EndProcedure

Chemin.s="C:\"
WindowExploreur = RunProgram("explorer.exe", "/n,/e,"+Chemin+Chr(34), "")
Delay(1000)
FenetreActive.l=GetForegroundWindow_()
EnumChildWindows_(FenetreActive, @EnumChildProc(),Chemin)

Chemin1.s="Poste de travail"
SendMessage_(HandleEdit,#WM_SETTEXT,0,Chemin1)
SendMessage_(HandleEdit,#WM_KEYDOWN,#VK_RETURN,0)
Delay(1000)
Tampon.s=Space(50)
SendMessage_(HandleEdit,#WM_GETTEXT,50,Tampon)
Debug FenetreActive
If Chemin1=Tampon
  MessageRequester("Info","L'Edit a bien reçu Le chemin spécifié!")
EndIf
End
Répondre