diff --git a/VERAG_PROG_ALLGEMEIN/cErrorHandler.vb b/VERAG_PROG_ALLGEMEIN/cErrorHandler.vb index 8a8931cc..4feba8e9 100644 --- a/VERAG_PROG_ALLGEMEIN/cErrorHandler.vb +++ b/VERAG_PROG_ALLGEMEIN/cErrorHandler.vb @@ -1,15 +1,30 @@ -Imports System.Net.Mail +Imports System.Drawing +Imports System.Drawing.Imaging +Imports System.Net.Mail +Imports System.Windows.Forms Public Class cErrorHandler Public Shared Sub ERR(message As String, stack As String, functionName As String, Optional OP As String = "", Optional title As String = "", Optional mailadess As String = "al@verag.ag", Optional recieverMailAdress As String = "", Optional zusatz As String = "", Optional errCode As String = Nothing) If OP = "" Then OP = VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL ' GLobal gesetzes Errorhandling! (Standart=SHOW) + 'If Form.ActiveForm IsNot Nothing Then + ' Dim bm As New Bitmap(Form.ActiveForm.Width, Form.ActiveForm.Height) + ' Dim g As Graphics = Graphics.FromImage(bm) + ' g.CopyFromScreen(Form.ActiveForm.Location, New Point(0, 0), New Size(Form.ActiveForm.Width, Form.ActiveForm.Height)) + ' bm.Save("C:\formgrab.bmp", Drawing.Imaging.ImageFormat.Bmp) + 'End If + + + Select Case OP Case ERROR_OP.MAIL sendERRORperMail(title & " | " & My.Application.Info.AssemblyName, message, stack, mailadess, zusatz, functionName) Case ERROR_OP.SHOW - Dim f As New frmErrorMeldung(If(functionName <> "", "Fehler in der Funktion '" & functionName & "'" & vbNewLine & vbNewLine, "") & message & vbNewLine & zusatz, stack, title) + Dim c As New cProgramFunctions + Dim url = c.MakeScreenshot() + + Dim f As New frmErrorMeldung(If(functionName <> "", "Fehler in der Funktion '" & functionName & "'" & vbNewLine & vbNewLine, "") & message & vbNewLine & zusatz, stack, title, url) f.ShowDialog() Case ERROR_OP.SHOW_MSGBOX MsgBox(If(functionName <> "", "Fehler in der Funktion '" & functionName & "'" & vbNewLine & vbNewLine, "") & message & vbNewLine & stack & vbNewLine & zusatz, MsgBoxStyle.OkOnly, If(title <> "", title, "Fehler")) diff --git a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb index b89b6f44..a4bd32ef 100644 --- a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb +++ b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb @@ -1,4 +1,5 @@ -Imports System.IO +Imports System.Drawing +Imports System.IO Imports System.Net.Mail Imports System.Text Imports System.Windows.Forms @@ -534,6 +535,35 @@ Public Class cProgramFunctions End Function + Public Function MakeScreenshot() + Dim form As New Form + form = Form.ActiveForm + Dim bounds As Rectangle + Dim screenshot As System.Drawing.Bitmap + Dim graph As Graphics + bounds = form.Bounds 'Screen.PrimaryScreen.Bounds + + screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb) + graph = Graphics.FromImage(screenshot) + graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy) + ' PictureBox1.Image = screenshot + If Not My.Computer.FileSystem.DirectoryExists(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Screenshots_" & My.Application.Info.AssemblyName & "\") Then + My.Computer.FileSystem.CreateDirectory(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Screenshots_" & My.Application.Info.AssemblyName & "\") + End If + Dim cnt As Integer = 1 + Dim strname As String = My.Computer.FileSystem.SpecialDirectories.Desktop & "\Screenshots_" & My.Application.Info.AssemblyName & "\" & form.Name & "_" & Now.ToString("ddMMyyyy_HHmm_") + While System.IO.File.Exists(strname & cnt & ".bmp") : cnt += 1 : End While + screenshot.Save(strname & cnt & ".bmp") + Return strname & cnt & ".bmp" + End Function + Public Function TakeScreenShot(ByVal Control As Control) As Bitmap + Dim tmpImg As New Bitmap(Control.Width, Control.Height) + Using g As Graphics = Graphics.FromImage(tmpImg) + g.CopyFromScreen(Control.PointToScreen(New Point(0, 0)), New Point(0, 0), New Size(Control.Width, Control.Height)) + End Using + Return tmpImg + End Function + End Class diff --git a/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.Designer.vb b/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.Designer.vb index 62077dba..541818b4 100644 --- a/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.Designer.vb +++ b/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.Designer.vb @@ -29,14 +29,16 @@ Partial Class frmErrorMeldung Me.Label2 = New System.Windows.Forms.Label() Me.Panel1 = New System.Windows.Forms.Panel() Me.Panel2 = New System.Windows.Forms.Panel() + Me.lblErr_Nachricht = New System.Windows.Forms.Label() Me.Button2 = New System.Windows.Forms.Button() Me.txtNachricht = New System.Windows.Forms.TextBox() Me.Label3 = New System.Windows.Forms.Label() - Me.lblErr_Nachricht = New System.Windows.Forms.Label() Me.MyPanel2 = New VERAG_PROG_ALLGEMEIN.MyPanel(Me.components) Me.MyPanel1 = New VERAG_PROG_ALLGEMEIN.MyPanel(Me.components) Me.btnClose = New System.Windows.Forms.Button() Me.TextBox2 = New System.Windows.Forms.TextBox() + Me.cbxEnviromentVariables = New System.Windows.Forms.CheckBox() + Me.cbxScreenshot = New System.Windows.Forms.CheckBox() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() Me.Panel1.SuspendLayout() Me.Panel2.SuspendLayout() @@ -85,22 +87,35 @@ Partial Class frmErrorMeldung Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill Me.Panel1.Location = New System.Drawing.Point(0, 0) Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(500, 449) + Me.Panel1.Size = New System.Drawing.Size(500, 463) Me.Panel1.TabIndex = 8 ' 'Panel2 ' Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.cbxScreenshot) + Me.Panel2.Controls.Add(Me.cbxEnviromentVariables) Me.Panel2.Controls.Add(Me.lblErr_Nachricht) Me.Panel2.Controls.Add(Me.Button2) Me.Panel2.Controls.Add(Me.txtNachricht) Me.Panel2.Controls.Add(Me.Label3) Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom - Me.Panel2.Location = New System.Drawing.Point(0, 114) + Me.Panel2.Location = New System.Drawing.Point(0, 128) Me.Panel2.Name = "Panel2" Me.Panel2.Size = New System.Drawing.Size(498, 138) Me.Panel2.TabIndex = 8 ' + 'lblErr_Nachricht + ' + Me.lblErr_Nachricht.AutoSize = True + Me.lblErr_Nachricht.ForeColor = System.Drawing.Color.Red + Me.lblErr_Nachricht.Location = New System.Drawing.Point(341, 8) + Me.lblErr_Nachricht.Name = "lblErr_Nachricht" + Me.lblErr_Nachricht.Size = New System.Drawing.Size(151, 13) + Me.lblErr_Nachricht.TabIndex = 10 + Me.lblErr_Nachricht.Text = "Bitte Nachricht-Text eingeben!" + Me.lblErr_Nachricht.Visible = False + ' 'Button2 ' Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) @@ -122,7 +137,7 @@ Partial Class frmErrorMeldung Me.txtNachricht.Location = New System.Drawing.Point(3, 24) Me.txtNachricht.Multiline = True Me.txtNachricht.Name = "txtNachricht" - Me.txtNachricht.Size = New System.Drawing.Size(400, 110) + Me.txtNachricht.Size = New System.Drawing.Size(400, 86) Me.txtNachricht.TabIndex = 3 ' 'Label3 @@ -134,17 +149,6 @@ Partial Class frmErrorMeldung Me.Label3.TabIndex = 7 Me.Label3.Text = "Nachricht (Bitte um kurze Schilderung, was den Fehler ausgelöst hat):" ' - 'lblErr_Nachricht - ' - Me.lblErr_Nachricht.AutoSize = True - Me.lblErr_Nachricht.ForeColor = System.Drawing.Color.Red - Me.lblErr_Nachricht.Location = New System.Drawing.Point(341, 8) - Me.lblErr_Nachricht.Name = "lblErr_Nachricht" - Me.lblErr_Nachricht.Size = New System.Drawing.Size(151, 13) - Me.lblErr_Nachricht.TabIndex = 10 - Me.lblErr_Nachricht.Text = "Bitte Nachricht-Text eingeben!" - Me.lblErr_Nachricht.Visible = False - ' 'MyPanel2 ' Me.MyPanel2.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) @@ -159,7 +163,7 @@ Partial Class frmErrorMeldung Me.MyPanel1.Controls.Add(Me.btnClose) Me.MyPanel1.Controls.Add(Me.TextBox2) Me.MyPanel1.Dock = System.Windows.Forms.DockStyle.Bottom - Me.MyPanel1.Location = New System.Drawing.Point(0, 252) + Me.MyPanel1.Location = New System.Drawing.Point(0, 266) Me.MyPanel1.Name = "MyPanel1" Me.MyPanel1.Size = New System.Drawing.Size(498, 195) Me.MyPanel1.TabIndex = 6 @@ -191,12 +195,34 @@ Partial Class frmErrorMeldung Me.TextBox2.Size = New System.Drawing.Size(492, 135) Me.TextBox2.TabIndex = 4 ' + 'cbxEnviromentVariables + ' + Me.cbxEnviromentVariables.AutoSize = True + Me.cbxEnviromentVariables.Enabled = False + Me.cbxEnviromentVariables.Location = New System.Drawing.Point(11, 115) + Me.cbxEnviromentVariables.Name = "cbxEnviromentVariables" + Me.cbxEnviromentVariables.Size = New System.Drawing.Size(133, 17) + Me.cbxEnviromentVariables.TabIndex = 11 + Me.cbxEnviromentVariables.Text = "Systemdaten schicken" + Me.cbxEnviromentVariables.UseVisualStyleBackColor = True + ' + 'cbxScreenshot + ' + Me.cbxScreenshot.AutoSize = True + Me.cbxScreenshot.Enabled = False + Me.cbxScreenshot.Location = New System.Drawing.Point(150, 115) + Me.cbxScreenshot.Name = "cbxScreenshot" + Me.cbxScreenshot.Size = New System.Drawing.Size(139, 17) + Me.cbxScreenshot.TabIndex = 12 + Me.cbxScreenshot.Text = "Screenshot mitschicken" + Me.cbxScreenshot.UseVisualStyleBackColor = True + ' 'frmErrorMeldung ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(500, 449) + Me.ClientSize = New System.Drawing.Size(500, 463) Me.Controls.Add(Me.Panel1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) @@ -228,4 +254,6 @@ Partial Class frmErrorMeldung Friend WithEvents MyPanel1 As MyPanel Friend WithEvents btnClose As Windows.Forms.Button Friend WithEvents lblErr_Nachricht As Windows.Forms.Label + Friend WithEvents cbxScreenshot As Windows.Forms.CheckBox + Friend WithEvents cbxEnviromentVariables As Windows.Forms.CheckBox End Class diff --git a/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.vb b/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.vb index 1e289893..e6442e73 100644 --- a/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.vb +++ b/VERAG_PROG_ALLGEMEIN/frmErrorMeldung.vb @@ -1,4 +1,13 @@ -Imports Microsoft.Office.Interop.Outlook +Imports System.Drawing +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Reflection +Imports System.Text +Imports System.Windows.Forms +Imports System.Management +Imports iTextSharp.xmp.impl.xpath +Imports Microsoft.Office.Interop +Imports Microsoft.Office.Interop.Outlook Public Class frmErrorMeldung @@ -6,7 +15,8 @@ Public Class frmErrorMeldung Dim err_stack Dim err_zp As DateTime = Now Dim err_title - Sub New(err_meldung, err_stack, Optional err_title = "") + Dim screenshotUrl + Sub New(err_meldung As String, err_stack As String, Optional err_title As String = "", Optional screenshotUrl As String = "") ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() @@ -14,6 +24,7 @@ Public Class frmErrorMeldung Me.err_meldung = err_meldung Me.err_stack = err_stack Me.err_title = err_title + Me.screenshotUrl = screenshotUrl ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub @@ -23,6 +34,9 @@ Public Class frmErrorMeldung End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + + Cursor = Cursors.WaitCursor + lblErr_Nachricht.Visible = False If txtNachricht.Text.Trim = "" Then @@ -54,17 +68,110 @@ Public Class frmErrorMeldung Mail_Text &= "
" & "User-Nachricht:" & "
" & txtNachricht.Text.Trim & "
" Mail_Text &= "
" & "Error:" & "
" & TextBox2.Text.Trim - If VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(Mail_To, ("ERROR-TICKET " & err_title).trim, Mail_Text) Then - Me.Close() + Dim outl As New Outlook.Application + Dim Mail As Microsoft.Office.Interop.Outlook.MailItem + Mail = outl.CreateItem(0) + Mail.Subject = ("ERROR-TICKET " & err_title).trim + Mail.HTMLBody = Mail_Text + Mail.To = Mail_To + + If cbxScreenshot.Checked Then + Mail.Attachments.Add(screenshotUrl, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , "Screenshot.jpeg") End If + + + If cbxEnviromentVariables.Checked Then + + + If Not My.Computer.FileSystem.DirectoryExists(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Screenshots_" & My.Application.Info.AssemblyName & "\") Then + My.Computer.FileSystem.CreateDirectory(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Screenshots_" & My.Application.Info.AssemblyName & "\") + End If + + Dim filename = "SystemEnviroment_" & Now.ToFileTime & "_.txt" + Dim strFile As String = My.Computer.FileSystem.SpecialDirectories.Desktop & "\Screenshots_" & My.Application.Info.AssemblyName & "\" & filename + Dim fileExists As Boolean = File.Exists(strFile) + Using sw As New StreamWriter(File.Open(strFile, FileMode.CreateNew)) + + createSystemInformation(sw) + sw.Close() + + Mail.Attachments.Add(strFile, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , filename) + End Using + End If + + Try + Mail.Send() + Me.Close() + + + Catch ex As System.Exception + Cursor = Cursors.WaitCursor + MsgBox(ex.Message) + End Try + End Sub Private Sub frmErrorMeldung_Load(sender As Object, e As EventArgs) Handles Me.Load TextBox2.Text = err_meldung & vbNewLine & vbNewLine & err_stack + If screenshotUrl <> "" Then + cbxScreenshot.Enabled = True + cbxScreenshot.Checked = True + Else + cbxScreenshot.Enabled = False + cbxScreenshot.Checked = False + + End If + + cbxEnviromentVariables.Enabled = True + cbxEnviromentVariables.Checked = True + End Sub Private Sub frmErrorMeldung_Shown(sender As Object, e As EventArgs) Handles Me.Shown txtNachricht.Focus() End Sub + + + Private Sub createSystemInformation(ByRef sw As StreamWriter) + + Dim str As String + Dim nl As String = Environment.NewLine + sw.WriteLine() + sw.WriteLine("-- Environment members --") + sw.WriteLine("CommandLine: {0}", Environment.CommandLine) + Dim arguments As String() = Environment.GetCommandLineArgs() + sw.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments)) + sw.WriteLine("CurrentDirectory: {0}", Environment.CurrentDirectory) + sw.WriteLine("ExitCode: {0}", Environment.ExitCode) + sw.WriteLine("HasShutdownStarted: {0}", Environment.HasShutdownStarted) + sw.WriteLine("MachineName: {0}", Environment.MachineName) + sw.WriteLine("NewLine: {0} first line{0} second line{0} third line", Environment.NewLine) + sw.WriteLine("OSVersion: {0}", Environment.OSVersion.ToString()) + sw.WriteLine("StackTrace: '{0}'", Environment.StackTrace) + sw.WriteLine("SystemDirectory: {0}", Environment.SystemDirectory) + sw.WriteLine("TickCount: {0}", Environment.TickCount) + sw.WriteLine("UserDomainName: {0}", Environment.UserDomainName) + sw.WriteLine("UserInteractive: {0}", Environment.UserInteractive) + sw.WriteLine("UserName: {0}", Environment.UserName) + sw.WriteLine("Version: {0}", Environment.Version.ToString()) + sw.WriteLine("WorkingSet: {0}", Environment.WorkingSet) + Dim query As String = "My system drive is %SystemDrive% and my system root is %SystemRoot%" + str = Environment.ExpandEnvironmentVariables(query) + sw.WriteLine("ExpandEnvironmentVariables: {0} {1}", nl, str) + sw.WriteLine("GetEnvironmentVariable: {0} My temporary directory is {1}.", nl, Environment.GetEnvironmentVariable("TEMP")) + sw.WriteLine("GetEnvironmentVariables: ") + Dim environmentVariables As IDictionary = Environment.GetEnvironmentVariables() + + For Each de As DictionaryEntry In environmentVariables + sw.WriteLine((" {0} = {1}", de.Key, de.Value)) + Next + + sw.WriteLine("GetFolderPath: {0}", Environment.GetFolderPath(Environment.SpecialFolder.System)) + Dim drives As String() = Environment.GetLogicalDrives() + sw.WriteLine("GetLogicalDrives: {0}", String.Join(", ", drives)) + + + End Sub + End Class \ No newline at end of file