ClipBoarder

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

ClipBoarder

Beitrag von benpicco »

Ich hab mal ein kleines Program gebastelt mit dem man Screenshots machen und kopierten Text verwalten kann.
Download

Code: Alles auswählen

Enumeration
  #Window
  #dir
  #search
  #format
  #comp
  #c_txt
  #state
  #Icon
  #Qwin
  #Qbut
  #Qtrak
EndEnumeration
Global typ.l, Selected.w
NewList text.s()
UseJPEGImageEncoder()
UsePNGImageEncoder()
Procedure popup()
  If CreatePopupMenu(0)
    MenuItem(1, "aktiv")
    SetMenuItemState(0,1,1)
    MenuItem(2, "Pfad")
    MenuItem(7, "Qualität")
    OpenSubMenu("Format")
    MenuItem(3, "bmp")
    MenuItem(4, "png")
    MenuItem(5, "jpg")
    CloseSubMenu()
    If CountList(text())<>0
      MenuBar()
      OpenSubMenu("Kopierter text")
    ForEach text()
      MenuItem(9+ListIndex(text()),Left(Trim(text()),10)+"...")
    Next
     SetMenuItemState(0,Selected,1)
    CloseSubMenu()
    MenuItem(8,"löschen")
  EndIf
  MenuBar()
    MenuItem( 6, "Quit")
    SetMenuItemState(0,3+GetGadgetState(#format),1)
    Select GetGadgetState(#format)
      Case 0
        DisableMenuItem(7,1)
      Case 1
        DisableMenuItem(7,1)
      Case 2
        DisableMenuItem(7,0)
    EndSelect
    
  EndIf
EndProcedure
Procedure WatchClipbrd(Count)
  Repeat
    Delay(100)
    daten=GetClipboardData(#PB_ClipboardImage)
    text.s=GetClipboardText()
    If daten<>0
      Count=0
      comp=0
      directory$=GetGadgetText(#dir)
      format$=GetGadgetText(#format)
      If format$=".jpg"
        comp=GetGadgetState(#comp)
      EndIf
      ExamineDirectory(0,directory$,"*"+format$)
      Repeat
        type=NextDirectoryEntry()
        If type=1
          Count+1
        EndIf
      Until type=0
      ExamineDesktops()
      CreateImage(0,DesktopWidth(0),DesktopHeight(0))
      StartDrawing(ImageOutput())
      DrawImage(daten,0,0)
      StopDrawing()
      SaveImage(0,directory$+"\screenshot"+Str(Count)+format$,typ,comp)
      SetGadgetText(#state,"screenshot"+Str(Count)+format$+" gespeichert")
      FreeImage(0)
      ClearClipboard()
    EndIf 
    If Len(text)>0
      found=0
      ForEach text()
        If text()=text
          found=1
          Break
        EndIf
      Next
      If found=0
        AddElement(text())
        text()=text
        ForEach text()
          SetMenuItemState(0,ListIndex(text())+9,0)
        Next
        SetMenuItemState(0,CountList(text())+8,1)
        Selected=CountList(text())+8
        popup()
      EndIf 
 
    EndIf
 
  
  ForEver
EndProcedure 
Procedure SaveSettings()
  DeleteFile("settings.dat")
  OpenFile(0,"settings.dat")
  WriteStringN(GetGadgetText(#dir))
  WriteByte(GetGadgetState(#format))
  WriteByte(GetGadgetState(#comp))
  CloseFile(0)
EndProcedure
Procedure Qualwahl()
  OpenWindow(#Qwin,DesktopMouseX(),DesktopMouseY(),100,20,#PB_Window_BorderLess,"Qualität",WindowID(#Window))
  CreateGadgetList(WindowID())
  TrackBarGadget(#Qtrak,1,1,60,17,0,10,#PB_TrackBar_Ticks)
  ButtonGadget(#Qbut,62,1,20,17,"OK")
  SetGadgetState(#Qtrak,GetGadgetState(#comp))
  Repeat
    Event=WaitWindowEvent()
    If Event=#PB_Event_Gadget
      GadgetID=EventGadgetID()
    EndIf
    
    
  Until GadgetID=#Qbut
  SetGadgetState(#comp,GetGadgetState(#Qtrak))
  SaveSettings()
  SetGadgetText(#c_txt,"Qualität:"+Str(GetGadgetState(#comp)))
  CloseWindow(#Qwin)
EndProcedure  
hWnd.l=OpenWindow(#Window,100,100,100,100,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered,"ClipIt!")
CreateGadgetList(WindowID())
StringGadget(#dir,1,1,90,20,"C:\")
ButtonGadget(#search,92,1,18,20,"..")
ComboBoxGadget(#format,1,22,50,70)
AddGadgetItem(#format,0,".bmp")
AddGadgetItem(#format,1,".png")
AddGadgetItem(#format,2,".jpg")
SetGadgetState(#format,0)
TextGadget(#c_txt,1,45,50,15,"Qualität:7")
TrackBarGadget(#comp,55,45,60,15,0,10,#PB_TrackBar_Ticks)
SetGadgetState(#comp,7)
TextGadget(#state,1,70,98,40,"          bereit")
ClearClipboard()
OpenFile(0,"settings.dat")
SetGadgetText(#dir,ReadString())
SetGadgetState(#format,ReadByte())
SetGadgetState(#comp,ReadByte())
CloseFile(0)
SetGadgetText(#c_txt,"Qualität:"+Str(GetGadgetState(#comp)))
CatchImage(1,?icon)
AddSysTrayIcon(#Icon,WindowID(#Window),ImageID())
SysTrayIconToolTip(#Icon, "Zwischenablage wird überwacht")
popup()

ThreadID=CreateThread(@WatchClipbrd(),0)
ThreadPriority(ThreadID,10)
Goto enablecomp  
While WindowEvent():Wend

Repeat
  EventID=WaitWindowEvent()
  If EventID=#PB_Event_Gadget
    GadgetID=EventGadgetID()

    If GadgetID=#search
      path$=PathRequester("Pfad wählen",GetGadgetText(#dir))
      If Len(path$)>0
        SetGadgetText(#dir,path$)
        SaveSettings()
      EndIf
    ElseIf GadgetID=#comp
      SetGadgetText(#c_txt,"Qualität:"+Str(GetGadgetState(#comp)))
      SaveSettings()
    ElseIf GadgetID=#format
      enablecomp:
      Select GetGadgetText(#format)
        Case ".bmp"
          DisableGadget(#comp,1)
          DisableMenuItem(7,1)
          typ=#PB_ImagePlugin_BMP
          SetMenuItemState(0,3,1)
          SetMenuItemState(0,4,0)
          SetMenuItemState(0,5,0)
        Case ".png"
          DisableGadget(#comp,1)
          DisableMenuItem(7,1)
          typ=#PB_ImagePlugin_PNG
          SetMenuItemState(0,3,0)
          SetMenuItemState(0,4,1)
          SetMenuItemState(0,5,0)
        Case ".jpg"
          DisableGadget(#comp,0)
          DisableMenuItem(7,0)
          typ=#PB_ImagePlugin_JPEG
          SetMenuItemState(0,3,0)
          SetMenuItemState(0,4,0)
          SetMenuItemState(0,5,1)
      EndSelect
      SaveSettings()
    ElseIf GadgetID=#dir
      SaveSettings()
    EndIf
    
  ElseIf EventID=#PB_Event_SysTray
    EventType=EventType()
    If EventType=#PB_EventType_RightClick
      DisplayPopupMenu(0, WindowID())
    ElseIf EventType=#PB_EventType_LeftClick
      state=(state-1)/-1
      HideWindow(#Window,state)
      popup()
    EndIf
    
  ElseIf EventID=#PB_Event_Menu
   
    EvMID= EventMenuID()  ; To see which menu has been selected
      
    If EvMID= 1 ; aktiv
        If GetMenuItemState(0,1)=1
        SetMenuItemState(0,1,0)
        PauseThread(ThreadID)
        SetGadgetText(#state,"inaktiv")
        SysTrayIconToolTip(#Icon,"Überwachung der Zwischenablage angehalten")
      Else
        SetMenuItemState(0,1,1)
        ResumeThread(ThreadID)
        SetGadgetText(#state,"bereit")
        SysTrayIconToolTip(#Icon,"Zwischenablage wird überwacht")
      EndIf
    ElseIf EvMID= 2 ; pfad
      path$=PathRequester("Pfad wählen",GetGadgetText(#dir))
      If Len(path$)>0
        SetGadgetText(#dir,path$)
        SaveSettings()
      EndIf
    ElseIf EvMID= 3
          SetGadgetState(#format,0)
          DisableGadget(#comp,1)
          DisableMenuItem(7,1)
          typ=#PB_ImagePlugin_BMP
          SetMenuItemState(0,3,1)
          SetMenuItemState(0,4,0)
          SetMenuItemState(0,5,0)
          SaveSettings()
        ElseIf EvMID= 4
          SetGadgetState(#format,1)
          DisableMenuItem(7,1)
          DisableGadget(#comp,1)
          typ=#PB_ImagePlugin_PNG
          SetMenuItemState(0,3,0)
          SetMenuItemState(0,4,1)
          SetMenuItemState(0,5,0)
           SaveSettings()
        ElseIf EvMID= 5
          SetGadgetState(#format,2)
          DisableGadget(#comp,0)
          DisableMenuItem(7,0)
          typ=#PB_ImagePlugin_JPEG
          SetMenuItemState(0,3,0)
          SetMenuItemState(0,4,0)
          SetMenuItemState(0,5,1) 
         SaveSettings()
       ElseIf EvMID= 6 ; Quit
        KillThread(ThreadID)
        End
      ElseIf EvMID=7
        Qualwahl()
      ElseIf EvMID=8
        SetMenuItemState(0,Selected,0)
        SelectElement(text(),Selected-9)
        DeleteElement(text(),1)
        Selected=CountList(text())+8
        ClearClipboard()
        popup()
      ElseIf EvMID>8
        ForEach text()
          SetMenuItemState(0,ListIndex(text())+9,0)
        Next
        SelectElement(text(),EvMID-9)
        SetMenuItemState(0,EvMID,1)
        Selected=EvMID
        SetClipboardText(text())
      EndIf
    EndIf
    If IsIconic_(hWnd.l) = 1 And state=0
      state=(state-1)/-1
      HideWindow(#Window,state)
      popup()
    EndIf
    
    
Until EventID=#PB_Event_CloseWindow
KillThread(ThreadID)
End
DataSection
icon:IncludeBinary "icon.ico"
EndDataSection
Zuletzt geändert von benpicco am 23.10.2005 14:14, insgesamt 1-mal geändert.
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

Hi @benpicco!

Die 'WatchClipbrd()' Funktion erscheint mir nicht als sinnvollste
Lösung, da man die Überwachung auch per Clipboard-Event
in 'nem Callback sauberer regeln kann.

Ich glaube Agent hat das mit seinem Teil genauso wie Du gemacht
und verpasst scheinbar dadurch manches 'Erieignis'.. :wink:

Ich habe übrigens auch mal ein Programm kreiert mit dem
man Bilder und Texte aus der Zwischenablage fischen kann. /:->

Es heißt ClipIt!

http://forums.purebasic.com/german/viewtopic.php?t=1672
http://forums.purebasic.com/german/viewtopic.php?t=1719

<)

Gruß,
Mischa
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Mischa hat geschrieben:Hi @benpicco!

Die 'WatchClipbrd()' Funktion erscheint mir nicht als sinnvollste
Lösung, da man die Überwachung auch per Clipboard-Event
in 'nem Callback sauberer regeln kann.
Werd ich mir mal die Clipboard WinAPI anschauen...
Mischa hat geschrieben: Ich habe übrigens auch mal ein Programm kreiert mit dem
man Bilder und Texte aus der Zwischenablage fischen kann. /:->

Es heißt ClipIt!

http://forums.purebasic.com/german/viewtopic.php?t=1672
http://forums.purebasic.com/german/viewtopic.php?t=1719

<)

Gruß,
Mischa
Ups :oops:
Dein Programm ist wirklich um einiges besser als meins...
Ich werde meins mal umbenennen...
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Thatsanee
Beiträge: 116
Registriert: 11.03.2005 05:12

Beitrag von Thatsanee »

Mischa hat geschrieben:Hi @benpicco!

Die 'WatchClipbrd()' Funktion erscheint mir nicht als sinnvollste
Lösung, da man die Überwachung auch per Clipboard-Event
in 'nem Callback sauberer regeln kann. ...
Hi,
das mit dem Clipboard-event in einer Callback würde mich auch interessieren.
Hab da im Handbuch nichts passendes finden können.

Wie genau ist die Callback denn aufgebaut ?
Kleiner Beispielcode wäre super.
Mrs. Thatsanee
PB 4 - PB 3.94
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Thatsanee hat geschrieben:[...]das mit dem Clipboard-event in einer Callback würde mich auch interessieren.
Hab da im Handbuch nichts passendes finden können
...ein bisschen Suchen, und die wäre das hier aufgefallen...

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Thatsanee
Beiträge: 116
Registriert: 11.03.2005 05:12

Beitrag von Thatsanee »

Tafkadasom2k5 hat geschrieben:...ein bisschen Suchen, und die wäre das hier aufgefallen...

Gr33tz
Tafkadasom2k5
Hi,
na dann habe ich mich scheinbar wohl wieder verkehrt ausgedrückt.
Wie man eine CallBack Programmiert ist schon klar. Suche falls es das
überhaupt gibt die Konstante welche abgegragt werden muß wenn sich
der Inhalt des Clipboards geändert hat.
Mrs. Thatsanee
PB 4 - PB 3.94
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Thatsanee hat geschrieben:das mit dem Clipboard-event in einer Callback würde mich auch interessieren.
es gibt eine sogenannte Clipboard-Chain, in die man sein Programm mit
SetClipboardViewer_() hängen kann. Dann werden nacheinander alle
Programme, die in dieser Kette hängen benachrichtigt, wenn sich der Inhalt
des Clipboards geändert hat:

http://www.purebasic.fr/english/viewtopic.php?t=20664

Grüße ... Kiffi
a²+b²=mc²
Thatsanee
Beiträge: 116
Registriert: 11.03.2005 05:12

Beitrag von Thatsanee »

Danke Kiffi,

klappt super damit.
Mrs. Thatsanee
PB 4 - PB 3.94
Antworten