Page 1 sur 1

Copie d'écran

Publié : sam. 13/nov./2004 13:50
par Le Soldat Inconnu
Salut

J'ai un souci pour faire des copie d'écran. Je n'arrive pas à avoir les fenêtre transparentes dessus

voici un exemple

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
; 
; Explication du programme :
; Faire une copie d'écran


Procedure SetWinTransparency(WinHandle.l, Transparency_Level.l)
  If OpenLibrary(0, "user32.dll")
    CallFunction(0, "SetLayeredWindowAttributes", WinHandle, 0, Transparency_Level, 2)
    CloseLibrary(0)
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 300, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Plein écran")
  SetWindowLong_(WindowID(), #GWL_EXSTYLE, GetWindowLong_(WindowID(), #GWL_EXSTYLE) | $00080000) ; #WS_EX_LAYERED = $00080000
  SetWinTransparency (WindowID(), 180)
  ; Pour changer le niveau de transparence de la fenêtre
  ; Le niveau de transparence doit être compris entre 1 (transparence totale) et 255 (opaque)
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #WM_CLOSE
  
EndIf

Ecran_Largeur = GetSystemMetrics_(#SM_CXSCREEN)
Ecran_Hauteur = GetSystemMetrics_(#SM_CYSCREEN)

DC = GetDC_(0)
CreateImage(0, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput())
  BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT)
StopDrawing()
ReleaseDC_(0, DC)

SaveImage(0, "Copie d'écran.bmp")

Delay(2000)
Il faut fermer la fen pour faire la copie d'écran (la fenêtre disparait 2 secondes après la copie d'écran)

Ca enregistre la copie d'écran dans une image bmp au même endroit que le code (ou dans purebasic\compileur\ si vousn'avez pas enregistrer le code)

J'ai essayé plusieurs solution mais toujours sans succés :(

merci d'avance pour votre aide :wink:

Publié : sam. 13/nov./2004 19:11
par Backup
retiré pour cause de trop nul !

:D

Publié : sam. 13/nov./2004 19:45
par Chris
Comme ça !

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu 
; Version de PB : 3.9 
; 
; Explication du programme : 
; Faire une copie d'écran 

#CAPTUREBLT = $40000000

Procedure SetWinTransparency(WinHandle.l, Transparency_Level.l) 
  If OpenLibrary(0, "user32.dll") 
    CallFunction(0, "SetLayeredWindowAttributes", WinHandle, 0, Transparency_Level, 2) 
    CloseLibrary(0) 
  EndIf 
EndProcedure 

If OpenWindow(0, 0, 0, 300, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Plein écran") 
  SetWindowLong_(WindowID(), #GWL_EXSTYLE, GetWindowLong_(WindowID(), #GWL_EXSTYLE) | $00080000) ; #WS_EX_LAYERED = $00080000 
  SetWinTransparency (WindowID(), 180) 
  ; Pour changer le niveau de transparence de la fenêtre 
  ; Le niveau de transparence doit être compris entre 1 (transparence totale) et 255 (opaque) 
  
  Repeat 
    Event = WaitWindowEvent() 
  Until Event = #WM_CLOSE 
  
EndIf 

Ecran_Largeur = GetSystemMetrics_(#SM_CXSCREEN) 
Ecran_Hauteur = GetSystemMetrics_(#SM_CYSCREEN) 

DC = GetDC_(0) 
CreateImage(0, Ecran_Largeur, Ecran_Hauteur) 
Dessin = StartDrawing(ImageOutput()) 
BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT|#CAPTUREBLT) 
StopDrawing() 
ReleaseDC_(0, DC) 

SaveImage(0, "Copie d'écran.bmp") 

Delay(2000)

Publié : sam. 13/nov./2004 19:49
par Le Soldat Inconnu
merci, je vais regarder ça :D

Publié : sam. 13/nov./2004 21:54
par Le Soldat Inconnu
ça marche super :D

Publié : sam. 13/nov./2004 21:57
par Chris
Ben ouais!!! :lol:

Publié : sam. 13/nov./2004 23:29
par Backup
ou t'a trouver ce "#CAPTUREBLT" ??? 8O
il est pas dans la doc de l'api " BitBlt "

Publié : dim. 14/nov./2004 6:58
par Chris
Je l'ai trouvé dans le Sdk, mais il doit être aussi dans le Msdn.