Seite 1 von 1

GDI image finder

Verfasst: 08.11.2008 15:15
von RocketRider
Sucht das System nach allen vorhandenen GDI Bildern ab und zeigt sie in einer liste an.
Die Bilder können außerdem als bitmap abgespeichert werden.

Code: Alles auswählen

;GDI image finder
;================
; This source is released under zlib-licence

OpenWindow(1,0,0,800,600,"GDI image finder")

StopButton = ButtonGadget(#PB_Any,0,0,100,20,"Stop")
InputGadget = StringGadget(#PB_Any,200,0,100,20,"")
SaveButton = ButtonGadget(#PB_Any,300,0,100,20,"Save")

TABPOS = 1
PanelGadget(0, 0, 20, 800, 580)
  
  
  AddGadgetItem (0, -1, "Img"+Str(TABPOS))
  InnerWidth = GetGadgetAttribute(0, #PB_Panel_ItemWidth)
  InnerHeight = GetGadgetAttribute(0, #PB_Panel_ItemHeight)
  ImgWidth = InnerWidth
  ImgHeight = 1
  
  ScrollAreaGadget(TABPOS, 0, 0, InnerWidth, InnerHeight, ImgWidth, 800, 10)
    
    Repeat

      
      If hBmp < $7FFFFFFF
        hBmp + 1
        If GetObjectType_(hBmp) = #OBJ_BITMAP
          Found + 1
          bmp.BITMAP
          GetObject_(hBmp,SizeOf(BITMAP), bmp)
          
          ImageGadget(#PB_Any, 0, ImgHeight, bmp\bmWidth, bmp\bmHeight, hBmp)
          TextGadget(#PB_Any , bmp\bmWidth + 16, ImgHeight, 200, 16, Str(hBmp))
          
          If bmp\bmWidth + 16 + 200 > ImgWidth
            ImgWidth = bmp\bmWidth + 16 + 200
            SetGadgetAttribute(TABPOS, #PB_ScrollArea_InnerWidth, ImgWidth)
          EndIf
          
          ImgHeight + bmp\bmHeight + 16
          SetGadgetAttribute(TABPOS, #PB_ScrollArea_InnerHeight, ImgHeight)
        EndIf
        
        If ImgHeight => 32000
          TABPOS + 1
          ImgHeight = 1
          AddGadgetItem (0, -1, "Img"+Str(TABPOS))
          ScrollAreaGadget(TABPOS, 0, 0, InnerWidth, InnerHeight, ImgWidth, 800, 10)
          EndIf
          
          Count + 1
        Else
          Count = 0
        EndIf
        
        
        If Count % 10000 = 0 Or hBmp >= $7FFFFFFF
          Repeat
            If hBmp < $7FFFFFFF
              SetWindowTitle(1, "GDI image finder " + Str(hBmp) + "/" +Str($7FFFFFFF) + "  Found:" + Str(Found))
            EndIf
            Event = WindowEvent()
            If Event = #PB_Event_CloseWindow :Quit = #True:EndIf
            
            If Event = #PB_Event_Gadget
              If EventGadget() = StopButton:hBmp = $7FFFFFFF:EndIf
              
              If EventGadget() = SaveButton
                Bitmap = Val(GetGadgetText(InputGadget))
                
                If GetObjectType_(Bitmap) = #OBJ_BITMAP
                  bmp.BITMAP
                  GetObject_(Bitmap,SizeOf(BITMAP), bmp)
                  CreateImage(1,bmp\bmWidth,bmp\bmHeight, 32)
                  StartDrawing(ImageOutput(1))
                    DrawImage(Bitmap,0,0)
                  StopDrawing()
                  File$ = SaveFileRequester("Save as Bitmap","noname.bmp", "Bitmap(*.bmp)|*.bmp", 0)
                  If SaveImage(1, File$) =0
                    MessageRequester("ERROR","Can't save image!")
                  EndIf
                  
                Else
                  MessageRequester("ERROR","No valid BitmapID!")
                EndIf
                
                
                
              EndIf
              
            EndIf
            
            
          Until Event = 0
        EndIf
        
        
      Until Quit

Full-Package

Verfasst: 08.11.2008 15:47
von ts-soft
> Sucht das System nach allen vorhandenen GDI Bildern ab
Was heißt das? Will ja nicht wochenlang warten bis er meine TB durch hat :lol:

Variablendeklaration wäre schon wünschenswert (erforderlich) in diesem
Forum.

Desweiteren vermisse ich jegliche Erklärung was da nun wie passiert,
verstehe garnicht wo durch die Bilder iteriert wird? Wo im Code und wo im
Sytem?

Verfasst: 08.11.2008 16:00
von RocketRider
Der Code sucht alle Bitmaps die sich im Arbeitspeicher befinden.
Eine komplette Durchsuchung(2 Mrd. Einträge) dauert ca. 10 min. (Rechnerabhänig).
Die Ergebnisse können auch schon während der Durchsuchung angeschaut werden.

Verfasst: 08.11.2008 16:44
von kswb73
Lol,
Ich find's lustig. Die Images anderer Programme zu betrachten und zu speichern (einschließlich Windows). Man findet aber auch ganz andere nette Sachen heraus. Zum Beispiel das Windows geklipte Images für z.B. den Beenden Kopf beim herunterfahren nutzt (Windows XP).

Das Programm sollte aber auch beim Scrollen weiter suchen können. Scrollen mit dem Mausrad wäre nett. Beim Speichern sollte er außerdem .bmp automatisch dranhängen.

PS: Ist das ganze nicht eigenlich illegal, einfach so die Bilder anderer Programme zu "stehlen"?

Verfasst: 08.11.2008 17:05
von X360 Andy
Toll 10 Minunte System Durchsucht ( bei 90% CPU Auslastung ) ( 4*100³ Daten / Bildern etc. )

Hab mich schon gewundert das hier geschrieben wird das man schon beim suchen die Bilder anschauen kann, und dann stell ich am ende fest das es bei mir nicht geht, es wird am ende nichts angezeigt.

// Vista

Verfasst: 10.11.2008 08:48
von dige
funzt prima ... auch die Umsetzung mit dem ScrollAreaGadget ist gut gemacht!

Verfasst: 10.11.2008 09:20
von Bisonte
Nur schade das der Suchlauf stoppt, wenn man während des durchsuchens ein Image speichert.

@kswb73: Scrollen mit Mausrad funktioniert bei mir... allerdings nicht im ersten Tab.