PDA

Vollständige Version anzeigen : Screenshots in DB speichern


dancer1970
26.09.2005, 14:29
Hallo,
ich soll eine kleine DB bauen, um Programmfehler zu dokumentieren.
Neben vielen Daten wie Datum, Programmteil, Fehlerbeschreibung... soll je Fehler ein oder mehrere Screenshots eingefügt werden.
Die Screenshots werden mit Druck/Print erzeugt.

Ich habe das mal mit einem OLE Feld versucht und es funktioniert auch prima.
Leider wird die DB dann sehr groß.

Ist es irgendwie möglich durch die Aktion Einfügen oder Strg+V im Bild- oder Objektfeld einen Code aufzurufen, der das eingefügte Bild automatisch ohne Useraktion als jpg in einem festgelegten Ordner abspeichert.
Der Dateiname kann ja z.B. die ID Nummer des Datensatzes sein.
Im Datensatz wird dann nur der Pfad gespeichert.

Hat das schonmal jemand gemacht oder ist es überhaupt möglich?

Bislang wird für jeden Fehler ein Word Dokument erzeugt, in das die Screenshots und die Beschreibung eingefügt werden.

Danke Stefan

dancer1970
27.09.2005, 14:35
hmm, weiß keiner was? oder ist die Frage zu undeutlich, zu dumm, zu einfach, zu schwierig?

molnar
27.09.2005, 14:48
Screenshots sind Bitmaps, keine komprimierten JPGs. Du brauchst also ein Programm, das BMPs in JPGs umwandeln kann (Word kann das nicht). Falls dieses Programm es erlaubt, ein Bild aus der Zwischenablage zu erstellen, kannst Du es z.B. beim Drücken eines Buttons per VBA aufrufen, die Zwischenablage einfügen, die Datei speichern und das Programm wieder beenden.

Mit Word kannst Du nur eine Datei erzeugen, die das Bitmap enthält, also ziemlich groß ist. Es müßte dann aber auch sichergestellt sein, daß sich das zu speichernde Bitmap bereits in der Zwischenablage befindet.

Gruß,
Reinhard

dancer1970
27.09.2005, 15:00
Danke für den Beitrag.
Das mit Word ist nur eine Notlösung, aber halt relativ einfach.

wenn ich den Screenshot in der Zwischenablage habe (ist gewährleistet), kann ich den selbst verständlich z.B. in Paint einfügen, speichern klicken, Ordnerauswählen, Dateinamen eintragen und als jpg speichern.
Diese nun erzeugt Datei kann ich dann mit meiner Datenbank verknüpfen, indem ich den Dateipfad in einem Feld speichere.

Soweit so gut, aber der User soll nur in einem Formular in dem Objektfeld Strg+V bzw. einfügen drücken und soll ich weder um Dateiformate, Dateinamen oder ähnliches Gedanken machen. Halt so wie er es in Word auch machen würde.

Die Prozedur mit dem Aufruf von Paint bis zum verlinken des Bildes mit der DB automatisch.
Läßt sich das überhaupt automatsieren oder ist das zu komplex, weil ein anderes Programm dazu benötigt wird?

Stefan

molnar
27.09.2005, 15:18
Mit dem Befehl Set objectVariable= CreateObject("Typ") kann man ein beliebiges Programm aufrufen und fernsteuern. Ich habe das schon oft mit Excel gemacht, habe aber keine Ahnung, welche Befehle Paint zuläßt. Nach der Zuweisung kann man im Debugger zumindest die zum Objekt gehörenden Daten sehen und (hoffentlich) auch ändern.

Da das VBA-Programm in Access abläuft, kann man auf alle in der Datenbank bekannten Informationen zurückgreifen und z.B. einen Dateinamen an das aufgerufene Programm übergeben.

Die VBA-Funktion kann man als Ereignisprozedur an ein Formularfeld binden. Dann wird sie beim Eintreten des Ereignisses automatisch ausgeführt.

Automatisierung ist also prinzipiell möglich, bei Programmen, die keine VBA-Programmierung unterstützen (Excel ja, Paint ?) aber zumindest schwierig, da dann keine Hilfe zur Programmierung verfügbar ist.

Reinhard

dancer1970
27.09.2005, 16:00
ok, danke!
Dann werde ich mal unter Paint fernsteuern suchen.

Stefan

Axelander
19.12.2005, 15:20
Hallo dancer1970,
ich stehe hier gerade vor einem ähnlichen Problem und wollte mal nachfragen, ob das so geklappt hat mit dem Paint. Und falls ja, dann würde mich natürlich interessieren wie du das machst ;)

Gruß
Alex

dancer1970
19.12.2005, 15:47
Hallo,
habe das Thema nicht weiter verfolgt, hat im Moment keine Priorität.
Für Hinweise bin auch ich dankbar.

Stefan

Sascha Trowitzsch
19.12.2005, 19:08
Unter welchem BS soll die DB laufen? Mit WinXP (bzw. W2000 + GDIPlus.dll) ist es relativ einfach, mit ein bisschen API ein Bitmap in ein JPG, GIF oder PNG zu speichern.

Ciao, Sascha

dancer1970
20.12.2005, 09:25
Hallo,
also in meinem Fall wäre das Windows 2000 mit Access 2000.

Stefan

KHS
20.12.2005, 10:30
Vielleicht ist das was für dich:
http://www.ms-office-forum.net/forum/showthread.php?p=799888

Sascha Trowitzsch
20.12.2005, 14:41
OK, hier mal wieder ein Elaborat meinerseits...
Unter http://www.moss-soft.de/public/screenshot.zip gibt's eine >=A2000-Demo, mit der man Screenshots erstellen, als GIF, BMP oder PNG abspeichern und außerdem in einer Tabelle abspeichern und später wieder ansehen kann.

Weil das Teil auf GDIPlus aufsetzt, was unter WindowsXP standardmäßig vorhanden ist, unter W2000 aber nicht, ist evtl. ein Download der gdiplus.dll bei Microsoft notwendig. Zu finden unter:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6a63ab9c-df12-4d41-933c-be590feaa05a&DisplayLang=en
Aber erstmal ausprobieren. Die Demo meldet selbst, falls GDIPlus nicht installiert ist. (GDIPlus wird auch von vielen anderen Programmen installiert, so dass es u.U. auch auf W2000-Systemen schon vorhanden ist.)

Ciao, Sascha

Axelander
20.12.2005, 15:03
Hallo Sascha,
ein Klasse Beispiel! Noch besser wäre es, wenn man damit auch Screenshots nur vom Access Fenster machen könnte. Kann man das vielleicht auch noch irgendwo einstellen?

Gruß
Alex

Sascha Trowitzsch
20.12.2005, 15:49
Warum nicht, :( ... hier die Version, in der man alternativ auch nur das Access-Fenster schießen kann:
http://www.moss-soft.de/public/screenshot2.zip

Ciao, Sascha

Beere
20.03.2007, 17:42
Hallo Sascha,
habe mir die Screenshot.mdb zu Gemüte geführt, weil gewünscht wird, von einem externen(neuem) Programm Screenshots speichern und dazu noch ein paar Texteingaben machen zu können - kurz zur Dokumentation von Problemen, Fragen zu diesem Programm.
Dabei ist mir u.a. das ACCESS-Fenster im Weg, genauer -> zu bekomme ich sie ja noch, aber nach dem Speichern nicht wieder automatisch auf. Hab schon mit Restore, MoveSize... rumprobiert
Da bin ich dann auf die Idee verfallen, das in VB zulösen, stolpere aber jetzt über StrPtr, welches nicht geschluckt wird. Was tut StrPtr und wieso juckt das ACCESS nicht?
z.B. hier
CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .UUID

Der Screenshot soll nur bei Bedarf gemacht werden, und ich weiß nicht genau wieviele Leute damit umgehen sollen, aber es sind mind. 20. und denen zu erklären, wo wann/zu welchem Zweck hingeklickt werden soll, dann noch die lästige Sicherheitsabfrage, da seh ich einfach schwarz, dass die DB dann auch den gewünschten Zweck erfüllt.
In VB stell ich mir das so vor, dass auf dem Desktop die Anwendung ist, draufgeklickt wird, DS mit Bild erzeugt und sich ein Formular für weitere Eingaben öffnet...


Bin jetzt hier (http://www.microsoft.com/germany/msdn/library/windows/api/UndokumentierteVariablenzeiger.mspx?mfr=true) fündig geworden

Sascha Trowitzsch
21.03.2007, 18:45
Ich habe nicht die blasseste Ahnung, was StrPtr mit Screenshots zu tun haben könnte.
IMHO OT: Wenn du irgendwas mit GUIDs machen willst, dann ist die Frage, welche genauen API-Deklarationen du verwendest. Man kann sie nämlich meist auf mehrere Weise deklarieren. So kann ein Objekt etwa ByRef (As Any), ByVal, per ObjPtr(), als Long deklariert werden. Entsprechend muss man die Variablen oder Objekte in VB "vorbereiten". Solange ich also nicht weiß, wie deine CLSIDFromString-Deklaration aussieht, solang weiß ich auch nicht, ob StrPtr die richtige "Vorbereitung" für den Parameter ist.

Was das Verstecken und Wiederherstellen des Access-Fensters angeht:
Declare Function ShowWindow Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal nCmdShow As Long) As Long

Private Const SW_HIDE As Long = 0
Private Const SW_MAXIMIZE As Long = 3
Private Const SW_MINIMIZE As Long = 6
Private Const SW_NORMAL As Long = 1
Private Const SW_RESTORE As Long = 9

'Verstecken:
ShowWindow Application.hWndAccessApp, SW_HIDE
'Wiederherstellen'
ShowWindow Application.hWndAccessApp, SW_NORMAL
'Mit den anderen Konstanten kann man dann noch mehr machen

Ciao, Sascha

Beere
21.03.2007, 21:09
Danke!

Damit spiel ich doch morgen mal noch bissl...