Peut être une solution à améliorer
Code:
Global x1, y1, x2,y2, Fenetre.s, Handle
Enumeration
#Window_0 : #Listview_0 : #Image0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 452, 380, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ListViewGadget(#Listview_0, 70, 40, 300, 180)
EndIf
EndIf
EndProcedure
Procedure Window()
hWnd.l = FindWindow_( 0, 0 )
While hWnd <> 0
If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
txt.s = Space(256)
GetWindowText_(hWnd, txt, 256)
If txt <> ""
AddGadgetItem(#Listview_0,-1,txt)
EndIf
EndIf
hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
Wend
EndProcedure
Procedure Taille(Fenetre.s)
Handle = FindWindow_(0, Fenetre)
GetWindowRect_(Handle, rc.Rect)
GetClientRect_(Handle, sc.Rect)
x1= rc\Left
y1= rc\Top
x2 = sc\Right+8
y2 = (rc\Bottom + sc\Bottom )/2
EndProcedure
Procedure CopieImage()
res = SetForegroundWindow_(Handle)
Delay(100)
CreateImage(#Image0,x2,y2)
DC0 = StartDrawing(ImageOutput(#Image0))
BitBlt_(DC0,0,0,x2,y2,GetDC_(GetDesktopWindow_()),x1,y1,#SRCCOPY )
StopDrawing()
SaveImage(#Image0,"c:\aa.bmp")
EndProcedure
Procedure ImprimeImage(ImageX)
If PrintRequester()
If StartPrinting(Fenetre)
If StartDrawing(PrinterOutput())
DrawImage(ImageID(ImageX), 100, 100, x2*10, y2*10)
StopDrawing()
EndIf
StopPrinting()
EndIf
EndIf
End
EndProcedure
Open_Window_0()
Window()
Repeat
Event = WaitWindowEvent()
GadgetID = EventGadget()
If Event = #PB_Event_Gadget
If GadgetID = #Listview_0
Fenetre.s = GetGadgetItemText(#Listview_0, GetGadgetState(#Listview_0))
Taille(Fenetre)
CopieImage()
ImprimeImage(#Image0)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End