Voici un petit PRG de capture d’une zone quelconque de l’écran que vous choisirez vous-même
Ce PRG est sans prétention.
Fonctionnement :
1) Lancer le prg
2) Vous obtenez une fenêtre transparente qui peut être déplacée et agrandie à la demande.
3) lors du déplacement, la zone titre n’apparait pas (Chez moi option : propriété du bureau sous XP)
C’est la zone définie lors du déplacement qui fixe les limites du rectangle à capturer.
4) Après ajustement de la fenêtre appuyez sur F12 au relâchement de touche un menu vous
demandera le chemin, le nom et le type de fichier que vous désirez enregistrer(BMP,JPG,PNG).
5) Vous pouvez recommencer autant de fois que vous le désirez cette opération.
6) Pour quitter le PRG :
Cliquez sur X de la zone titre.
Attention la fenêtre transparente n’est pas toujours facile à repérer.
7) Dans la zone titre, si vous cliquez sur – , vous réduisez la fenêtre et si vous cliquez sur agrandir, vous pouvez capturer tout l’écran.
Code : Tout sélectionner
EnableExplicit
Enumeration
#FEN=0
EndEnumeration
Global nb_p,hwnd,WWIN,WHIN,WWOUT,WHOUT,rcwin.rect,Hwindow
Define eventID
Macro SAVEIMAGE_M
FichierParDefaut$="C:\" ; Répertoire et fichier par défaut qui seront affichés
Filtre$+"PNG (*.png)|*.png|" ; Quatrième filtre (index = 3)
Filtre$+"Bmp (*.bmp)|*.bmp|" ; Troisième filtre (index = 2)
Filtre$+"Jpeg (*.jpg)|*.jpg|" ; Quatrième filtre (index = 3)
Filtre$+"Tous les fichiers (*.*)|*.*" ; Cinquième filtre (index = 4)
Filtre=0 ; utiliser par défaut le premier des trois filtres possibles
TITRE$="Choix du Chemin & donnez un fichier à sauvegarder sans le suffix"
ltitr=Len(titre$)
BOUC1:
TITRE$+Space(10)
Fichier$=SaveFileRequester(TITRE$,FichierParDefaut$,Filtre$,Filtre)
If FICHIER$>""
Index=SelectedFilePattern()
Select index
Case 0
UsePNGImageEncoder()
SaveImage(img,fichier$+".PNG",#PB_ImagePlugin_PNG)
Case 1
SaveImage(img,fichier$+".BMP",#PB_ImagePlugin_BMP)
Case 2
UseJPEGImageEncoder()
SaveImage(img,fichier$+".JPG",#PB_ImagePlugin_JPEG)
Case 3
UsePNGImageEncoder()
UseJPEGImageEncoder()
UseJPEG2000ImageEncoder()
SaveImage(img,fichier$,#PB_ImagePlugin_JPEG | #PB_ImagePlugin_PNG | #PB_ImagePlugin_JPEG2000 | #PB_ImagePlugin_BMP)
EndSelect
ElseIf Len(titre$)<ltitr+11
Goto BOUC1
Else
MessageRequester("Apès 2 tentatives STOP","STOP STOP STOP")
End
EndIf
EndMacro
Macro BITBIT
img=CreateImage(#PB_Any,WWIN,WHOUT)
dc=GetDC_(0)
Fdest=StartDrawing(ImageOutput(img))
BitBlt_(Fdest,0,0,WWIN,WHOUT,dc,RCWIN\left,RCWIN\top,#SRCCOPY)
StopDrawing()
ReleaseDC_(0,dc)
SAVEIMAGE_M
EndMacro
Procedure.l KeyboardHook(nCode,wParam,*p.KBDLLHOOKSTRUCT)
Protected img.l,dc.l,Fdest,FichierParDefaut$,Filtre$,Filtre,TITRE$,Fichier$,Index,ltitr
If wParam=#WM_KEYDOWN Or wParam=#WM_SYSKEYDOWN Or wParam=#WM_KEYUP Or wParam=#WM_SYSKEYUP
If *p\flags=128 And *p\vkCode=123 ; vkcode de la touche F12 au relachement
BITBIT
ProcedureReturn 1
EndIf
EndIf
ProcedureReturn CallNextHookEx_(0,nCode,wParam,*p)
EndProcedure
; Hwindow=OpenWindow(#Fen,0,0,500,400,"Window",#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
Hwindow=OpenWindow(#Fen,10,10,500,400,"Ajuster la fenêtre & F12",#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowsHookEx_(#WH_KEYBOARD_LL,@KeyboardHook(),GetModuleHandle_(0),0); SetWindowsHookEx_(#WH_KEYBOARD_LL,@KeyboardHook(),GetModuleHandle_(0),0)
StickyWindow(#Fen,1)
If Hwindow
SetWindowColor(#Fen,RGB(255,0,0))
SetWindowLongPtr_(Hwindow,#GWL_EXSTYLE,#WS_EX_LAYERED | #WS_EX_TOPMOST)
SetLayeredWindowAttributes_(HWindow,RGB(255,0,0),0,#LWA_COLORKEY); RGB(255,0,0) rouge est la couleur à ne pas faire apparaitre donc transparante
Repeat
nb_p+1
Delay(1)
EventID=WindowEvent()
If EventID=#PB_Event_CloseWindow
End
EndIf
If nb_p%100=0
WWIN=WindowWidth(#Fen,#PB_Window_InnerCoordinate)
WHIN=WindowHeight(#Fen,#PB_Window_InnerCoordinate)
WWOUT=WindowWidth(#Fen,#PB_Window_FrameCoordinate)
WHOUT=WindowHeight(#Fen,#PB_Window_FrameCoordinate)
GetWindowRect_(HWindow,rcwin.rect)
EndIf
ForEver
EndIf