Italia
Stammtisch & Caffè

ScreenShot-Tool

 
- Page 1 -



Dietmar
Horn
Ciao,

kennt jemand ein ScreenShot-Programm, mit dem man nicht nur das aktive Haupfenster abfotografieren kann, sondern welches auch den jeweils verwendeten Mauszeiger mit anzeigt? Vor -zig Jahren hatte ich sowas schon mal gehabt, finde es aber leider nicht mehr.

Für mein XProfan-Lehrbuch-Projekt verwende ich das kleine Progrämmchen "FastStone Capture" (im XProfan-Manager enthalten), welches so gut wie keine Wünsche offenläßt. Nur den Mauszeiger fotografiert es eben leider (optinal) nicht mit.

Saluto
Dietmar
 
Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V.  [...] 

Windows 95 bis Windows 7
Profan² 6.6 bis XProfan X2 mit XPSE

Das große XProfan-Lehrbuch:  [...] 
29.11.2008  
 



 
- Page 2 -



Frank
Abbing
Das hier klappt zumindest wunderbar:
KompilierenMarkierenSeparieren
Um den Cursor des eigenen Prozess zu ermitteln gibt es ja auch die API GetCursor().
 
01.12.2008  
 



Ich glaube Du kannst darüber nicht immer ermitteln, welcher Cursor grade angezeigt wird, zum Beispiel wenn ein anderer Prozess den Cursor selbst definiert.

Vielleicht wirklich einfach mal 2 xprfs die ein static auf hWnd erzeugen, beiden per SetClassLong einen bestimmten Wert zuweisen, und gegenseitig abprüfen. Ich glaube nämlich das klappt nicht.
 
01.12.2008  
 



Nachtrag: Vielleicht war MS auch so nett, und schleift einen "globalen" hCursor irgendwo durch, und vielleicht auch in GetClassLong(GetDesktopWindow(),GCL_HCURSOR) - aber das wäre halt zu prüfen, ob dieser auch z.B. Childs beachtet.

Ich würds aber auch toll finden zu wissen, wie es tatsächlich klappt. Wäre sofort in "Programme" eine Trayicon-Variante abgelegt, die auf ein Hotkey reagiert, und einfach immer nur PNG auf Desktop ablegt.

Das wäre dann z.B. per mich das beste Screenshot-Tool "auf Welt".

So wie mein Lineal, hach ich liebe mein Lineal...
 
01.12.2008  
 




Normann
Strübli
@Dietmar

[...]  (vbcapture mit Demo)
[...]  (screenhunter Download von chip.de, wie gesagt programm nicht getestet)

Sollte funktionieren, obwohl die Links aus meinem ersten Post bei mir auch gehen...
 
01.12.2008  
 




Frank
Abbing
iF, es ist einfach den aktuellen Cursor zu ermitteln, verrenn dich doch nicht. Teste das mal:
KompilierenMarkierenSeparieren
 {$iq}
Declare x&,ilist&
x&=GetClassLong(GetActiveWindow(),GCL_HCURSOR)
ilist&=Create("ImageList", 32, 32)
ImageList("AddIcon", ilist&, x&)
Cls

Whileloop 1000

    DrawIcon ilist&, 0, Rnd(%maxx), Rnd(%maxy)

EndWhile

WaitInput
DeleteObject ilist&
End
 
01.12.2008  
 



Leider nicht, schau mal:


no.png  
3 kB
Hochgeladen:01.12.2008
Downloadcounter121
Download
 
01.12.2008  
 




Frank
Abbing
Ok, hier ist ein besserer Code. Der hat bei meinen Tests jeden Zeiger gesnappt, ausser den von Editfeldern:
KompilierenMarkierenSeparieren
 {$iq}
Declare cur&,bereich#,a&,b&,x&,ilist&
Dim bereich#,256
Clear bereich#
Long bereich#,0=20
GetCursorInfo(bereich#)
x&=Long(bereich#,8)
a&=GetSystemMetrics(SM_CXCURSOR)
b&=GetSystemMetrics(SM_CYCURSOR)
ilist&=Create("ImageList", a&, b&)
ImageList("AddIcon", ilist&, x&)
Cls

Whileloop 1000

    DrawIcon ilist&, 0, Rnd(%maxx), Rnd(%maxy)

EndWhile

WaitInput
DeleteObject ilist&
Dispose bereich#
End
 
01.12.2008  
 



Das Zeigerfinden klappt damit ganz gut, und es ergibt sich ein neues Problem.

Die Cursor haben einen gesetzten "HotSpot" - dessen XY zu ermitteln ist wohl auch nötig, um die korrekte Position per das zu zeichnende Icon zu errechnen.

Geht das alles nicht irgendwie einfacher?
 
01.12.2008  
 




Frank
Abbing
Auch da potrebbe GetCursorInfo hilfreich sein. Schau mal in die Struktur bei ptScreenPos.

Nachtrag: MS schreibt zu der API GetCursor:

Windows 98 and Windows NT 4.0 SP3 and later: To get information on the global cursor, even if it is not owned by the current thread, use GetCursorInfo.

.
Funktioniert ja auch wunderbar. Warum das gerade in Editboxen nicht klappt weiss ich leider nicht. Kann nur vermuten, dass dort ein anderes Zeigermedium genutzt wird und der eigentliche Mauszeiger unsichtbar ist...
 
01.12.2008  
 



Nicht die Cursorposition, sondern die Position des gesetzten Hotspot/Mittelpunkt im Icon welchen man eben von mouse.x und mouse.y subtrahieren muss, vor dem Zeichnen des Icons.
 
01.12.2008  
 




Frank
Abbing
iF
Nicht die Cursorposition, sondern die Position des gesetzten Hotspot/Mittelpunkt im Icon welchen man eben von mouse.x und mouse.y subtrahieren muss, vor dem Zeichnen des Icons.


Die liefert dir die API GetIconInfo().
 
02.12.2008  
 



 
- Page 3 -



Frank
Abbing
Hier der komplette Code. Der Dateiname per das Bild sollte angepasst werden oder wählbar gemacht werden:
KompilierenMarkierenSeparieren
 {$iq}
Declare cur&,bereich#,a&,b&,x&,ilist&
Dim bereich#,256

Proc Screenshot

    Parameters dname$
    Declare Hdc&
    Declare Hmdc&
    Declare Hbitmap&
    Declare maxX%, maxY%
    maxX%=%maxX
    maxY%=%maxY
    Hdc&=GetDC(0)
    Hmdc&=CreateCompatibleDC(hdc&)
    Hbitmap&=CreateCompatibleBitmap(hdc&,maxX%,maxY%)
    SelectObject(hmdc&,hbitmap&)
    BitBlt(hmdc&,0,0,maxX%,maxY%,hdc&,0,0,$0CC0020)
    ImageList_Draw(ilist&, 0, hmdc&, a&, b&, ILD_NORMAL)
    SavePic dname$, Hbitmap&
    DeleteObject hbitmap&
    DeleteDC(hmdc&)
    ReleaseDC(0,hdc&)

Endproc

Clear bereich#
Long bereich#,0=20
GetCursorInfo(bereich#)

If Long(bereich#,4)

    x&=Long(bereich#,8)
    a&=GetSystemMetrics(SM_CXCURSOR)
    b&=GetSystemMetrics(SM_CYCURSOR)
    ilist&=Create("ImageList", a&, b&)
    ImageList("AddIcon", ilist&, x&)
    a&=Long(bereich#,12)
    b&=Long(bereich#,16)
    Clear bereich#
    GetIconInfo(x&,bereich#)
    a&=a&-Long(bereich#,4)
    b&=b&-Long(bereich#,8)
    Screenshot("C://___Testpic.png")
    WaitInput
    DeleteObject ilist&

EndIf

Dispose bereich#
End
 
02.12.2008  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

9.712 Views

Untitledvor 0 min.
Tommy10.08.2016
Georg Teles09.07.2015
Paul Glatz10.05.2013
Julian Schmidt15.09.2012
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie