| |
|
|
- Seite 1 - |
|
Dietmar Horn | Hallo,
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.
Gruß 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 ▲ |
|
|
|
|
| |
|
- Seite 2 - |
|
Frank Abbing | |
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
| 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. für mich das beste Screenshot-Tool "auf Welt".
So wie mein Lineal, hach ich liebe mein Lineal... |
|
|
| |
|
|
|
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... |
|
|
| |
|
|
|
Frank Abbing | |
|
| |
|
|
|
| Leider nicht, schau mal:
|
|
|
| |
|
|
|
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
|
|
|
| |
|
|
|
| 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 für das zu zeichnende Icon zu errechnen.
Geht das alles nicht irgendwie einfacher? |
|
|
| |
|
|
|
Frank Abbing | Auch da dürfte 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... |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
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(). |
|
|
| |
|
|
| |
|
- Seite 3 - |
|
|
Frank Abbing | Hier der komplette Code. Der Dateiname für 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
|
|
|
| |
|
|