Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Capture d'une zone de l'écran total | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 21:07 | |
| Rassurez-vous, rien à voir avec les UV ! C'est la capture rectangulaire d'une zone quelconque de l'écran du moniteur, délimitée à la souris (clic en haut à gauche de la zone, puis clic en bas à droite). L'image résultante est récupérée soit dans un fichier image bmp, soir dans le presse-papier. Pour détecter le clic souris sur l'écran, j'ai utilisé une DLL de notre ami Nardo26: Pick.dll, fonction 'GetMouseXY', qui donne les coordonnées en valeur absolue de la souris sur l'écran et l'état de ses boutons. - Code:
-
' Capture d'une zone de l'écran total -> fichier ou clipboard ' NB: DLL de Nardo26: Pick.dll, à récupérer sur son site: ' http://nardo26.lescigales.org/dll-diverses-fonctions-28.html DIM x%,y%,w%,h%,et%,el%,a$,b$,fr$ fr$ = "C:\TEMP\Capture.bmp": ' ou fr$ = "" -> clipboard)
BORDER_SMALL 0: FONT_BOLD 0: WIDTH 0,260: HEIGHT 0,65: FONT_NAME 0,"Arial" CAPTION 0," CAPTURE D'UNE ZONE DE L'ÉCRAN": COLOR 0,200,255,255: FONT_SIZE 0,11 ALPHA 2: TOP 2,5: CAPTION 2,"1) Click le coin supérieur gauche" b$ = "0" WHILE b$ = "0" Pickmouse(): a$ = CLIPBOARD_STRING_PASTE$: b$ = MID$(a$,9,1) PAUSE 50 END_WHILE x% = VAL(LEFT$(a$,4)): y% = VAL(MID$(a$,5,4)) et% = 3: el% = 20: ' épaisseur trait, 1/2 longueur trait FORM 7: BORDER_HIDE 7: TOP 7,y%-el%: LEFT 7,x%-et%/2: WIDTH 7,et%: HEIGHT 7,2*el% COLOR 7,255,0,255 FORM 8: BORDER_HIDE 8: TOP 8,y%-et%: LEFT 8,x%-el%: WIDTH 8,2*el%: HEIGHT 8,et% COLOR 8,255,0,255 CAPTION 2,"2) Click le coin inférieur droit" PAUSE 500 b$ = "0" WHILE b$ = "0" Pickmouse(): a$ = CLIPBOARD_STRING_PASTE$: b$ = MID$(a$,9,1) PAUSE 50 END_WHILE w% = VAL(LEFT$(a$,4))-x%: h% = VAL(MID$(a$,5,4))-y% DELETE 7: DELETE 8 Capture_T(x%,y%,w%,h%,fr$) CAPTION 2,"Image : "+fr$
' Rect_Form(x%,y%,w%,h%,3,65536*255+256*255): ' pour voir END ' ============================================================================== SUB Pickmouse() ' Souris dans tout l'écran: position, boutons ' -> chaîne xxxxyyyyb -> clipboard DIM_LOCAL a$,bt% DLL_ON "C:\Panoramic\NARDO\pick.dll" a$ = STRING$(8," ") bt% = DLL_CALL1("GetMouseXY",ADR(a$)) DLL_OFF CLIPBOARD_STRING_COPY a$+STR$(bt%): ' coordonnées et bouton END_SUB ' ============================================================================== SUB Capture_T(x,y,w,h,f$) ' Capture d'une zone de l'écran total, en x,y absolus, dimensions w x h, ' dans f$ (BMP), ou dans le presse-papier (clipboard) si f$ = "" ' ATTENTION: x et y absolus par rapport à la totalité de l'écran ! DIM_LOCAL c2d% c2d% = NUMBER_2D_TARGET FORM 999: TOP 999,0: LEFT 999,0: WIDTH 999,SCREEN_X: HEIGHT 999,SCREEN_Y BORDER_HIDE 999: HIDE 999: 2D_TARGET_IS 999: WAIT 100: ' Tout l'écran IF w < 0 THEN x = x+w: w = ABS(w) IF h < 0 THEN y = y+h: h = ABS(h) IMAGE 1000: 2D_IMAGE_COPY 1000,x,y,x+w,y+h IF f$ = "" CLIPBOARD_COPY 1000 ELSE FILE_SAVE 1000,f$ END_IF 2D_TARGET_IS c2d%: DELETE 999: DELETE 1000 END_SUB ' ============================================================================== SUB Rect_Form(x%,y%,w%,h%,e%,rgb%) ' Tracé d'un rectangle sur tout l'écran DIM_LOCAL f%,r%,g%,b% r% = INT(rgb%/65536): g% = BIN_AND(rgb%,65280)/256: b% = BIN_AND(rgb%,255) f% = 890: FORM f%: COLOR f%,r%,g%,b% BORDER_HIDE f%: TOP f%,y%-e%/2: LEFT f%,x%-e%/2: WIDTH f%,w%+e%: HEIGHT f%,e% f%=f%+1: FORM f%: COLOR f%,r%,g%,b% BORDER_HIDE f%: TOP f%,y%+h%-e%/2: LEFT f%,x%-e%/2: WIDTH f%,w%+e%: HEIGHT f%,e% f%=f%+1: FORM f%: COLOR f%,r%,g%,b% BORDER_HIDE f%: TOP f%,y%-e%/2: LEFT f%,x%-e%/2: WIDTH f%,e%: HEIGHT f%,h%+e% f%=f%+1: FORM f%: COLOR f%,r%,g%,b% BORDER_HIDE f%: TOP f%,y%-e%/2: LEFT f%,x%+w%-e%/2: WIDTH f%,e%: HEIGHT f%,h%+e% END_SUB ' ============================================================================== En prime, une petite sub (Rect_Form) qui permet de tracer un rectangle n'importe où sur l'écran. @Klaus Je n'ai pas trouvé dans les fonctions de KGF.dll le moyen de détecter un clic sur l'écran, ou au moins de lire l'état des boutons, on peut juste le provoquer (AbsoluteMouseLeftClick).
Dernière édition par JL35 le Ven 17 Nov 2017 - 16:16, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 21:58 | |
| - Citation :
- Je n'ai pas trouvé dans les fonctions de KGF.dll le moyen de détecter un clic sur l'écran, ou au moins de lire l'état des boutons, on peut juste le provoquer (AbsoluteMouseLeftClick).
Oui, je n'ai pas fait de hook global pour intercepter un clic en-dehors des fenêtres de m'application. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 22:04 | |
| Merci pour ta confirmation Klaus, je craignais d'avoir raté quelque chose. Mais ce n'est pas grave, j'ai un palliatif. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 22:26 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 22:42 | |
| Donc plusieurs dll sous un seul DLL_ON, je ne savais pas, c'est bon à savoir, merci Klaus. (il faut dire que KGF.dll est une véritable encyclopédie !) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 22:50 | |
| Oui, j'avais fait ça un jour lorsque je me suis rendu compte que KGF.dll mémorise certaines informations qui doivent absolument rester en mémoire, comme la liste de certains objets créés par KGF.dll, l'état des diverses bases de données, connexions FTP etc. Si entretemps, on a besoin d'une autre DLL, comme USER32.dll par exemple, c'est foutu... . Donc, j'ai fait cela pour régler ce problème.
D'ailleurs, ma base de données relationnelle BDR.dll est également disponible via KGF.dll à travers ce mécanisme ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 23:32 | |
| Je vais m'endormir plus serein ! Bonne nuit ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Capture d'une zone de l'écran total Jeu 16 Nov 2017 - 23:43 | |
| Salut JL35 Je lance le programme et ... - ERREUR :
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 0:05 | |
| J’ai posté ici un mini code de 3 lignes qui permet de faire différents types de captures d’écran. Mais comme les bons trucs passent souvent inaperçus, seul Jicehel à réagi. Je rappelle le code - Code:
-
picture 10 : full_space 10 execute_wait "SnippingTool.exe" clipboard_paste 10
Pour plus d'info , cliquez sur le lien ci-dessus. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 14:27 | |
| Salut papydall, Bizarre ton erreur, ça semble vouloir dire que la dll de Nardo (GetMouseXY) ne t'a pas renvoyé une chaîne de 9 octets comme prévu ('xxxxyyyyb': valeur x, valeur y, état des boutons de la zone survolée...), tu as bien la bonne version (je sais quil y en a eu une déficiente). Pour SnippingTool, ton exemple ne marche pas chez moi, il s'affiche une croix, c'est tout... Perso j'utilise en général une fonction de capture de IrfanView, ça marche très bien, mais ce n'est pas en pur panoramic... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 15:38 | |
| Hello Juliet Lima Three Five Je dispose de la dll de Nardo Pick.dll, mais il s’est avéré qu’elle est comment dire ? Obsolète ! Bon, je l’ai téléchargée à nouveau et il semble qu’elle fonctionne cette fois-ci. Seulement, comme capture je n’obtiens qu’un horrible rectangle noir ! Pour SnippingTool, voici ce que ça donne Essaye de le lancer sous l’invite de commande, juste pour voir. Ça doit donner ceci : | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 15:54 | |
| Effectivement papydall, SnippingTool est bien plus séduisant (et plus satisfaisant) que mon programme. MAIS, je suis sous Windows 7 - je fais Windows + 'R', et je tape SnippingTool.exe: très bien, il se lance, s'exécute et s'affiche. - je fais depuis Panoramic EXECUTE_WAIT "SnippingTool.exe" ou bien EXECUTE_WAIT "C:\Windows\System32\SnippingTool.exe" dans les deux cas: Et pourtant, il est bien dans C:\Windows\System32 d'après l'explorateur de fichier ! Il semble que ce ne soit pas le programme qui est là, mais un lien vers le véritable programme... J'y perds mon latin... enfin, c'est une image, il y a bien longtemps que je l'ai perdu ! PS pour ton rectangle noir (horrible en plus) en résultat de capture (mon prog) je ne vois pas pourquoi, chez moi pas de pb, c'est la sub Capture_T() qui fait le boulot... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 16:14 | |
| - Jl35 a écrit:
- MAIS, je suis sous Windows 7
Moi également je suis sous W7. SnippingTool tourne sur Vista, W7, W8, W10. - JL35 a écrit:
- Et pourtant, il est bien dans C:\Windows\System32 d'après l'explorateur de fichier !
Ce type d’erreur est assez connu (une mauvaise indexation des fichiers, peut-être ? mais rien n’est sûr) Suggestion : faire une copie du fichier SnippingTool.exe sur un autre endroit autre que C :\Windows\System32 : sur le bureau par exemple et lance le code suivant - Code:
-
picture 10 : full_space 10 execute_wait "c:\ ....\SnippingTool.exe" :' Indiquer l'emplacement exact du fichier clipboard_paste 10
Ça devrait fonctionner : parole de Papydall | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 16:22 | |
| Tu as bien fait de rayer ta parole: ça ne marche pas. J'ai bien essayé de le copier (depuis Windows\System32) : il copie un lien (raccourci) vers le snippingtool de System32... J'ai fait une recherche de SnippingTool.exe dans tout Windows: il ne trouve que celui-ci et un autre enfoui dans les profondeurs qui est aussi un lien, mais je ne trouve pas le véritable programme... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 16:30 | |
| Chez moi le fichier SnippingTool.exe ne pèse que 387 Ko (voir capture d’écran ci-dessous) Pourquoi, le tien est plus lourd (421 Ko) ? Tu l’engraisses avec quel aliment ? Serait-il corrompu ? Remarque : j'ai fait une copie de SnippingTool.exe sur le bureau et en l'exécutant j'obtiens exactement l'erreur que tu as signalée. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Capture d'une zone de l'écran total Ven 17 Nov 2017 - 16:41 | |
| Mystère, il s'est engraissé tout seul (sur mon dos).En tout cas ce n'est pas un fichier normal, je ne peux pas le copier.
Je suis allé sur un portable Windows 10, il y a un SnippingTool.exe sous C:\Windows\System32, et il fait 3,01 M. J'ai tenté de le copier sur une clé (avec l'explorateur de fichiers), ça marche, mais il ne copie qu'un raccourci (2 k !) Je l'ai copié en ligne de commande, et là c'est complet.
Je le lance depuis la clé sur mon W7: manque de bol 'ce n'est pas une application Win32 valide'...
Bon, en conclusion (pour SnippingTool). - Je renonce à le lancer depuis Panoramic, je n'y arrive pas. - Je l'installe dans la barre des tâches (explorateur de fichier, C:\Windows\System32, clic droit sur SnippingTool.exe, 'Épingler dans la barre des tâches' Et là il suffit de cliquer sur le petit lasso en bas pour en disposer, il y a plein de possibilités (capture sous forme d'image ou de texte). | |
| | | Contenu sponsorisé
| Sujet: Re: Capture d'une zone de l'écran total | |
| |
| | | | Capture d'une zone de l'écran total | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |