Also habe nach langem ausprobieren dann doch die Windowsroutine genommen und die funktioniert auch vernünftig und schnell.
Habe zwar einiges danach gesucht, aber mittlerweile habe ich eine brauchbare Lösung. Leider muss ich mit While WindowEvent alle abfragen in dem Moment in die Tonne hauen, aber das ist halb so wild.
hier nun der komplette code, der funktioniert.
Code: Alles auswählen
Procedure SetWinTransparency (WinHandle.l, Transparency_Level.l)
SetWindowLong_(WinHandle,#GWL_EXSTYLE,$00080000) ; #WS_EX_LAYERED = $00080000
SetLayeredWindowAttributes_(WinHandle,0,Transparency_Level,2) ;
EndProcedure
Procedure ShowBild(File$)
LoadImage(0, File$)
ResizeWindow(ImageWidth(), ImageHeight())
MoveWindow((GetSystemMetrics_(#SM_CXSCREEN)/2)-(ImageWidth()/2), (GetSystemMetrics_(#SM_CYSCREEN)/2)-(ImageHeight()/2))
ResizeGadget(0,0,0,ImageWidth(), ImageHeight())
SetGadgetState(0,UseImage(0))
EndProcedure
Procedure RebuiltWindow()
CloseWindow(0)
hWnd = OpenWindow(0, 0, 0,0,0,#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible, "")
CreateGadgetList(hWnd)
ImageGadget(0,0,0,0,0,0)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW)
HideWindow(0,0)
SetWinTransparency(hWnd,127)
SetWindowPos_(WindowID(0), #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE)
EndProcedure
Procedure Screenshot()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
ClearClipboard()
#VK_SNAPSHOT=$2C
keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
While WindowEvent():Wend
hbm = GetClipboardData(#PB_ClipboardImage)
CreateImage(3,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
StartDrawing(ImageOutput())
DrawImage(hbm,0,0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
StopDrawing()
ResizeImage(3,370,270)
SetGadgetState(1,UseImage(3))
EndProcedure
Procedure open_window()
If OpenWindow(1, 10, 10, 390, 330, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Screenshot")
If CreateGadgetList(WindowID(1))
ImageGadget(1, 10,10,350,270,0)
EndIf
EndIf
EndProcedure
UseJPEGImageDecoder()
UseJPEGImageEncoder()
open_window()
RebuiltWindow()
ShowBild(OpenFileRequester("Wählen sie jpg Bilder aus","c:\","Jpg Bilder|*.jpg;*.jpeg;|All Files|*.*",0,0))
Delay(1000)
Screenshot()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow