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

récupérer une image bmp du presse papier

caelacanthe
caelacanthe
Niveau 10
04 janvier 2008 à 20:29:32

:salut:

j´utilise windows.h pour faire des programmes amusants, et là, je suis sur un programme qui me permettrait de prendre des captures d´écran en rafale :content:

mais j´aimerais savoir: comment faire pour récupérer des images en .bmp dans le presse papier :question:

l´enregistrement, la sauvegarde en fichier ne sont pas un problème, mais c´est juste la récupération du contenu du presse papier le souci :peur:

il y a des tutoriaux sur internet, mais ils ne sont vraiment pas simple :peur:

dnob700
dnob700
Niveau 10
04 janvier 2008 à 23:30:12

Ce n´est pas bien compliqué.

1) Tu commence par "ouvrir" le presse papier :
OpenClipboard(NULL);
Tu peut aussi donner le hWnd de ta fenêtre à la place de NULL, si tu en a une.

2) Tu récupère ton bitmap :
HBITMAP hb = GetClipboardData(CF_BITMAP);

3) tu copie ton bitmap sur le disque, tu dit que tu peut le faire. Sinon, si tu as besoin d´aide, je dois avoir quelque part des fonctions pour le faire.

4) Enfin, tu ferme le presse papier :
CloseClipboard();

Il faut noter que le handle sur ton bitmap devient invalide à partir du moment où tu ferme le presse papier.

Par contre, en cherchant sur la MSDN, tu aurais pu avoir ces informations tout seul sans problème :
http://msdn2.microsoft.com/en-us/library/ms674551(VS.85).aspx

caelacanthe
caelacanthe
Niveau 10
05 janvier 2008 à 00:43:11

a vrai dire, je saurais écrire le contenu d´un tableau sur le disque dur, mais je ne connais pas les objets HBITMAP :desole:

en tout cas merci de m´avoir aidé :ok:

dnob700
dnob700
Niveau 10
05 janvier 2008 à 19:11:19

un bitmap c´est un peu plus qu´un tableau à copier sur le disque dur : il y a un en-tête puis possiblement une table de couleur puis les données.

Bref, tout ça pour dire que j´ai adapté le code que j´avais pour copier des bitmaps (qui est lui même tiré globalement de la MSDN) et que le résultat est là :
http://wall.sectionpc.info/C/printScreen.cpp

Mais considère que c´est ton cadeau de noël, je ne ferais pas ça tout les jours ...

godrik
godrik
Niveau 30
05 janvier 2008 à 19:30:50

[HS] on a trouvé le père noel, c´est dnob700 :noel:

caelacanthe
caelacanthe
Niveau 10
05 janvier 2008 à 21:47:04

ouah, balèze le code source :ouch:

:merci:

dès que j´ai fait mon programme, je le mets ici :ok:

caelacanthe
caelacanthe
Niveau 10
07 janvier 2008 à 12:48:48

au secours, j´ai des erreurs bizarres :peur:

pour la fonction PBITMAPINFO, ils me mettent (sous devcpp 4.9.9.2):
[Linker error] undefined reference to `GetObjectA@12´

quelqu´un a déja vu cette erreur? :peur:

dnob700
dnob700
Niveau 10
07 janvier 2008 à 18:49:42

sous Dev C++ il faut lier manuellement (c´est-à-dire qu´il faut rajouter toi même dans les options du programme) les bibliothèques non standard que tu utilise.

Là tu as certainement besoin de lier à un truc du genre libuser32.a et libgdi32.a (mais je ne garantie pas les noms).

Mais si tu ne sais pas ce qu´est une erreur de lien (tu n´a manifestement pas reconnu le message d´erreur) tu devrais peut-être faire un peu plus de programmation avant de te lancer dans la programmation Windows. Est-ce que tu as lu le code source que je t´ai passé ? est-ce que tu l´a compris ?

P.S. PBITMAPINFO n´est pas une fonction, mais un type de donnée.

caelacanthe
caelacanthe
Niveau 10
07 janvier 2008 à 20:26:30

d´accord, je l´avoue, j´arrive à la limite de mes compétences :peur:

j´ai téléchargé user32.dll et gdi32.dll, je sais rajouter des options dans devcpp, mais il faut mettre les dll dans system32? sinon, on les appelle bien avec les options -lgdi32 -luser32 ?

dnob700
dnob700
Niveau 10
07 janvier 2008 à 20:38:24

les dll sont déjà dans ton système, tu n´a pas besoin de les télécharger. Ce dont tu as besoin c´est les bibliothèque d´import. Elles sont fournit par ton compilateur et se trouvent dans le sous dossier "lib" de Dev C++. Les options que tu donne sont effectivement les bonnes, mais, sauf à modifier directement le makefile créé par dev c++, elles ne sont pas utile. Il y a une boite de dialogue dans les options de ton projet dans dev c++ où tu peut mettre la liste des bibliothèques dont tu as besoin. C´est là que tu sélectionne (dans le dossier lib du compilo) les bibliothèque libgdi32.a et libuser32.a si elles ont ce nom.

caelacanthe
caelacanthe
Niveau 10
07 janvier 2008 à 21:31:50

oh purée! j´ai réussi, CA MARCHE :ouch2:

merci :snif:

allez, je termine mon programme et je le poste ici :noel:

caelacanthe
caelacanthe
Niveau 10
08 janvier 2008 à 19:29:53

chose promise, chose due :coeur:

voici mon programme pour prendre des captures d´écran rapidement!

http://rafb.net/p/rQYDU685.html

a compiler avec les bibliothèques libgdi32.a et libuser32.a dans un projet devcpp, et a lancer dans le terminal avec le chemin complet du dossier ou stocker les images en argument (genre "c:\images\"), ca ne marche pas encore sans :noel:

vous pouvez exploser la touche impr écran, il peut prendre 26 captures d´écran par seconde, elles sont classées par ordre chronologique :oui:

je tiens à remercier dnob007 pour son soutien et son aide précieuse :coeur:

dnob700
dnob700
Niveau 10
08 janvier 2008 à 23:05:31

c´est pas mal (j´ai pas testé, là je ne suis pas sous windows).

Il y a un autre moyen de faire ça. Plutôt que de lire en boucle l´état de Imprime Écran, tu pourrait enregistrer ton application comme un "clipboard viewer". C´est compliqué car il faut créé une fenêtre puis lire des message et les traiter correctement, mais ça permet que ton appli ne consomme pas de ressource inutilement et enregistre toutes les images qui passe par le presse papier.

Bon, si tu n´a jamais créé de fenêtre c´est peut-être dur (c´est pour un truc de ce genre que j´ai créé ma première fenêtre win32, qui peut rester caché tout du long bien sûr), mais tu peut chercher.

Si ça t´intéresse, je peut t´aider, mais bien sûr, pour que ce soit utile, je ne te le ferait pas cette fois-ci ...

caelacanthe
caelacanthe
Niveau 10
09 janvier 2008 à 05:48:05

humm... je crois que je vais m´en tenir là et passer a autre chose :gni:

en tout cas, merci beaucoup :merci:

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