[C++] comment faire une copie d'ecran en C++ sous visual

comment faire une copie d'ecran en C++ sous visual [C++] - C++ - Programmation

Marsh Posté le 10-10-2002 à 11:20:28    

La question est dans le titre.
 
je fais une appli en C++/MFC, et je voudrai sur la barred 'outil un bouton qui fasse une capture d'écran (dans un fichier .bmp).
Alors si vous avez des exemples de code qui font ce genre de chose ou même des idées, je suis preneur !

Reply

Marsh Posté le 10-10-2002 à 11:20:28   

Reply

Marsh Posté le 10-10-2002 à 12:19:00    

je sais pas, mais ne saurais trop te conseilelr d'aller faire un tour sur google et surtout sur msdn

Reply

Marsh Posté le 10-10-2002 à 13:24:34    

farib a écrit a écrit :

je sais pas, mais ne saurais trop te conseilelr d'aller faire un tour sur google et surtout sur msdn




 
c'est déjà fait !
Mais sur msdn c'est difficile de trouver une info si on connait pas déjà un nom de fonction...
et sur google y'a pas une solution qui n'utilise pas DirectX et je ne veux pas inclure directx dans mon projet juste pour faire une copie d'écran...

Reply

Marsh Posté le 10-10-2002 à 13:37:40    

Y a eu topic y a qq mois (mai 2002). On avait donné du code C (pas ++, mais ça doit aller aussi :D).
Le but était juste de mettre ds presse-papiers le contenu d'écran en mode bitmap.
 
Cf si y a d'autres exemples.
 
http://forum.hardware.fr/forum2.ph [...] h=&subcat=  
mais pas de réponse du demandeur => on sait pas s'il a été satisfait ou non ....
 
J'ai qq part perdu sur disque dur at-home un exemple 16 bits (krosoft je crois, de CD feu_DPTOOL) qui permet de copier écran, feuille ou zone écran (avec souris) et exporter en BMP, CLP ou ? GIF.

Reply

Marsh Posté le 10-10-2002 à 17:44:47    

merci je vais essayer et je te tiens au courant ;-)
 
A+

Reply

Marsh Posté le 10-10-2002 à 20:23:15    

Code :
  1. // pour l'écran entier
  2. keybd_event(VK_SNAPSHOT, 0, 0 ,0);
  3. keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP,0);
  4. // pour la fenetre active
  5. keybd_event(VK_SNAPSHOT, 1, 0 ,0);
  6. keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP,0);


 
la copie se retrouve alors dans le presse-papiers


Message édité par taureau le 10-10-2002 à 20:24:06
Reply

Marsh Posté le 11-10-2002 à 09:44:54    

Taureau a écrit a écrit :

Code :
  1. // pour l'écran entier
  2. keybd_event(VK_SNAPSHOT, 0, 0 ,0);
  3. keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP,0);
  4. // pour la fenetre active
  5. keybd_event(VK_SNAPSHOT, 1, 0 ,0);
  6. keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP,0);


 
la copie se retrouve alors dans le presse-papiers




 
merci !  :hello:

Reply

Marsh Posté le 11-10-2002 à 11:21:59    

voilà ma fonction de capture d'écran :
 
void CapMainFrame::CaptureApp()  
{  
  HBITMAP BmpHandler;
   
  keybd_event(VK_SNAPSHOT, 1, 0 ,0);  
  keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP,0);
  BmpHandler = (HBITMAP)GetClipboardData(CF_BITMAP);
}
 
 
Qu'est-ce qu'il faut rajouter pour écrire le résultat dans un fichire .bmp ?
 
merci d'avance !
 :hello:


Message édité par filou66 le 11-10-2002 à 11:22:27
Reply

Marsh Posté le 11-10-2002 à 11:46:33    

commence par regarder dans l'aide sur les mfc si par hasard tu n'as pas une fonction qui ne fasse pas le travail (je suis sur que ça doit exister quand meme  :D)
 
sinon va voir là http://www.experts-exchange.com/Pr [...] 21533.html

Reply

Marsh Posté le 11-10-2002 à 13:03:17    

Va falloir finalement que j'investisse un jour le temps nécessaire pour me mettre au C++, ça simplifie beaucoup la vie :love: !!! Les vieilles cellules grises sont paresseuses. :(  
 
L'exemple (WINCAP) que je disais avoir utilisé est bien le http://support.microsoft.com/defau [...] US;q97193& du lien indiqué par taureau. DIB->BMP. Ai fait un captureur de feuille courante ->> Xport BMP avec ss Win 3.11 : compact et efficace.

Reply

Marsh Posté le 11-10-2002 à 13:03:17   

Reply

Marsh Posté le 11-10-2002 à 13:25:10    

Je suis perso absolument pas pour cette solution.
C'est du bisouillage.
D'abord ca risque de merdouiller un jour (si entre le moment ou le screenshot a ete pris et le moment ou tu le recuperes du presse papier autre chose est fouttu dans le presse papier) et surtout si le mec a mis quelque chose dans le presse papier tu lui ecrase.
Pour moi, c'est du bidouillage.
 
Ce code a ete malheuresement mainte fois utilise, en particulier en VB, comme plein d'autres soit disant super algos qui sont de la programmation cradingue (vbfrance est pas mal pour ce genre de code).
 
Voici le code MFc pour enregistrer une fenetre donnee dans un fichier BMP donné :http://www.codeguru.com/bitmap/window_to_file.shtml
 
Ce code est selon moi la bonne marche a suivre :
creer un bitmap a partir du DC de la fenetre
 
Reste a fournir a cette fonction le handle sur la fenetre racine (desktop window)
Pour se faire, la fonction GetDesktopWindow devrait t'aider.
 
Par contre je ne connais pas MFC et je ne peux pas te dire comment convertir ce handle en CWnd ...
 
 


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-10-2002 à 17:17:39    

HelloWorld a écrit a écrit :

Je suis perso absolument pas pour cette solution.
C'est du bisouillage.
D'abord ca risque de merdouiller un jour (si entre le moment ou le screenshot a ete pris et le moment ou tu le recuperes du presse papier autre chose est fouttu dans le presse papier) et surtout si le mec a mis quelque chose dans le presse papier tu lui ecrase.
Pour moi, c'est du bidouillage.
 
Ce code a ete malheuresement mainte fois utilise, en particulier en VB, comme plein d'autres soit disant super algos qui sont de la programmation cradingue (vbfrance est pas mal pour ce genre de code).
 
Voici le code MFc pour enregistrer une fenetre donnee dans un fichier BMP donné :http://www.codeguru.com/bitmap/window_to_file.shtml
 
Ce code est selon moi la bonne marche a suivre :
creer un bitmap a partir du DC de la fenetre
 
Reste a fournir a cette fonction le handle sur la fenetre racine (desktop window)
Pour se faire, la fonction GetDesktopWindow devrait t'aider.
 
Par contre je ne connais pas MFC et je ne peux pas te dire comment convertir ce handle en CWnd ...




 
oui c du bidouillage c juste l'équivalent de la pression sur la touche Impr écran et franchement y a vraiment peut de chance (aucune ?) pour que tu te retrouves avec autre chose dans le presse-papier que la capture que du vient de faire  :D  
 
et tu peux aussi tester avant si le presse-papiers contient une image pour la sauvegarder puis la remettre après si tu veux faire propre  :D  
 
ceci dit oui bien sur c plus mieux de passer par la méthode que tu indiques...sauf qu'avec cette bidouille la copie est automatiquement dans le presse-papiers ce qui peut aussi etre un plus pour l'utilisateur...
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed