Habe noch mal mein Modul ThreadToGUI mit Requester erweitert.
Im dem Zuge habe ich erst mal Deine Windows Version mit den Modul erweitert.
Edit Läuft schon mal grob unter Linux. SysTray geht nicht
Code: Alles auswählen
;-Top
IncludeFile "Modul_ThreadToGUI.pb"
Enumeration #PB_Event_FirstCustomValue
#My_Event_ThreadToGUI
EndEnumeration
UseModule ThreadToGUI
Enumeration
#MainWin
#CloseB
#MinimizeB
#PNG
#BMP
#JPG
#TrackBar
#TrayOption
#MessageB
#OpenFolderAfterSave
#AskForName
#UseDate
#SetDefFolder
#DefFolderText
#TrayIcon
#IMG
#Sound
#AUTO
#AUTOAsk
EndEnumeration
own$=GetCurrentDirectory()
If 0; CountString(own$,"\") < 2
MessageRequester(" Put me","in a Folder and start me again")
End
EndIf
If 0;FileSize(own$+"TrayIcon.ico") < 1500
MessageRequester(" Tray","icon (TrayIcon.ico) not found")
End
EndIf
Global config_valid
Global sndwork
Global stop_supervise
Global supervise_run
Procedure CreateScreenshot()
pic = GetClipboardImage(#PB_Any)
If IsImage(pic)
If GetGadgetState(#AUTOAsk)
If supervise_run
If MessageRequester(" INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
ClearClipboard()
ProcedureReturn
EndIf
EndIf
EndIf
If GetGadgetState(#PNG)
fpattern$="png | *.png" : ext$=".png" : format=1
EndIf
If GetGadgetState(#BMP)
fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
EndIf
If GetGadgetState(#JPG)
fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
EndIf
If GetGadgetState(#AskForName)
fname$ = SaveFileRequester("Save",GetGadgetText(#DefFolderText),fpattern$,0)
If fname$
fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$)
If FileSize(fname$) > 0
If MessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
ClearClipboard()
ProcedureReturn
EndIf
EndIf
fname$=RemoveString(fname$,ext$,#PB_String_NoCase)
fname$=fname$+ext$
Else
ClearClipboard()
ProcedureReturn
EndIf
Else
ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date())
default_output$=GetGadgetText(#DefFolderText)
If FileSize(default_output$) = -1
default_output$=GetHomeDirectory()
SetGadgetText(#DefFolderText,default_output$)
MessageRequester(" Error","Default Folder don´t exist, saved Image @ "+default_output$)
ProcedureReturn
EndIf
fname$=default_output$+ff$+ext$ : fp$=default_output$
EndIf
If format=1
SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
ElseIf format=2
SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
ElseIf format=3
SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1)
EndIf
ClearClipboard()
ff$=GetFilePart(fname$)
If GetGadgetState(#MessageB)
MessageRequester(" OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
Else
If sndwork
PlaySound(#Sound)
EndIf
EndIf
If GetGadgetState(#OpenFolderAfterSave)
RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
EndIf
EndIf
EndProcedure
Procedure ThreadCreateScreenshot()
pic = DoGetClipboardImage(#PB_Any)
If IsImage(pic)
If GetGadgetState(#AUTOAsk)
If supervise_run
If DoMessageRequester(" INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
DoClearClipboard()
ProcedureReturn
EndIf
EndIf
EndIf
If GetGadgetState(#PNG)
fpattern$="png | *.png" : ext$=".png" : format=1
EndIf
If GetGadgetState(#BMP)
fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
EndIf
If GetGadgetState(#JPG)
fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
EndIf
If GetGadgetState(#AskForName)
fname$ = DoSaveFileRequester("Threaded Save",GetGadgetText(#DefFolderText),fpattern$,0)
If fname$
fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$)
If FileSize(fname$) > 0
If DoMessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
DoClearClipboard()
ProcedureReturn
EndIf
EndIf
fname$=RemoveString(fname$,ext$,#PB_String_NoCase)
fname$=fname$+ext$
Else
DoClearClipboard()
ProcedureReturn
EndIf
Else
ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date())
default_output$=GetGadgetText(#DefFolderText)
If FileSize(default_output$) = -1
default_output$=GetHomeDirectory()
DoSetGadgetText(#DefFolderText,default_output$)
DoMessageRequester(" Error","Default Folder don´t exist, saved Image @ "+default_output$)
ProcedureReturn
EndIf
fname$=default_output$+ff$+ext$ : fp$=default_output$
EndIf
If format=1
SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
ElseIf format=2
SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
ElseIf format=3
SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1)
EndIf
DoClearClipboard()
ff$=GetFilePart(fname$)
If GetGadgetState(#MessageB)
DoMessageRequester(" OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
Else
If sndwork
PlaySound(#Sound)
EndIf
EndIf
If GetGadgetState(#OpenFolderAfterSave)
RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
EndIf
EndIf
EndProcedure
Procedure SaveActiveSettings(Close)
If CreatePreferences(own$+"TurboImageGrabber.ini")
WritePreferenceString("key","a/3j@kn30N*b3<$k#ja!l3k9L")
xxx=GetGadgetState(#TrayOption)
WritePreferenceLong("tray start",xxx)
xxx$=GetGadgetText(#DefFolderText)
WritePreferenceString("default output",xxx$)
If GetGadgetState(#PNG)
WritePreferenceString("default format","0")
EndIf
If GetGadgetState(#BMP)
WritePreferenceString("default format","1")
EndIf
If GetGadgetState(#JPG)
WritePreferenceString("default format","2")
EndIf
If GetGadgetState(#AUTO)
WritePreferenceString("supervise","1")
EndIf
If GetGadgetState(#AUTOAsk)
WritePreferenceString("supervise_ask","1")
EndIf
xxx=GetGadgetState(#TrackBar)
WritePreferenceLong("jpg compression",xxx)
xxx=GetGadgetState(#OpenFolderAfterSave)
WritePreferenceLong("open target",xxx)
xxx=GetGadgetState(#MessageB)
WritePreferenceLong("save message",xxx)
xxx=GetGadgetState(#AskForName)
WritePreferenceLong("save as user input",xxx)
ClosePreferences()
If Close
;End
EndIf
Else
If Close
If MessageRequester(" Error","Can´t Create/Save Preference File (maybe no System Right's)"+Chr(13)+Chr(13)+"Still close Turbo Image Grabber ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
;End
EndIf
Else
MessageRequester(" Error","Can´t Create/Save Preference File (maybe no System Right's)")
EndIf
EndIf
EndProcedure
Procedure WatchForClipBoardImage(bla)
supervise_run=1
Repeat
If stop_supervise
Break
EndIf
Delay(20)
ThreadCreateScreenshot()
ForEver
supervise_run=0
EndProcedure
Procedure InitSettings()
If config_valid = 0
SetGadgetState(#PNG,1)
SetGadgetState(#MessageB,1)
SetGadgetState(#AskForName,1)
default_output$=GetUserDirectory(#PB_Directory_Documents)
SetGadgetText(#DefFolderText,default_output$)
Else
default_output$ = ReadPreferenceString("default output",GetUserDirectory(#PB_Directory_Documents))
If FileSize(default_output$) = -2
SetGadgetText(#DefFolderText,default_output$)
Else
default_output$=GetUserDirectory(#PB_Directory_Documents)
SetGadgetText(#DefFolderText,default_output$)
EndIf
default_format = ReadPreferenceLong("default format",0)
If default_format < 0 Or default_format > 2
SetGadgetState(#PNG,1)
Else
If default_format = 0
SetGadgetState(#PNG,1)
ElseIf default_format = 1
SetGadgetState(#BMP,1)
ElseIf default_format = 2
SetGadgetState(#JPG,1)
EndIf
EndIf
jpg_compression = ReadPreferenceLong("jpg compression",7)
If jpg_compression < 0 Or jpg_compression > 10
jpg_compression=7
EndIf
SetGadgetState(#TrackBar,jpg_compression)
save_message = ReadPreferenceLong("save message",0)
If save_message < 0 Or save_message > 1
SetGadgetState(#MessageB,0)
Else
SetGadgetState(#MessageB,save_message)
EndIf
open_target = ReadPreferenceLong("open target",0)
If open_target < 0 Or open_target > 1
SetGadgetState(#OpenFolderAfterSave,0)
Else
SetGadgetState(#OpenFolderAfterSave,open_target)
EndIf
save_as_user_input = ReadPreferenceLong("save as user input",1)
If save_as_user_input < 0 Or save_as_user_input > 1
SetGadgetState(#AskForName,1)
Else
If save_as_user_input
SetGadgetState(#AskForName,1)
Else
SetGadgetState(#AskForName,0)
SetGadgetState(#UseDate,1)
EndIf
EndIf
If ReadPreferenceLong("supervise_ask",0)
SetGadgetState(#AUTOAsk,1)
EndIf
If ReadPreferenceLong("supervise",0)
SetGadgetState(#AUTO,1)
CreateThread(@WatchForClipBoardImage(),0)
EndIf
EndIf
ClosePreferences()
EndProcedure
If FileSize(own$+"TurboImageGrabber.ini") = -1
CreateDef=1 : default_output$=GetUserDirectory(#PB_Directory_Documents)
Else
If OpenPreferences(own$+"TurboImageGrabber.ini")
ini_key$ = ReadPreferenceString("key","")
ini_key_chk = FindString(ini_key$,"a/3j@kn30N*b3<$k#ja!l3k9L",1)
If ini_key_chk
config_valid=1
Else
MessageRequester(" No","valid Turbo Image Grabber ini File found")
config_valid=0
EndIf
EndIf
EndIf
#window_kon1=#PB_Window_ScreenCentered|#PB_Window_SystemMenu
#window_kon2=#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SystemMenu
Title$=" Turbo Image Grabber"
bla=309
If config_valid = 0
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1)
Else
open_in_tray = ReadPreferenceLong("tray start",0)
If open_in_tray < 0 Or open_in_tray > 1
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1)
Else
If open_in_tray = 0
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1)
ElseIf open_in_tray = 1
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon2)
EndIf
EndIf
EndIf
;AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), LoadImage(#IMG, own$+"TrayIcon.ico"))
AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), CreateImage(#IMG, 16, 16, 32, $0000FF)); LoadImage(#IMG, own$+"TrayIcon.ico"))
UseJPEGImageEncoder() : UsePNGImageEncoder()
If InitSound()
UseOGGSoundDecoder()
If LoadSound(#Sound,own$+"krapkrap.ogg")
sndwork=1
EndIf
EndIf
ButtonGadget(#CloseB,195,10,50,60,"Close Turbo Image Grabber",#PB_Button_MultiLine)
ButtonGadget(#MinimizeB,130,10,50,60,"Minimize Turbo Image Grabber",#PB_Button_MultiLine)
OptionGadget(#PNG,10,10,80,20,"Save as png")
OptionGadget(#BMP,10,30,85,20,"Save as bmp")
OptionGadget(#JPG,10,50,80,20,"Save as jpg")
TrackBarGadget(#TrackBar,5,81,245,10,0,10,#PB_TrackBar_Ticks)
SetGadgetState(#TrackBar,7)
CheckBoxGadget(#TrayOption,10,100,80,20,"Open in Tray")
If open_in_tray = 1
SetGadgetState(#TrayOption,1)
EndIf
CheckBoxGadget(#MessageB,10,120,115,20,"Message after Save")
SetGadgetState(#MessageB,1)
CheckBoxGadget(#OpenFolderAfterSave,10,140,170,20,"Open Target folder after Saving")
CheckBoxGadget(#AskForName,10,160,110,20,"Ask for Save Name")
SetGadgetState(#AskForName,1)
CheckBoxGadget(#UseDate,10,180,165,20,"Use Date+Time as File Names")
ButtonGadget(#SetDefFolder,10,206,235,20,"Set Standard Output Folder")
StringGadget(#DefFolderText,10,235,235,20,default_output$,#PB_String_ReadOnly)
CheckBoxGadget(#AUTO,10,260,215,20,"Auto Create Image | Supervise Clipboard")
CheckBoxGadget(#AUTOAsk,10,280,225,20,"Ask before Auto Create @ Supervise Mode")
If CreateDef
SaveActiveSettings(0) : InitSettings()
Else
InitSettings()
EndIf
ExamineDesktops()
ThreadToGUI::BindEventGUI(#My_Event_ThreadToGUI)
Repeat
WindowEvent = WaitWindowEvent() : EventGadget = EventGadget()
If WindowEvent = #PB_Event_SysTray
If EventType() = #PB_EventType_LeftClick
CreateScreenshot() : SaveActiveSettings(0)
EndIf
If EventType() = #PB_EventType_LeftDoubleClick
HideWindow(#MainWin,0) : SetActiveWindow(#MainWin) : SaveActiveSettings(0)
EndIf
If EventType() = #PB_EventType_RightDoubleClick
If MessageRequester(" Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SaveActiveSettings(1)
Break
EndIf
EndIf
EndIf
If WindowEvent = #PB_Event_Gadget
If EventGadget = #CloseB
If MessageRequester(" Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SaveActiveSettings(1)
Break
EndIf
EndIf
If EventGadget = #MinimizeB
CreateScreenshot() : HideWindow(#MainWin,1) : SaveActiveSettings(0)
EndIf
If EventGadget = #AskForName
If GetGadgetState(#AskForName)
SetGadgetState(#AskForName,1) : SetGadgetState(#UseDate,0)
Else
SetGadgetState(#AskForName,0) : SetGadgetState(#UseDate,1)
EndIf
EndIf
If EventGadget = #UseDate
If GetGadgetState(#UseDate)
SetGadgetState(#UseDate,1) : SetGadgetState(#AskForName,0)
Else
SetGadgetState(#UseDate,0) : SetGadgetState(#AskForName,1)
EndIf
EndIf
If EventGadget = #AUTO
If GetGadgetState(#AUTO)
stop_supervise=0
CreateThread(@WatchForClipBoardImage(),0) : SetGadgetState(#AUTO,1)
Else
SetGadgetState(#AUTO,0) : stop_supervise=1
EndIf
EndIf
If EventGadget = #SetDefFolder
If FileSize(default_output$) <> -2
default_output$=GetUserDirectory(#PB_Directory_Documents)
EndIf
default_output$=PathRequester("Choose Default Output Path",default_output$)
If default_output$
SetGadgetText(#DefFolderText,default_output$)
SaveActiveSettings(0)
EndIf
EndIf
EndIf
If WindowEvent = #PB_Event_CloseWindow
CreateScreenShot()
HideWindow(#MainWin,1)
SaveActiveSettings(0)
EndIf
ForEver
Debug "Ende"