CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Presse papier

dnob700
dnob700
Niveau 10
13 août 2004 à 23:49:39

Ma question est simple : comment utiliser le presse papier en C/C++ juste avec les librairie standard et/ou l´API windows, mais pas de MFC et autre bêtises incompréhensible par moi.

merci d´avance pour les réponses.

tania29
tania29
Niveau 1
14 août 2004 à 00:30:44

putain newb, aussitôt que tu sort de vb tu es pu capable de rien faire

de l´application au presse papier

hGlobal = GlobalAlloc(GHND | GMEM_SHARE, taille+1);
char * pointeur = ( char *)GlobalLock(hGlobal);
for ( int i = 0 ; i < taille ; i++)

  • pointeur++ = *string++;

GlobalUnlock(hGlobal);
OpenClipboard(hwnd);
EmptyClipboard();
SetClipboardData(CF_TEXT, hGlobal);
CloseClipboard();

pressepapier vers l´application
IsClipboardFormatAvaible(CF_TEXT);
OpenCLipboard(hwnd);
hGlobal = GetClipboardData(CF_TEXT);
string = ( char *)malloc(GlobalSize(hGlobal));
pointeur = GlobalLock(hGlobal);
GlobalUnlock(hGlobal);
CloseClipboard();

dnob700
dnob700
Niveau 10
14 août 2004 à 00:38:22

Je te remercie beaucoup de l´amabilité avec laquel tu as répondu à ma question.

MrGoTo
MrGoTo
Niveau 8
14 août 2004 à 03:12:16

Lol la garce.
Bon ben moi je m´eclipse pour deux semaines. Bye bye.
http://www.programmationworld.com/site/cours.asp?Action=cours&numero=200 Vous remarquerez que c´est le même code. Allez tania ma chérie c´est bientôt la rentrée des classes tu as preparer ton cartable ^_^.

Yoda_Software
Yoda_Software
Niveau 30
14 août 2004 à 03:41:46

Oui elle a acheté le cartable pokemon avec la trousse winnie l´ourson !

Sérieux, c´est bien complexe le C++. Tout ça pour utiliser le presse papier. c´est tellement simple en delphi ! :rire:

gollumkawder
gollumkawder
Niveau 10
14 août 2004 à 10:30:27

putain newb, aussitôt que tu sort de vb tu es pu capable de rien faire > > J´aimerais trop sortir avec une fille qui me dise ça ! :lol:
´Doit yavoir du prétendant à la sonette, hein ? qui a dit " boudin de 2 metres cubes" ? Z´etes mesquin les gars..

Kelios
Kelios
Niveau 8
14 août 2004 à 16:31:15

Bien, techniquement:

Le cliboard Win32 est horriblement complexe pour rien.

Tiré de la MSDN Octobre 2000 ( déjà snif, il se fait vieux):
Chaque paquet de données présente dans le clipboard(presse-papier) a son propre type.
Windows fourni déjà une panoplie de types prés-enregistrés, comme du texte ascii, unicode, des bitmaps, ect...

Si tu veux mettre dans le presse papier des types plus complexes qui viennent de toi, tu dois les pré-enregistrer avant et la démarche devient plus complexe.

Pour mettre des données dans le presse papier, ´faut encore passer par ces Handles lourdingues:

Tes données doivent être pointées par un Handle. Après, tu dois ouvrir le clipboard avec OpenClipboard, le vider si tu le veux avec EmptyClipboard, y mettre tes données puis le fermer avec CloseClipboard.

Pour y mettre tes données, c´est SetClipboardData(). Le deuxième paramètre est le handle vers tes données, mais le vrai truc important est le premier paramètre.

C´est en effet la classe de tes données, un chiffre le spécifiant.
Pour en obtenir un, tu dois registerer ton type avec RegisterClipboardFormat, avec comme paramètre une string étant le nom que tu donne à ce format, comme " MonFormat".
Il va te retourner cet handle.

Pour prendre des données, tu te trouve un buffer pointé par un handle, tu ouvre le buffer, tu prend tes données avec GetClipboardData et tu le ferme.

en fait GetClipboardData prend comme paramètre ce fameux chiffre identificateur de ton format. Si tu la inventé, faut que l´autre programme qui veut l´utiliser ait aussi le même identifiant. Hors, ils sont pris dynamiquement, c´est jamais un nombre fixe. Cepandant, le truc est d´utiliser la string qui identifiait ton format.
Pour cela, tu dois faire un appel à RegisterClipboardFormat avec encore le nom de la string. Mais hors, étant déjà identifié, il va se passer ce qui est spécifié ici:
"
If a registered format with the specified name already exists, a new format is not registered and the return value identifies the existing format. This enables more than one application to copy and paste data using the same registered clipboard format. Note that the format name comparison is case-insensitive.
"
Traduit en:
"
Si un format enregistré avec le nom spécifié(à comprendre, le paramètre) existe déjà, un nouveau format n´est pas engeristré et la valeur de retour identifie le format existant(donc le même que celui au premier appel). Cela permet à plus d´une application de copier-coller en utilisant le même format enregistré. Notez que la comparaison entre noms de formats ne prend pas en compte la casse.
"

Plus encore, il existe des moyens d´ " associer" une fenêtre à un clipboard. On appèle ça un Clipboard viewer, et ça fait que la fenêtre reçoit des messages au sens WM_MESSAGEQUELCONQUE
lui indiquant des infos sur le clipboard quand un autre programme y touche.
Je vois mal son utilité, mais bon, si ça intéresse quelqu´un, c´est à voir sur la MSDN.

Ah oui, à noter:
IsClipboardFormatAvailable(), contrairement à ce que son nom présume ( il présume pas grand chose en fait), vérifie, avec comme paramètre un ID de format, si ce format est présent dans le clipboard.

N.B. Voici quelques formats utilisables pré-enregistrés:
CF_BITMAP
CF_TEXT
CF_WAVE
CF_TIFF
CF_UNICODETEXT
ect.

Kelios
---------

dnob700
dnob700
Niveau 10
14 août 2004 à 16:44:02

Merci beaucoup,

en fait, je ne manipule que du texte, et j´ai réussi à lire le contenu du presse papier ( même si je ne suis pas sur qu ce soit très propre) ce qui m´a d´ailleur fait utiliser des char** pour la première fois ( et je suis très fièr ! )

Par contre, impossible d´écrire dans le presse papier.
Ma fonction plante immanquablement je crois au alentour de close clipboard mais sans avoir mis les donée dans le presse papier.

J´ai mis ma source là pour que vous puissiez regardez si qqn aurait une idée.:

http://perso.wanadoo.fr/sectionpc/clipboard.cpp

merci d´avance encore une fois.

P.S. je prend le train demain matin et je ne pourrait peut-être pas répondre d´ici une semaine.

Altonfrere
Altonfrere
Niveau 10
14 août 2004 à 17:09:15

tu as oublié de faire le GlobalAlloc avec une Size+1 ! Lorsque tu écris le 0 de fin de chaine tu écris à un emplacement non alloué . ...

dnob700
dnob700
Niveau 10
14 août 2004 à 17:28:56

Merci beaucoup, ça marche.

Chaos_Clad
Chaos_Clad
Niveau 10
14 août 2004 à 18:16:33

Euh j´ai téléchargé ta source mais j´arrive pas à compiler le programme ( il trouve 31 erreurs). Pourquoi donc ?

dnob700
dnob700
Niveau 10
14 août 2004 à 19:13:34

parce que ce n´est pas un programme complet, mais juste un morceau :
Il manque les #include et les déclarations de variables.

J´ai uploader à la même adresse le codes source complets. si ça t´interesse.

Mais tu ne pourra pas non plus le compilé comme cela, car il n´y a pas de fonction main ou winmain ou apientry ou ce que tu veux selon le type de ton programme.

Mais si tu met ce code dans un de tes fichiers source, ça marchera.

dnob700
dnob700
Niveau 10
14 août 2004 à 19:15:55

Kelios, par exemple, une utilité ( si on peut appeler ça comme ça) du clipboard viewer c´est cette p*** de fenêtre qui s´ouvre tout le temps dans office avec le contenu du presse papier, je pense. ( Sans compter le clipboard viewer intégré à windows).

Chaos_Clad
Chaos_Clad
Niveau 10
14 août 2004 à 19:19:29

Ok merci beaucoup :ok:

Chaos_Clad
Chaos_Clad
Niveau 10
14 août 2004 à 19:25:59

Nan y´a pas moyen je comprends pas comment ça marche -_-

gollumkawder
gollumkawder
Niveau 10
14 août 2004 à 22:27:13

arf bon, dis clairement c´est quoi ton probleme et détaille le code

dnob700
dnob700
Niveau 10
14 août 2004 à 22:38:46

le code je suppose que c´est celui que je lui ais passé.

Mais Chaos, tu ne peut pas l´utiliser comme ça.

Il faut que tu cré un nouveau programme ( console ou non, comme tu veux).
Et tu copie le contenu du fichier clipboard.cpp dans ton programme. Tu ne le mets pas dans ton projet, sinon, il faut que tu cré un fichier . h pour aller avec.

Et après, tu peut te servir des 3 fonctions qu´il définit : GetClipboardText
SetClipboardText et ClearClipboard

DasHuhn
DasHuhn
Niveau 10
17 août 2004 à 18:12:24

Avant de programme en C++ faudrait déjà savoir ce que c´est qu´un programme...

Chaos_Clad
Chaos_Clad
Niveau 10
17 août 2004 à 19:03:34

Ok dnob, je ne l´avais pas compris comme ça, merci ; )

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment