Laden...

Screen Capture Tool

Erstellt von Quallo vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.597 Views
Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren
Screen Capture Tool

Gibt es ein Tool um den Bildschirm abzufilmen(Screen Capture Tool) als Freeware oder OpenSource? Bzw. welche kostenpflichtigen gibt es, die etwas taugen?

Hintergrund: Wenn bei Kunden Fehler auftreten, kann man die oft nicht nachvollziehen. Es gibt zwar teilweise eine detaillierte Beschreibung des Fehlers, aber es gibt bei unseren Programmen meistens 3-5 Wege(z.B. nur Maus, nur Tastatur oder beides) um eine Funktion zu starten.
Ideal wäre also ein Tool, das man fertig konfiguriert zum Kunden schickt(per Email zum Beispiel, oder von Anfang an auf der Produkt-CD) und womit er dann das Prozedere aufnimmt, das zum Fehler führt.

Grüße Christoph

S
8.746 Beiträge seit 2005
vor 18 Jahren

Bei CodeProject gab es mal ein Projekt, welches sich als UnhandleException-Handler (kann auch Handled) einklinkt, eine wirklich schöne MessageBox dem User präsentiert, zuvor einen Screenshots macht und die Fehlerbeschreibung inkl. StackTrace und weiteren Infos und Screenshot als Mail verschickt.

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Netter Tip für .Net Programme.
Das Problem ist, dass es keine .Net-Programme sind, bei denen die Fehler durch dieses Tool getestet werden sollen, sondern stinknormale Anwendungen.
Es soll also wirklich ein Video Capturing Tool für den Screen sein.

4.221 Beiträge seit 2005
vor 18 Jahren

Mach Dir doch ein eigenes Tool Quallo (da weiss man was man hat)

Brian Scott hat da schon ne schöne Klasse gemalt
(von mir nicht getestet)


/**********************************************************************************
Shared Source License for Cropper in C#
Copyright 2004 Brian Scott
[URL]http://blogs.geekdojo.net/brian[/URL]

This license governs use of the accompanying software ('Software'), and your
use of the Software constitutes acceptance of this license.

You may use the Software for any commercial or noncommercial purpose,
including distributing derivative works.

In return, we simply require that you agree:
1. Not to remove any copyright or other notices from the Software. 
2. That if you distribute the Software in source code form you do so only
   under this license (i.e. you must include a complete copy of this license
   with your distribution), and if you distribute the Software solely in
   object form you only do so under a license that complies with this
   license.
3. That the Software comes "as is", with no warranties. None whatsoever.
   This means no express, implied or statutory warranty, including without
   limitation, warranties of merchantability or fitness for a particular
   purpose or any warranty of title or non-infringement. Also, you must pass
   this disclaimer on whenever you distribute the Software or derivative
   works.
4. That no contributor to the Software will be liable for any of those types
   of damages known as indirect, special, consequential, or incidental
   related to the Software or this license, to the maximum extent the law
   permits, no matter what legal theory it’s based on. Also, you must pass
   this limitation of liability on whenever you distribute the Software or
   derivative works.
5. That if you sue anyone over patents that you think may apply to the
   Software for a person's use of the Software, your license to the Software
   ends automatically.
6. That the patent rights, if any, granted in this license only apply to the
   Software, not to any derivative works you make.
7. That the Software is subject to U.S. export jurisdiction at the time it
   is licensed to you, and it may be subject to additional export or import
   laws in other places.  You agree to comply with all such laws and
   regulations that may apply to the Software after delivery of the software
   to you.
8. That if you are an agency of the U.S. Government, (i) Software provided
   pursuant to a solicitation issued on or after December 1, 1995, is
   provided with the commercial license rights set forth in this license,
   and (ii) Software provided pursuant to a solicitation issued prior to
   December 1, 1995, is provided with “Restricted Rights” as set forth in
   FAR, 48 C.F.R. 52.227-14 (June 1987) or DFAR, 48 C.F.R. 252.227-7013
   (Oct 1988), as applicable.
9. That your rights under this License end automatically if you breach it in
   any way.
10.That all rights not expressly granted to you in this license are reserved.

\**********************************************************************************/

#region Using Directives

using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Forms;

#endregion

namespace Fusion8Design.Win32
{
	/// <summary>
	/// Class for getting images of the desktop.
	/// </summary>
    /// <threadsafety static="false" instance="false"/>
	/// <note type="caution">This class is not thread safe.</note> 
	/// <remarks>This class has been scaled back to the essentials for capturing a segment of 
	/// the desktop in order to keep Cropper as small as possible.</remarks>
	internal class Desktop
	{
        private const int SRCCOPY = 0x00CC0020;

        #region Dll Imports

		[DllImport("user32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
		static extern IntPtr GetDesktopWindow();

		[DllImport("user32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
		private static extern IntPtr GetWindowDC(IntPtr hwnd);

		[DllImport("user32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
		private static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);
	
		[DllImport("gdi32.dll", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=false)]
		private static extern UInt64 BitBlt
			   (IntPtr hDestDC, int x, int y, int nWidth, int nHeight,
	            IntPtr hSrcDC, int xSrc, int ySrc, System.Int32 dwRop);

        #endregion

		private Desktop(){}

        /// <summary>
        /// Gets a segment of the desktop as an image.
        /// </summary>
        /// <param name="x">Starting point X coordinate.</param>
        /// <param name="y">Starting point Y coordinate.</param>
        /// <param name="width">The width of the area to capture.</param>
        /// <param name="height">The height of the area to capture.</param>
        /// <returns>A <see cref="System.Drawing.Image"/> containg an image of the desktop 
        /// at the specified coordinates</returns>
        internal static Image GetBitmap(int x, int y, int width, int height)
        {
			Graphics desktopGraphics;
			Image desktopImage;
			Graphics drawGraphics;
			Image drawImage;
            Rectangle virtualScreen = SystemInformation.VirtualScreen;

            //Create the image and graphics to capture the desktop.
			//
			using(desktopImage = new Bitmap(virtualScreen.Width, virtualScreen.Height))
			{
				using(desktopGraphics = Graphics.FromImage(desktopImage))
				{
					//Pointers for window handles
					//
					IntPtr ptrDesktop = desktopGraphics.GetHdc();
					IntPtr ptrDesktopWindow = GetDesktopWindow();
					IntPtr ptrWindowDC = GetWindowDC(ptrDesktopWindow);

					//Grap the entire virtual desktop
					//
					BitBlt(ptrDesktop, 
						0, 
						0, 
						virtualScreen.Width, 
						virtualScreen.Height, 
						ptrWindowDC, 
						virtualScreen.X, 
						virtualScreen.Y, 
						SRCCOPY);

					//Release and dispose the graphics object so we have an image to work with.
					//
					ReleaseDC(ptrDesktopWindow, ptrWindowDC);
					desktopGraphics.ReleaseHdc(ptrDesktop);
					
					//Set pointers to zero.
					//
					ptrDesktop = IntPtr.Zero;
					ptrDesktopWindow = IntPtr.Zero;
					ptrWindowDC = IntPtr.Zero;
				}

				//Create a new image and graphics object the size we want so we can 'crop' it out of the desktop.
				//
				drawImage = new Bitmap(width, height);
				using(drawGraphics = Graphics.FromImage(drawImage))
				{
					//Draw the area of the desktop we want into the new image.
					//
					drawGraphics.DrawImage(
						desktopImage,
						new Rectangle(new Point(0,0), new Size(width, height)), 
						new Rectangle((virtualScreen.X - x) *-1, (virtualScreen.Y - y) *-1, width, height),
						GraphicsUnit.Pixel);

				}
			}

            //Return a referance to our image.  
			//Don't forget to dispose it in the client code when finished.
			//You will have memory leaks if not.
			//
            return drawImage;
		}
	}
}



Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

S
8.746 Beiträge seit 2005
vor 18 Jahren

Brauchst du Screen-Shots oder Screen-Filme? Für ersteres gibts auf der aktuellen c't nen nettes Full-Version-Tool, welches Screenshots auch von OpelGL/DirectX-Schirmen macht, was wohl sonst Probleme bereitet.

Bei Filmen gibts wohl Dinger, die auf GDI-Basis arbeiten und andere, welche echtes Video-Format machen (Fraps sei mal als bekanntester Kandidat genannt), allerdings alles kein Freeware.

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Ich brauche Screen-Filme.

Ich denke mal, dass selber machen immer teurer ist als kaufen!
Aber mal sehen, wenn ihr mir sagt, wie ich aus den Bildern schnell ne AVi-Sequenz baue g!
Das Problem ist, dass unsere Kunden größtenteils das Framework nicht drauf haben.

1.985 Beiträge seit 2004
vor 18 Jahren

Hallo Quallo,

mal eine andere Frage: Wie sieht es mit dem Datenschutz aus? Bei uns ist es auch so, das Fehler teilweise nicht nachvollzogen werden können bzw. das eine Menge Arbeit bereitet. Wenn wir den Kunden aber sagen würden, dass wir jetzt Filme von den Arbeitsschritten aufzeichen, um die Fehler nachvollziehen zu können, würden diese uns die Hölle heiß machen.

Sowas wäre in meinem Umfeld ein Unding.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo Fabian!

Ich gehe mal davon aus, dass Quallo dem User eine Möglichkeit bieten möchte, dass dieser den Fehler reproduzieren kann. Also der User schaltet hier jetzt auf "Aufnahme..." und dann wieder auf "Stopp...".

Hoffe ich zumindest, denn ansonsten lieber Quallo muss ich dem Fabian Recht geben, ein Mitschnitt jeglicher Art, ohne dass der betroffene das weiß, ist strafrechtlich illegal.

Das geht sogar soweit, dass z.B. der Arbeitgeber zunächst KEINE E-Mails lesen darf, obwohl normalerweise alles über den Proxie geht, und die Möglichkeit hierzu da ist...

Also bitte so etwas berücksichtigen!

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Das sollte doch eigentlich aus dem ersten Post erkenntlich sein, oder?

Hintergrund: Wenn bei Kunden Fehler auftreten, kann man die oft nicht nachvollziehen. Es gibt zwar teilweise eine detaillierte Beschreibung des Fehlers, aber es gibt bei unseren Programmen meistens 3-5 Wege(z.B. nur Maus, nur Tastatur oder beides) um eine Funktion zu starten.
Ideal wäre also ein Tool, das man fertig konfiguriert zum Kunden schickt(per Email zum Beispiel, oder von Anfang an auf der Produkt-CD) und womit er dann das Prozedere aufnimmt, das zum Fehler führt.

Es ist so wie Norman_Timo vermutet:

Ich gehe mal davon aus, dass Quallo dem User eine Möglichkeit bieten möchte, dass dieser den Fehler reproduzieren kann. Also der User schaltet hier jetzt auf "Aufnahme..." und dann wieder auf "Stopp...".

Keine Angst, wir sind ein seriöses Unternehmen. Das sollte man im Bereich der Finanzbuchhaltung auch sein!

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Quallo,

siehe Verweis auf entsprechendes Tool in TreeView Umgang & Design

Eine Beispielvideo ist in dem genannten Thread auch gleich drin.

herbivore

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Danke für diesen Hinweis, aber Camtasia ist zwar super, aber dem Kunden zu erklären, dass er das komplette Paket installieren muss ist doch ein wenig happig.

200 Beiträge seit 2004
vor 18 Jahren

Hallo @Quallo,

also mal ganz offen gesprochen:

"Wenn ich eine Software bekommen würde (ob kaufen oder nicht) bei der im Falle eines Fehlers eine Screencapture-App losrennen würde die meine Grafikkarte gar nicht unterstützt oder meinen begrenzten Arbeitsspeicher völlig in die Knie zwingt, würde ich Euch das Ding um die Ohren hauhen (ist nicht böse gemeint aber ernst!)"

Wie wäre es denn mit einem sauberen Fehlertracing in Euren Programmen? Dazu gibt es sehr viele Berichte. Sowohl im Internet als auch in bekannten Fachzeitschirften und oder Büchern. Komponenten gibt es auch genügend dazu. Fehlertracing und Fehlerberichterstattung sind sehr wichtige Bestandteile einer guten Software. Sie sollte sich aber vor allem durch Unauffälligkeit auszeichnen und nicht durch tolle Filmchen!

In der Firma in der ich arbeite war eine meiner ersten Aufgaben eine hoch performante Trace-Komponente zu schreiben. Und wenn ich das vor 4 Jahren als Praktikant geschafft habe, sollte es für Euch auch kein Problem sein. Oder 😁 🤔

Gruß

TOM_MUE

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo!

Als Alternativ-Vorschlag (und so machen wir das normalerweise in unserer Firma) erklären wir dem Kunden, dass entweder jemand vorbeikommt, oder er ein Zugang zum Rechner öffnet per PC-Anyware, VNC etc...

Dann schalten wir per Desktop-Remoting zu diesem Rechner, und der Kunde führt uns vor wie der Fehler entsteht. Daraufhin reagieren wir dann entsprechend, indem wirdirekt mit dieser Kommunikation den Fehler beheben, oder wir arbeiten dann bei uns in der Firma und schicken dementsprechend einen Patch.

Als Film-Aufzeichnen Software kann ich hier unter anderem genannten auch Snaggit empfehlen (das ist normalerweise ein Screenshot-Macher, aber es gibt hier auch Videoaufnahme, eventuell hat das dann einen anderen Produktnamen).

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Es handelt sich nicht um ein .Net Programm, sondern um ein Cobol-Programm.

Ich glaube es gibt kaum eine Firma die besseren(größtenteils kostenlosen) Support bietet. (Das geht soweit, dass wir einen komplett ausgerüsteteten Ersatzrechner vorbeibringen und den Rechner des Kunden mitnehmen um den Fehler genau zu untersuchen, kostenlos natürlich.)

Wir liefern mit jedem Programm ein Programm ähnlich VNC aus um dem Kunden zur Hand zu gehen.

Um zu protokollieren wann was passiert und was genau gemacht wird, ist es aber praktisch Dinge aufzuzeichnen, bevor ein Fehler auftritt.

Das Programm wird bestimmt nicht bei einem Fehler losrennen, sondern nur wenn der Kunde das selber auf Anforderung des Supports startet, das habe ich doch geschrieben.

Es geht nur bei Fehlern die schlecht beschrieben sind oder die wir nicht nachvollziehen können darum schnell zu sehen(per Video) was gemacht wurde. Es ist für den Kunden auch weniger Aufwand, eben kurz per Video aufzuzeichnen was er macht als einen seitenlangen Bericht zu machen.
Wir machen nicht irgendwelche billige Software, für die es Alternativen gibt, wir statten Steuerberatungskanzleien mit kompletten Softwarelösungen aus. Wenn da was nicht läuft können ganze Betriebe still stehen(aber das ist meines Erachtens noch nie so passiert).

1.549 Beiträge seit 2004
vor 18 Jahren

vieleicht hilft dir das http://sourceforge.net/projects/taksi

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

200 Beiträge seit 2004
vor 18 Jahren

Hallo Quallo,

also ich habe auch nicht behauptet, das Eure Software etwas mit Flickschusterrei oder unüberlegt zusammengeworfener billiger Software zu tun hat. sicher nicht.

Aber warum sollte Euch Cobol vom Einsatz einer guten Fehlerberichtserstattung und Tracing-Komponente abhalten???

Wenn Fehler schlecht beschrieben sind (so ist es nicht nur aus meiner Erfahrung) dann liegt es entweder daran das es der Kunde selbst tun muss oder das die Trace-Fehlerberichts-Komponente schlecht implementiert wurde. Kannst Du Dir vorstellen wieviel Geld Ihr sparen könntet wenn ihr keine komplett aufgerüsteten Rechner mehr in Euren Hallen als totes Kapital rumstehen lassen müsstet sondern per Internet oder VPC Eure Fehlerberichte auswerten könntet. Stell Dir mal vor MS, DELL oder IBM würden für jeden einen Ersatzrechner bereithalten der ein Softwareprolem hat, was er schlecht beschreiben kann.

PS: Nur zur Sicherheit. Ich will keinen Grabenkampf vom Zaun brechen =) Ist aber auch schon ganz schön OT.

TOM_MUE

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Original von TOM_MUE
Aber warum sollte Euch Cobol vom Einsatz einer guten Fehlerberichtserstattung und Tracing-Komponente abhalten???

Ich denke, dass du dich noch nicht mit den Fehlerberichterstattungsmöglichkeiten von Cobol und der CobolRuntimeumgebung auseinandergesetzt hast.
Da wird sehr sehr sehr wenig angeboten um soetwas zu implementieren.
Was wir bekommen ist ein Stack in dem steht welche Module aufgerufen wurden, aber es ist nicht zu sehen an welcher Stelle des Moduls der Fehler aufgetreten ist.
Den besorgen wir uns auch vom Kunden. Mehr ist nicht drin.

Du kannst uns nicht mit Microsoft und IBM vergleichen, wir machen nichts für den Mainstreamanwender sondern branchenspezifische Lösungen. Wir haben hier nicht tausende Kisten stehen, sondern nur 2. Unsere Software ist sehr stabil, da wir ein sehr aufwändiges Qualitätstestverfahren haben.

Q
Quallo Themenstarter:in
992 Beiträge seit 2005
vor 18 Jahren

Ich habe Taksi getestet, das ist nur für 3D-Spiele(OpenGL, DX8, DX9).

S
8.746 Beiträge seit 2005
vor 18 Jahren

Nochmal zum Datenschutz-Thema. wie immer gilt hier: Nur die Aufzeichnung personenbezogener Daten ist datenschutzrechtlich relevant (und in Unternehmen betriebsratszustimmungspflichtig).

Zeichnet ihr keinerlei Daten auf, die den Benutzer ermitteln lassen (auch nicht indirekt), könnt ihr jede Mausbewegung mitschneiden. Kritisch wirds aber schon, wenn der Username irgendwo angezeigt wird, oder der Mitarbeiter ihn im Rahmen seiner Aufgabe eingeben muss (wie z.B. in einer E-Mail-App). In der Praxis dürfte das aber recht schwer sicherzustellen sein (Fensterwechsel in eine andere App?).