[Release]Screenshot - Tool

06/14/2011 02:23 Reeek#1
Hey,
da ich ewig nach soeinem Programm gesucht habe, aber kein passendes gefunden habe, habe ich es mir selbst geschrieben:
ein Screenshottool.

Was macht es?

Wer kennt das nicht - man ist mitten in einem Game und wird beleidigt. Schnell Screen machen, den man später bei Paint einfügen will und zu den Admins schicken, da sieht man aber was ganz tolles und screent erneut. Folge: Der erste Screen ist weg. Plötzlich fällt dir ein, dass du vor den Screens einen ganz wichtigen Text kopiert hattest. Der ist jetzt natürlich auch weg. Deprimiert trittst du gegen den Ausschalter deines PCs und er fährt runter. Folge: dein Screen mit der ganz tollen Sache ist weg!



All diese Probleme sind ganz einfach zu beheben. Einfach mein Tool öffnen, in den Autostart packen und fertig. Keine GUI, keine config, garnichts.

Was genau macht es?

Mein Programm überprüft, ob die Druck-Taste gedrückt wird, also die Taste für Screenshots. Falls sie gedrückt wird, speichert es den aktuellen Inhalt des Zwischenspeichers zwischen, erstellt eine .bmp-Datei mit deinem aktuellen Bildschirminhalt (Originalqualität!) und fügt den ehemaligen Zwischenspeicherinhalt wieder in den Zwischenspeicher. Der fertige Screenshot wird im Ordner "Eigene Dateien\Screenshots" gespeichert und trägt als Namen das aktuelle Datum + eine täglich bei 1 beginnende, aufsteigende Zahl.

(Wenn ihr z.B. am 01.04.2011 vier Screenis erstellt, findet ihr im Ordner vier Dateien:

01.04.2011 - 1.bmp
01.04.2011 - 2.bmp
01.04.2011 - 3.bmp
01.04.2011 - 4.bmp)

Source:

PHP Code:
#include <Clipboard.au3>
#include <misc.au3>
#notrayicon
$i 1
while 1
    sleep
(10)
    If 
_IsPressed("2C"Then
    _ClipBoard_GetData
(8)
    
$data="0x424d000000000000000036000000"&stringtrimleft_clipboard_getdata(8),2)
        while 
1
            $test 
FileExists(@MyDocumentsDir&"\Screenshots\"&@MDAY&"."&@MON&"."&@YEAR&" "& $i &".bmp")
            If 
$test = 1 Then
                
$i = $i + 1
                
$test = FileExists(@MyDocumentsDir&"\Screenshots\"&@MDAY&"."&@MON&"."&@YEAR&" "& $i &".bmp")
            Else
                
$file=fileopen(@MyDocumentsDir&"\Screenshots\"&@MDAY&"."&@MON&"."&@YEAR&" "& $i &".bmp",18)
                filewrite(
$file,$data)
                fileclose(
$file)
                _ClipBoard_SetData(
$safe)
                
$i = 1
                ExitLoop(1)
            EndIf
        WEnd
    Else
    
$safe = _ClipBoard_GetData()
    EndIf
WEnd 
Im Anhang die fertige .exe, davon der Virustotal: [Only registered and activated users can see links. Click Here To Register...]
(die üblichen Schrottvirenscanner :rolleyes:)

Habe die Datei seit mehreren Tagen im Autostart, hat nie Probleme gegeben oder ähnliches.

Gruß
06/14/2011 09:55 Ludder231#2
Hab mir auch einen gemacht :)
06/14/2011 17:43 | Moep |#3
Google mal nach FSCapture
06/14/2011 17:53 BlackHybrid#4
Quote:
Originally Posted by | Moep | View Post
Google mal nach FSCapture
Oder schau mal _ScreenCapture_Capture in der Helpfile an.
06/14/2011 18:30 Reeek#5
_ScreenCapture_Capture gibt totalen Mist aus! Die Qualität ist sowas von mies, da benutze ich lieber 10 Zeilen mehr!

FSCapture hat eine GUI, das stört mich ;D
06/14/2011 18:55 BlackHybrid#6
Also bei mir ist die Quallität von _ScreenCapture_Capture nicht auffällig schlächter als die von normalen Screenshots.
06/14/2011 19:51 flyffer2222#7
Nice ^^ Jetzt muss ich mir das nich selber machen danke!^^
06/15/2011 01:42 Whoknowsit#8
Ich hätte es so (oder so ähnlich) gemacht:

Code:
#include <ScreenCapture.au3>
#include <Clipboard.au3>
#include <misc.au3>
#notrayicon

$i = 1
$folder = @MyDocumentsDir & "\Screenshots\"

while 1
	sleep(10)

	Global $safe

	If _IsPressed("2C") Then
		If Not fileexists($folder) then
			DirCreate($folder)
		EndIf

		while 1
			$filename = "ScrnShot_" & @MDAY & @MON & StringRight(@YEAR, 2) & "_" & $i & ".jpg"
			$test = FileExists($folder & $filename)
            
			If $test = 1 Then
				$i = $i + 1
				$test = FileExists($folder & $filename)
			Else
				$hBmp = _ScreenCapture_Capture("")
				If Not @error Then _ScreenCapture_SaveImage($folder & $filename , $hBmp)
				_ClipBoard_SetData($safe)
				ExitLoop(1)
			EndIf
		WEnd
	Else
		$safe = _ClipBoard_GetData()
	EndIf
WEnd
Aber die Idee ist ganz nett :)
06/15/2011 18:07 Reeek#9
screencapture_capture hat wie gesagt schlechtere Qualität... und wenn man schon mit der Funktion arbeitet, würde ich nicht _IsPressed, sondern Hotkey verwenden, da man so die ganze $safe-Sache nicht braucht, da die Druck-Taste komplett... "gehookt" wird, also es wird kein Screeni erstellt. Hatte ich zuerst auch so, aber wenn ich schon Screens mache, dann doch bitte in Originalqualität ;)
06/15/2011 19:08 Whoknowsit#10
Ich sehe keinen Unterschied zwischen dem von dir erstellten Screen und dem, der durch screencapture_capture erstellt wird.

Mit dem Rest hast du Recht ;)

Code:
#include <ScreenCapture.au3>
#include <Clipboard.au3>
#include <misc.au3>
#notrayicon

while 1
	HotKeySet("{PRINTSCREEN}", "doScreen")
WEnd

func doScreen()
	$i = 1
	$folder = @MyDocumentsDir & "\Screenshots\"

	sleep(10)

	If Not fileexists($folder) then
		DirCreate($folder)
	EndIf

	while 1
		$filename = "ScrnShot_" & @MDAY & @MON & StringRight(@YEAR, 2) & "_" & $i & ".jpg"
		$test = FileExists($folder & $filename)

		If $test = 1 Then
			$i = $i + 1
			$test = FileExists($folder & $filename)
		Else
			$hBmp = _ScreenCapture_Capture("")
			If Not @error Then _ScreenCapture_SaveImage($folder & $filename , $hBmp)
			ExitLoop(1)
		EndIf
	WEnd
EndFunc
06/15/2011 19:39 Reeek#11
gerade nochmal getestet, ist ein großer Unterschied ;D

im Windows Picture Viewer zwar nicht, da beide skaliert werden, aber öffne mal mit Paint und zoome auf Schrift oder buntes... gerade die Farben werden nicht original dargestellt. Hier mal 2 Bilder (beide vom SciTe), eins mit meinem Code und eins mit deinem.



schon allein die Größe der Dateien schreibt ein Buch: "Meine" Screens sind >6MB groß, "deine" gerade mal 360kb. Klar, sind andere Formate, aber so ein Unterschied muss sich in der Qualität wiederspiegeln, was er ja auch tut.



EDIT: kann mein Bild nichtmal hochladen, zu groß für alle Bilderhoster xD musst mir einfach glauben, "meine" Qualität ist besser.
06/15/2011 21:11 Whoknowsit#12
Recht hast du. Die Qualität ist nicht die tollste... Aber kein unlösbares Problem :)

Code:
#include <ScreenCapture.au3>
#include <Clipboard.au3>
#include <misc.au3>
#notrayicon

while 1
	HotKeySet("{PRINTSCREEN}", "doScreen")
WEnd

func doScreen()
	$i = 1
	$folder = @MyDocumentsDir & "\Screenshots\"

	sleep(10)

	If Not fileexists($folder) then
		DirCreate($folder)
	EndIf

	while 1
		$filename = "ScrnShot_" & @MDAY & @MON & StringRight(@YEAR, 2) & "_" & $i & ".bmp"
		$test = FileExists($folder & $filename)

		If $test = 1 Then
			$i = $i + 1
			$test = FileExists($folder & $filename)
		Else
			_ScreenCapture_SetBMPFormat(4)
			$hBmp = _ScreenCapture_Capture("")
			If Not @error Then _ScreenCapture_SaveImage($folder & $filename , $hBmp)
			ExitLoop(1)
		EndIf
	WEnd
EndFunc
Wobei die Verwendung von _ScreenCapture_SetBMPFormat(4) garnicht mal nötig wäre. Das Speichern im Bitmap oder Tif-Format sorgt für Originalqualität.
06/15/2011 23:48 Reeek#13
okay, das wusste ich nicht... nja, viele Wege führen nach Rom ;D