IMPRIM ECRAN -> FICHIER BMP

Lordvb Messages postés 57 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 3 décembre 2004 - 7 juin 2003 à 15:00
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 - 6 mai 2004 à 21:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/7325-imprim-ecran-gt-fichier-bmp

cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
6 mai 2004 à 21:27
Ah oui, c'est normal, il faut utiliser le hook des touches pour ça !
Je te joint un exemple simple que j'utilise, tiré de all api et modifé ensuite.

Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Private bCancel As Boolean

Private Type Msg
hwnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long

Private Sub Form_Load()
RegisterHotKey(Me.hwnd, &HBFFF&, MOD_CONTROL, vbKeyN) 'touche a enregistrer, tu met vbkey(ce que tu veux) et la place de MOD_CONTROL, soit MOD_ALT ou MOD_SHIFT , met tu peux laisser tel quel, le couple de touche serait alors control+N
Show
ProcessMessages
End Sub

Private Sub Form_Unload(Cancel As Integer)
bCancel = True
'unregister hotkey
Call UnregisterHotKey(Me.hwnd, &HBFFF&)
End
End Sub

Private Sub ProcessMessages()
Dim Message As Msg
'loop until bCancel is set to True
Do While Not bCancel
'wait for a message
WaitMessage
'check if it's a HOTKEY-message
If PeekMessage(Message, Me.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
'code que tu veux faire lors de l'appui des touches raccourcis
End If
End If
'let the operating system process other events
DoEvents
Loop
End Sub
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
6 mai 2004 à 21:19
En fait, si tu déroules un menu d'une application et qu'ensuite tu cliques sur l'application de capture afin de promener ta souris, le menu se referme aussitôt...

J'ai laissé un message sur la source de zappy pour voir s'il peut ou non modifier cette "option"

Ceci dit, je réitère ma demande de commentaires à Renfield... lorsqu'il repassera par ici...
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
6 mai 2004 à 21:16
Mon code prend bien en compte les menus, je me disai bien que c'était strange ... Il les prend car la capture est faite depuis une zone rectangulaire délimitée par raport à l'écran, et comme le menu est dans la fenetre , il le prend ... Je crois que je me suis aidé du code cité plus haut pour faire le mien, si tu veux, je peux poser mon code si l'autre ne te convient pas pour t'inspirer
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
6 mai 2004 à 21:10
Je venai justement pour te passer l'adresse lol
Par contre pour les menu, j'ai jamais fait attention, c'est bizzare :(
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
6 mai 2004 à 21:06
Pour info, la source dont tu parles est "MAGIQUE CAPTURE (CAPTURE D'ÉCRAN ET DE SOUS FENÊTRES)" de zappy.

http://www.vbfrance.com/code.aspx?ID=4251
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
6 mai 2004 à 21:05
>>>azerty25

C'est justement celle que j'étais en train de tester quand ton message est arrivé.

Mais d'après ce que j'ai constaté, il n'est pas possible de copier un menu déroulé... Ce qui était possible avec la source de Renfield...

Ceci dit, il me reste à étudier le code pour tenter de comprendre le fonctionnement de ces API...

Merci pour la réponse
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
6 mai 2004 à 20:55
Il est tout à fait possible de le faire, j'ai fait ce code mais qui n'ai pas sur VBfrance, il faut utiliser getwindowrec pour cadrer la position de la fenetre, et apres je sais plus trop.
Mais regarde sur le site, il y a déja une source qui le fait, j'ai déja vu, il utilise un détecteur de handle sous la souris si ma mémoire est bonne, cad quand tu met le curseur sous une fenetre, il la cadre toute seul, il fonctionne aussi avec des textbox etc etc qui on aussi des handle, met il passe par le clipboard pour coller l'image.
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
6 mai 2004 à 18:38
Salut Renfield,

Je suis occupé à revoir le code de ma source citée ci-dessus et je voulais recomparer avec le tien.

Mais avec l'interception des touches, j'ai encore du mal...

Pourrais-tu commenter ton code afin de me permettre de comprendre le fonctionnement de celui-ci ?

De plus, sauf erreur de ma part, il me semble qu'il n'est (actuellement) pas possible de copier une fenêtre active qui n'occuperait pas l'entièreté de l'écran (style une boîte de dialogue avec les touches ALT+PRINTSCREEN).

D'avance merci.
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
7 déc. 2003 à 10:52
Oua trop dla bombe, et moi qui a cherché sa il y a déja un moment sur le net sans jamais vraiment trouvé pour faifre des screen de jeux 8-)
C'est tout simplement ce qu'il me fallai lol
Mici bocou Billou, toujours des bonnes idées !!! ;)
Alors ton projet de konkette de Micro$oft avance lol ?
PSALSI Messages postés 2 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 août 2003
26 août 2003 à 10:46
Merci beaucoup Renfield ! ;o)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 août 2003 à 10:01
il te suffit de remanier legerement ma source : tu remarquera que la capture d'ecran ne se trouve pas dans le presse papier.... la touche n'a pas ete transmise !!!
PSALSI Messages postés 2 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 août 2003
22 août 2003 à 11:32
bonjour à tous,
moi c'est l'inverse, je cherche à bloquer la touche imprim'écran, est ce que l'un de vous sait comment faire et peut m'aider ?
merci d'avance!
skowee59 Messages postés 78 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 29 juin 2006
8 juin 2003 à 12:23
Je viens juste de la tester (sans regarder la source pour l'instant) et c'est vrai que c'est simple d'utilisation. Pour le moment, le seul truc que je peux reprocher c'est que, si je ne me trompe pas, tes fichiers s'enregistrent selon "date" et "heure" mais si tu viens à créer 2 images écran exactement au même moment => que se passera-t-il ? La première sera t-elle supprimée ?
Sinon, très bien ;-)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2003 à 10:47
non, Programix, ton appli est certes plus complète, mais la capture d'ecran suit toujours le meme processus, ca passe par le presse-papiers, que tu enregistre ensuite dans un fichier.

mon appli est moins aboutie, je te l'accorde, et j'en suis pleinement conscient, mais ca ne passe aucunement par le presse papiers......
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
8 juin 2003 à 10:41
C'est pareil pour moi, j'utilise la touche "Imprim Ecran".

Si le titre parle de la barre des tâches, c'est tout simplement parce que l'application est prévue pour se mettre dans la barre des tâches et, surtout, se lancer à chaque démarrage du PC.

L'option "Imprimer" me paraissait importante pour en cas de message d'alerte inhabituel dans l'une ou l'autre application, cela me permet de faire imédiatement une copie d'écran de ce message pour en garder une trace en cas de besoin ultérieur (appel à un dépanneur par exemple).
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 juin 2003 à 10:18
merci Programmix, j'y jetterais peut-être un oeil, pas forcément tout de suite.....

l'avantage de ma technique, a mon avis, c'est l'interception de la touche Imprim Ecran...

ce qui fait que ni le presse papier, ni les habitudes de fonctionnement ne sont modifiés.

encore merci pour l'info
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
8 juin 2003 à 09:42
Oups... la source se nomme "Imprimer ou enregistrer une copie d'écran via la barre des tâches" et porte le n° 5959.
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
8 juin 2003 à 09:41
J'avais réalisé une source de ce genre qui permettait d'imprimer la capture ainsi que l'enregistrer en BMP ou en JPEG...
Ma source est encore loin d'être parfaite, mais tu pourrais peut-être t'en servir pour atteindre tes objectifs. Si tel était le cas, fais-moi signe que je vois les améliorations que tu y auras apportées.
Lordvb Messages postés 57 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 3 décembre 2004
7 juin 2003 à 15:00
merci beaucoup c vraiment genial comme source je vais tente de l'adapter en .net ;)
Rejoignez-nous