Page 1 sur 2
Sauver le contenu du presse papier puis le remettre
Publié : sam. 27/mars/2004 13:47
par Le Soldat Inconnu
Salut,
un petit coup de main, siouplait
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.
Publié : sam. 27/mars/2004 14:58
par brossden
Bonjour
As tu essayé de passer par un bloc mémoire, c'est un trés bon buffer à mon avis !

Publié : sam. 27/mars/2004 15:09
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
Publié : sam. 27/mars/2004 15:22
par brossden
Quel type de clipboard risque d'être dans ton presse papier ?
Publié : sam. 27/mars/2004 18:02
par nico
Est-ce que tu essayes d'échanger des données entre Processus!
Publié : sam. 27/mars/2004 18:55
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
Publié : mar. 30/mars/2004 9:31
par Le Soldat Inconnu
Bon, je vois que j'ai encore posé une colle visiblement

Publié : mer. 31/mars/2004 12:25
par brossden
Peux tu donner ton code, on trouvera peut être une autre astuc que le copier coller !
Publié : jeu. 01/avr./2004 12:21
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

, 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
Publié : jeu. 01/avr./2004 17:08
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
Publié : jeu. 01/avr./2004 20:19
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:
Alors tu t'inclines maintenant!

Publié : jeu. 01/avr./2004 21:41
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é !!

Publié : jeu. 01/avr./2004 21:49
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
Publié : ven. 02/avr./2004 8:20
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.

mais pour le moment, ta soluce est un problème également
Publié : ven. 02/avr./2004 11:20
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.
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