WebShot (Alpha)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

So, die Weiterentwicklung von WebShot wird bis auf weiteres eingestellt.

Der Grund: Nach einiger Recherche habe ich ein Freeware-Programm
entdeckt, welches genau das kann, was WebShot mal können sollte:

http://www.snapfiles.com/reviews/WebSwoon/webswoon.html

An dieser Stelle noch mal ein herzliches Dankeschön an alle, die sich mit der
Thematik auseinandergesetzt haben!

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kiffi hat geschrieben: Der Grund: Nach einiger Recherche habe ich ein Freeware-Programm
entdeckt, welches genau das kann, was WebShot mal können sollte
Ist das nicht immer so :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

Hi

erstmal: cooles tool :D

hab aber noch ein problem gefunden:
ich öffne das tool (als test hab ich google genommen)
gib den speicherpfad an und drücke auf "joh, mach mal hinne!" :mrgreen:

das bild wird richtig gespeichert.
da sehe ich aber, dass das viel zu klein ist :|
ok, kein problem, einfach die resizebox ändern.

wenn ich jetzt aber wieder auf den button klicke, (der pfad ist der selbe, und das alte bild ist auch am gleichen platz) dann kommt ne box mit:

TakeWebshot() konnte nicht korrekt ausgeführt werden.

gleichzeitig öffnet sich der downloaddialog mit "google.html"

aber ansonnsten:
Super tool, kann ich sicher gebrauchen :allright:


edit:
sorry, seh erst grad deinen post in dem du sagtest, dass du die entwicklung einstellst :|
-.-"
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

wow, gibts ein source-code von deinem screenshot tool?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> wow, gibts ein source-code von deinem screenshot tool?

natürlich gibt's einen Source-Code, sonst hätte ich ja keine Exe daraus
erstellen können ;-)

Grüße ... Kiffi
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

Kiffi hat geschrieben:> wow, gibts ein source-code von deinem screenshot tool?

natürlich gibt's einen Source-Code, sonst hätte ich ja keine Exe daraus
erstellen können ;-)

Grüße ... Kiffi
*grins* ich glaube du weisst was ich meine... oda? schetze doch mal ^^
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

nee weisa nicht, kiffi is ... :mrgreen:

Nene:

Zu deinem Programm, super tool gefällt mir - allerdings noch ein bisschen buggy... Die Bigs die bisher eingetragen wurden kann ich so fast alle nachvollziehen, aber auch keine zusätzlichen berichten.

Dass du die Entwicklung einstellst ist mir unerklärlich - why?

Wenn - dann kannst du den Source ja einem Interessierten Progger geben, der dein Tool in ehren weiterproggt :allright:

Liebe Grüße
Chris
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@Chris:

> Dass du die Entwicklung einstellst ist mir unerklärlich - why?

Zum einen, weil WebSwoon (s.o.) genau das macht, was ich eigentlich von
so einem Tool erwarte. Normalerweise schreibe ich mir meine Tools, weil
es etwas vergleichbares nicht gibt oder weil ich denke, bestehende Tools
besser (auf meine Bedürfnisse angepasst) realisieren zu können.

Zum anderen: Die liebe Zeit, die ich leider leider nicht habe. Ist ja nicht
so, dass ich sonst nix zu tun habe ;-) Habe halt meine Prioritäten
zugunsten anderer Projekte verschoben.

> Wenn - dann kannst du den Source ja einem Interessierten Progger geben,
> der dein Tool in ehren weiterproggt :allright:

das wäre in der Tat sehr nett. Allerdings bezweifel ich, dass sich hier
jemand findet, der das Projekt weiterführt.

@onny:

>*grins* ich glaube du weisst was ich meine...

ja, klar weiss ich, was Du meinst ;-)

[mal kurz in den archivkeller geh]

OK, hier der Code für PB4. Ist allerdings ohne aufrufendes Fenster (ist
aber schnell nachprogrammiert) und ohne Kommentare.

Code: Alles auswählen

EnableExplicit

Enumeration
  #frmSnapShot
  #frmSnapShot_WB
EndEnumeration

Enumeration
  #DVASPECT_CONTENT    = 1
  #DVASPECT_THUMBNAIL  = 2
  #DVASPECT_ICON       = 4
  #DVASPECT_DOCPRINT   = 8
EndEnumeration

Procedure.l TakeWebSnapshot(URL$, WBWidth.l, WBHeight.l, Filename$, ThumbWidth.l, ThumbHeight.l, ThumbRatio.f)
  
  Define.IWebBrowser2   m_pWebBrowser
  
  Define.IHTMLDocument2 pDocument
  Define.IHTMLDocument3 pDocument3
  Define.IHTMLElement   pElement
  Define.IHTMLElement2  pElement2
  Define.IDispatch      pDispatch
  Define.IViewObject2   pViewObject
  
  Define.l bodyHeight
  Define.l bodyWidth
  Define.l rootHeight
  Define.l rootWidth
  
  Define.RECT rcBounds
  
  Define.l bolFlag
  Define.l IsBusy
  Define.l hr
  
  bolFlag = #False
  
  If OpenWindow(#frmSnapShot, 0, 0, 0, 0, "", #PB_Window_Invisible | #PB_Window_BorderLess)
    
    If CreateGadgetList(WindowID(#frmSnapShot))
      
      WebGadget(#frmSnapShot_WB, 0, 0, 0, 0, URL$)
      
      m_pWebBrowser = GetWindowLong_(GadgetID(#frmSnapShot_WB), #GWL_USERDATA)
      
      Repeat
        m_pWebBrowser\get_Busy(@IsBusy)
        Delay(1)
        While WindowEvent(): Wend
      Until IsBusy = 0
      
      ; hr = m_pWebBrowser->get_Document(&pDispatch);
      hr = m_pWebBrowser\get_document(@pDispatch)
      If hr = #S_OK
        If pDispatch
          
          ; hr = pDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&pDocument);
          hr = pDispatch\QueryInterface(?IID_IHTMLDocument2, @pDocument)
          If hr = #S_OK
            If pDocument
              
              ; hr = pDocument->get_body(&pElement);
              hr = pDocument\get_body(@pElement)
              If hr = #S_OK
                If pElement
                  
                  ; hr = pElement->QueryInterface(IID_IHTMLElement2, (void**)&pElement2);
                  hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2)
                  If hr = #S_OK
                    If pElement2
                      
                      ; hr = pElement2->get_scrollHeight(&bodyHeight);
                      hr = pElement2\get_scrollHeight(@bodyHeight)
                      If hr = #S_OK
                        
                        Debug "bodyHeight: " + Str(bodyHeight)
                        
                        ; hr = pElement2->get_scrollWidth(&bodyWidth);
                        hr = pElement2\get_scrollWidth(@bodyWidth)
                        If hr = #S_OK
                          
                          Debug "bodyWidth: " + Str(bodyWidth)
                          
                          ; hr = pDispatch->QueryInterface(IID_IHTMLDocument3, (void**)&pDocument3);
                          hr = pDispatch\QueryInterface(?IID_IHTMLDocument3, @pDocument3)
                          If hr = #S_OK
                            If pDocument3
                              
                              ; hr = pDocument3->get_documentElement(&pElement);
                              hr = pDocument3\get_documentElement(@pElement)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                              
                              ; hr = pElement->QueryInterface(IID_IHTMLElement2, (void**)&pElement2);
                              hr = pElement\QueryInterface(?IID_IHTMLElement2, @pElement2)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                              
                              ; hr = pElement2->get_scrollHeight(&rootHeight);
                              hr = pElement2\get_scrollHeight(@rootHeight)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                              
                              Debug "rootHeight: " + Str(rootHeight)
                              
                              ; hr = pElement2->get_scrollWidth(&rootWidth);
                              hr = pElement2\get_scrollWidth(@rootWidth)
                              If hr <> #S_OK : ProcedureReturn #False : EndIf
                              
                              Debug "rootWidth: " + Str(rootWidth)
                              
                              Define.l Width
                              Define.l Height
                              
                              Width = bodyWidth
                              ; If rootWidth > bodyWidth : Width = rootWidth : EndIf
                              
                              Height = bodyHeight
                              ; If rootHeight > bodyHeight : Height = rootHeight : EndIf
                              
                              Width + 22
                              
                              If WBHeight > 0 : Height = WBHeight : EndIf
                              
                              If WBWidth > 0 : Width = WBWidth : EndIf
                              
                              ResizeGadget(#frmSnapShot_WB, 0, 0, Width, Height)
                              
                              ; hr = m_pWebBrowser->QueryInterface(IID_IViewObject2, (void**)&pViewObject);
                              hr = m_pWebBrowser\QueryInterface(?IID_IViewObject2, @pViewObject)
                              If hr = #S_OK
                                If pViewObject
                                  
                                  Define.l hdcMain
                                  
                                  hdcMain = GetDC_(0)
                                  If hdcMain
                                    
                                    Define.l hdcMem
                                    
                                    hdcMem  = CreateCompatibleDC_(hdcMain)
                                    If hdcMem
                                      
                                      Define.l hBitmap
                                      
                                      hBitmap = CreateCompatibleBitmap_(hdcMain, Width, Height)
                                      If hBitmap
                                        
                                        Define.l oldImage
                                        
                                        oldImage = SelectObject_(hdcMem, hBitmap)
                                        
                                        rcBounds\top = 0
                                        rcBounds\left = 0
                                        rcBounds\right = Width
                                        rcBounds\bottom = Height
                                        
                                        pViewObject\Draw(#DVASPECT_CONTENT, -1, 0, 0, hdcMain, hdcMem, rcBounds, 0, 0, 0)
                                        
                                        Define.l Image
                                        
                                        Image = CreateImage(#PB_Any, Width, Height)
                                        If Image
                                          
                                          Define.l img_hDC
                                          
                                          img_hDC = StartDrawing(ImageOutput(Image))
                                          If img_hDC
                                            BitBlt_(img_hDC, 0, 0, Width, Height, hdcMem, 0, 0, #SRCCOPY)
                                            StopDrawing()
                                            If ThumbRatio > 0
                                              ResizeImage(Image, Width*ThumbRatio, Height*ThumbRatio, #PB_Image_Smooth)
                                            Else
                                              ResizeImage(Image, ThumbWidth, ThumbHeight, #PB_Image_Smooth)
                                            EndIf
                                            SaveImage(Image,Filename$,#PB_ImagePlugin_BMP)
                                            bolFlag = #True
                                          EndIf ; img_hDC
                                          FreeImage(Image)
                                        EndIf ; Image
                                        
                                        SelectObject_(hdcMem, oldImage)
                                        
                                      EndIf ; hBitmap
                                      
                                      DeleteDC_(hdcMem) ; DeleteDC_() bei CreateCompatibleDC_()
                                    EndIf ; hdcMem
                                    
                                    ReleaseDC_(0, hdcMain) ; ReleaseDC_() bei GetDC_()
                                  EndIf ; hdcMain
                                  
                                  pViewObject\Release()
                                EndIf ; pViewObject
                              EndIf; HR
                              
                              pDocument3\Release()
                            EndIf ; pDocument3
                          EndIf ; HR
                          
                        EndIf ; HR
                        
                      EndIf ; HR
                      
                      pElement2\Release()
                    EndIf ; pElement2
                  EndIf ; HR
                  
                  pElement\Release()
                EndIf ; pElement
              EndIf ; HR
              
              pDocument\Release()
            EndIf ; pDocument
          EndIf ; HR
          
          pDispatch\Release()
        EndIf ; pDispatch
      EndIf ; HR
      
      CloseWindow(#frmSnapShot)
      
    EndIf
  EndIf
  
  ProcedureReturn bolFlag
  
EndProcedure

Procedure TakeWebSnapshot_test()
  
  Define.s URL$
  Define.s SaveAs$
  Define.f ResizeFaktor
  
  Define.l WBWidth
  Define.l WBHeight
  
  URL$           = "http://www.purebasic.com" ; GetGadgetText(gadget(#frmMain_txtURL))
  SaveAs$        = "c:\webshot.bmp"           ; GetGadgetText(gadget(#frmMain_txtSaveAs))
  ResizeFaktor.f = 0.5                        ; ValF(GetGadgetText(gadget(#frmMain_txtResizeFaktor)))
  
  If ResizeFaktor = 0 : ResizeFaktor = 1.0 : EndIf
  If ResizeFaktor < 0 : ResizeFaktor = 0.1 : EndIf
  If ResizeFaktor > 2 : ResizeFaktor = 2.0 : EndIf
  
  ExamineDesktops()
  WBWidth = DesktopWidth(0)
  WBHeight = DesktopHeight(0)
  
  If TakeWebSnapshot(URL$, WBWidth, WBHeight, SaveAs$, 0, 0, ResizeFaktor)
    RunProgram(SaveAs$)
  Else
    MessageRequester("WebShot", "TakeWebSnapshot() konnte nicht korrekt ausgeführt werden")
  EndIf
  
EndProcedure

TakeWebSnapshot_test()

End


DataSection ;{

IID_IHTMLDocument2:
    ;332C4425-26CB-11D0-B483-00C04FD90119
Data.l $332C4425
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19

IID_IHTMLDocument3:
    ;3050F485-98B5-11CF-BB82-00AA00BDCE0B
Data.l $3050F485
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B

IID_IHTMLElement2:
    ;3050f434-98b5-11cf-bb82-00aa00bdce0b
Data.l $3050F434
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B

IID_IViewObject2:
    ;00000127-0000-0000-c000-000000000046
Data.l $00000127
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46


EndDataSection ;}
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

cool danke, aber warum pb 4.0 *will auch hab*
na ja erstma tft kaufen dann pb 4.0 ;-)
ich denke es lohnt sich pb 4.0 zu kaufen.
hab mir den quellcode noch nich richtig angesehen, werde es noch machen, aber ne kurze frage: ist es ein großer unterschied zu älteren pb versionen, ich meine, schafft das so ein n00b wie ich ihn umzuschreiben??
o.O
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> cool danke, aber warum pb 4.0

warum nicht? ;-)

> aber ne kurze frage: ist es ein großer unterschied zu älteren pb versionen,
> ich meine, schafft das so ein n00b wie ich ihn umzuschreiben??

kein Problem: Das EnableExplicit und die Define-Klamotten weg, Title- und
Flags-Parameter bei OpenWindow() vertauschen und das dürfte es dann
gewesen sein.

Falls noch Probleme sind: Frag einfach!

Grüße ... Kiffi

P.S.: Schreib doch bitte Deine PB-Version in Deine Signatur.
Antworten