Screenshot Maker Code-Update

    • VB.NET

    Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      Screenshot Maker Code-Update

      Da ich oft einen Screenshot brauche, habe ich eine "Screenshot Maker"
      in net.framework 4.0 geschrieben. Das Programm unterstüzt die Grafikformate
      png, bmp, jpg, gif, tif, exif, emf und wmf. Falls man dieses Programm des
      öfteren verwenden möchte, kann man mit einer CheckBox ganz einfach
      eine Verknüpfung auf der Schnellstartleiste erstellen oder entfernen.

      Spoiler anzeigen


      VB.NET-Quellcode

      1. Imports Shell32
      2. Public Class Form1
      3. Private Declare Function SHChangeNotify Lib "Shell32.dll" (ByVal wEventID As Int32, ByVal uFlags As Int32, ByVal dwItem1 As Int32, ByVal dwItem2 As Int32) As Int32
      4. Dim Desktopimage As Bitmap
      5. Dim Snap As Graphics
      6. Dim Pfad As String
      7. Dim Nummer As Integer
      8. Dim ImageFormat As System.Drawing.Imaging.ImageFormat
      9. Dim QL As String
      10. Dim Exe As String
      11. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      12. Me.ShowInTaskbar = False
      13. QL = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Microsoft\Internet Explorer\Quick Launch" & Application.ProductName & ".lnk"
      14. Exe = Application.StartupPath & "" & Application.ProductName & ".exe"
      15. If System.IO.File.Exists(QL) = True Then
      16. CbVk.Checked = True
      17. Else : CbVk.Checked = False
      18. End If
      19. ImageFormat = System.Drawing.Imaging.ImageFormat.Png
      20. Desktopimage = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.Bounds.Height)
      21. Snap = Graphics.FromImage(Desktopimage)
      22. Nummer = 1
      23. With CbTyp
      24. .Items.Add(".png")
      25. .Items.Add(".bmp")
      26. .Items.Add(".jpg")
      27. .Items.Add(".gif")
      28. .Items.Add(".tif")
      29. .Items.Add(".exif")
      30. .Items.Add(".emf")
      31. .Items.Add(".wmf")
      32. .SelectedIndex = 0
      33. End With
      34. TbDateiname.Text = "Screenshot"
      35. End Sub
      36. Private Sub BtnPfadAuswahl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPfadAuswahl.Click
      37. PfadFestlegen()
      38. End Sub
      39. Private Sub BtnKnipsen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnKnipsen.Click
      40. Pfad = My.Settings.Ordner
      41. If Pfad = "" Then
      42. If MsgBox("Bitte zuerst einen Speicherort auswählen!", MsgBoxStyle.Information, "Screenshot Maker") = MsgBoxResult.Ok Then
      43. PfadFestlegen()
      44. Exit Sub
      45. End If
      46. End If
      47. Me.Hide()
      48. System.Threading.Thread.Sleep(150)
      49. Snap.CopyFromScreen(0, 0, 0, 0, Desktopimage.Size)
      50. If Not System.IO.File.Exists(Pfad & "" & TbDateiname.Text & CbTyp.SelectedItem.ToString) Then
      51. Desktopimage.Save(Pfad & "" & TbDateiname.Text & CbTyp.SelectedItem.ToString, ImageFormat)
      52. Me.Show()
      53. Else : Nummer = 1
      54. CheckName.Start()
      55. End If
      56. End Sub
      57. Private Sub CheckName_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckName.Tick
      58. If System.IO.File.Exists(Pfad & "" & TbDateiname.Text & "(" & Nummer & ")" & CbTyp.SelectedItem.ToString) Then
      59. Nummer += 1
      60. Else : CheckName.Stop()
      61. Desktopimage.Save(Pfad & "" & TbDateiname.Text & "(" & Nummer & ")" & CbTyp.SelectedItem.ToString, ImageFormat)
      62. Me.Show()
      63. End If
      64. End Sub
      65. Private Sub PfadFestlegen()
      66. If FBD.ShowDialog = DialogResult.OK Then
      67. My.Settings.Ordner = FBD.SelectedPath & ""
      68. My.Settings.Save()
      69. Pfad = My.Settings.Ordner
      70. End If
      71. End Sub
      72. Private Sub CbTyp_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbTyp.SelectedIndexChanged
      73. If CbTyp.SelectedItem.ToString = ".png" Then
      74. ImageFormat = System.Drawing.Imaging.ImageFormat.Png
      75. ElseIf CbTyp.SelectedItem.ToString = ".bmp" Then
      76. ImageFormat = System.Drawing.Imaging.ImageFormat.Bmp
      77. ElseIf CbTyp.SelectedItem.ToString = ".jpg" Then
      78. ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg
      79. ElseIf CbTyp.SelectedItem.ToString = ".gif" Then
      80. ImageFormat = System.Drawing.Imaging.ImageFormat.Gif
      81. ElseIf CbTyp.SelectedItem.ToString = ".tif" Then
      82. ImageFormat = System.Drawing.Imaging.ImageFormat.Tiff
      83. ElseIf CbTyp.SelectedItem.ToString = ".exif" Then
      84. ImageFormat = System.Drawing.Imaging.ImageFormat.Exif
      85. ElseIf CbTyp.SelectedItem.ToString = ".emf" Then
      86. ImageFormat = System.Drawing.Imaging.ImageFormat.Emf
      87. ElseIf CbTyp.SelectedItem.ToString = ".wmf" Then
      88. ImageFormat = System.Drawing.Imaging.ImageFormat.Wmf
      89. End If
      90. End Sub
      91. Private Sub CbVk_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbVk.CheckedChanged
      92. If CbVk.Checked = True Then
      93. If System.IO.File.Exists(QL) Then
      94. Kill(QL)
      95. End If
      96. VerkuepfungErstellen(QL, Exe, "", "Macht einen Screenshot")
      97. SHChangeNotify(&H8000000, &H0, 0, 0)
      98. Else : Kill(QL)
      99. SHChangeNotify(&H8000000, &H0, 0, 0)
      100. End If
      101. End Sub
      102. Public Function VerkuepfungErstellen(ByVal Wohin As String, ByVal Wovon As String, Optional ByVal Argumente As String = "", Optional ByVal Beschreibung As String = "", Optional ByVal Ort As String = "") As Boolean
      103. Try : Dim IcoShell As New Shell32.Shell
      104. Dim sOrdner As Shell32.Folder
      105. Dim SLO As Shell32.ShellLinkObject
      106. Dim EXEPfad As String = Wohin.Substring(0, Wohin.LastIndexOf(""))
      107. Dim EXEName As String = Wohin.Substring(Wohin.LastIndexOf("") + 1)
      108. Dim F As Short = CShort(FreeFile())
      109. FileOpen(F, Wohin, OpenMode.Output)
      110. FileClose(F)
      111. sOrdner = IcoShell.NameSpace(EXEPfad)
      112. SLO = CType(sOrdner.Items.Item(EXEName).GetLink, Shell32.ShellLinkObject)
      113. With SLO
      114. If Argumente.Length > 0 Then .Arguments = Argumente
      115. If Beschreibung.Length > 0 Then .Description = Beschreibung
      116. If Ort.Length > 0 Then .WorkingDirectory = Ort
      117. .Path = Wovon
      118. .Save()
      119. End With
      120. IcoShell = Nothing
      121. sOrdner = Nothing
      122. SLO = Nothing
      123. Return True
      124. Catch ex As Exception
      125. If System.IO.File.Exists(Wohin) Then
      126. Kill(Wohin)
      127. End If
      128. Return False
      129. End Try
      130. End Function
      131. End Class


      Projektmappe:

      Screenshot Maker by Derfuhr.7z


      Für Kritik an meinem Stil wäre ich Dankbar!!

      edit: Unter Win 7 muss der Pfad zur Schnellstartleiste geändert werden :!:

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Derfuhr“ ()

      Hallo Derfuhr, ;)

      ich hab das Programm nicht getestet.

      Trotzdem fallen ein paar kleine Dinge auf, die mehr oder minder unschön sind.

      Ich liste einfach mal auf:

      1. Die Klasse heißt Form1 -> Nenn sie frmMain und rede nicht mehr drüber =D


      2. Die Variablennamen fangen mit Großbuchstaben an, und sind dann entweder Deutsch oder Denglisch. Das muss nicht sein. Entweder, oder.


      3. MsgBox ist veraltet (VB6) und sollte durch die MessageBox Klasse ersetzt werden. Sieht eh schöner aus. (MessageBox.Show)


      4.

      VB.NET-Quellcode

      1. Me.Hide()
      2. System.Threading.Thread.Sleep(150)

      Wääh. Das wäre ausnahmsweise mal ein vernünftiger Einsatzzweck für unseren so gerne genutzen Timer.


      5. Option Strict On! Die Tatsache, dass du deine Strings mit dem VB typischen & verknüpfst hat dich leider davor bewahrt, mit einem Error belagert zu werden.
      Das Problem ist, dass du als "Nummer" eine Integer Variable hast, und diese mit Strings verknüpfst. Mach das mal mit dem C# typischen +.
      Also: OSO und dann Nummer.ToString()! :)


      6. If FBD.ShowDialog = DialogResult.OK Then
      Die nativen FileDialoge feuern wunderbare Events, wenn sie einen Pfad für dich haben.
      Dieser Weg führt eher nur zu Problemen.


      7. Hmm. Diesen Riesigen IfElse-Baum bei CbTyp_SelectedIndexChanged kann man mit nem Select Case um Faktor 100 verschönern :thumbup:


      8. Kill(QL) - Ist so alt, dass ich noch NIE davon gehört hatte. Das ist VB6 und MUSS durch System.IO.FileSystem.DeleteFile ersetzt werden. :pinch:


      9. Wieso machst du denn bei Try nen Doppelpunkt? Ich sehe das nicht wirklich als Codingstil durchs Ganze Programm, daher würde ich davon eher Abstand nehmen.


      10. Die Funktion VerknuepfungErstellen kommt wahrs. direkt von VB6. Aua.

      VB.NET-Quellcode

      1. FreeFile, CShort, CType, FileOpen, FileClose

      Muss das sein? Ist nicht so toll :huh:



      Ansonsten, ich sehe überhaupt nichts, was NetFW 4.0 bräuchte. Der Code ließe sich wahrs. schneller auf VB6 portieren, als auf alles andere :P

      Versuch mal, diese kleinen Probleme auszumerzen, und dann kann man damit gut arbeiten =)

      Viel Erfolg,
      Manawyrm

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()

      Muss Manawyrm zustimmen. Außerdem gilt das nicht nur für Form1 sondern auch für alle Controls (außer labels usw. wo man nie braucht).
      Aber wenn man button1, button2, button3, ... 50 hat... dann ist das definitiv nicht produktiv.
      Oder sag mir mal was button13 macht...


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      Da ich die Idee von CatchTheBird ganz gut finde, habe ich mir
      die Zeit genommen eine gezielte Snapshot funktion einzubauen.

      edit: code noch mal verbessert

      VB.NET-Quellcode

      1. Option Strict On
      2. Public Class frmMain
      3. Dim A As New frmArea
      4. Dim B As New clsshort
      5. Private Declare Function SHChangeNotify Lib "Shell32.dll" (ByVal wEventID As Int32, ByVal uFlags As Int32, ByVal dwItem1 As Int32, ByVal dwItem2 As Int32) As Int32
      6. Dim desktopimage As Bitmap
      7. Dim snap As Graphics
      8. Dim path As String
      9. Dim filenumber As Integer
      10. Dim imageformat As System.Drawing.Imaging.ImageFormat
      11. Dim quicklaunchpath As String
      12. Dim exepath As String
      13. Dim bmpwidth As Integer
      14. Dim bmpheight As Integer
      15. Dim shotpointx As Integer
      16. Dim shotpointy As Integer
      17. Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      18. Me.ShowInTaskbar = False
      19. Me.TopMost = My.Settings.metopmost
      20. CbTopmost.Checked = Me.TopMost
      21. NudHeight.Enabled = False
      22. NudWidth.Enabled = False
      23. quicklaunchpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Microsoft\Internet Explorer\Quick Launch\"
      24. exepath = Application.StartupPath & "\" & Application.ProductName & ".exe"
      25. If System.IO.File.Exists(quicklaunchpath & Application.ProductName & ".lnk") = True Then
      26. CbShortcut.Checked = True
      27. Else
      28. CbShortcut.Checked = False
      29. End If
      30. imageformat = System.Drawing.Imaging.ImageFormat.Png
      31. filenumber = 1
      32. With CbbFormat
      33. .Items.Add(".png")
      34. .Items.Add(".bmp")
      35. .Items.Add(".jpg")
      36. .Items.Add(".gif")
      37. .Items.Add(".tif")
      38. .Items.Add(".exif")
      39. .Items.Add(".emf")
      40. .Items.Add(".wmf")
      41. .SelectedIndex = 0
      42. End With
      43. CbSize.Checked = True
      44. TbFilename.Text = "Screenshot"
      45. NudHeight.Maximum = Screen.PrimaryScreen.Bounds.Height
      46. NudHeight.Minimum = 15
      47. NudWidth.Maximum = Screen.PrimaryScreen.WorkingArea.Width
      48. NudWidth.Minimum = 15
      49. NudHeight.Value = 150
      50. NudWidth.Value = 150
      51. A.Width = CInt(NudWidth.Value)
      52. A.Height = CInt(NudHeight.Value)
      53. A.LblMove.Location = New Point(CInt(A.Width / 2 - A.LblMove.Width / 2), CInt(A.Height / 2 - A.LblMove.Height / 2))
      54. End Sub
      55. Private Sub BtnDirectory_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDirectory.Click
      56. Selectdirectory()
      57. End Sub
      58. Private Sub BtnShot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnShot.Click
      59. path = My.Settings.savefolderpath
      60. If path = "" Then
      61. If MsgBox("Bitte zuerst einen Speicherort auswählen!", MsgBoxStyle.Information, "Screenshot Maker") = MsgBoxResult.Ok Then
      62. Selectdirectory()
      63. Exit Sub
      64. End If
      65. End If
      66. Me.Hide()
      67. A.Hide()
      68. System.Threading.Thread.Sleep(150)
      69. If CbSize.Checked Then
      70. bmpheight = Screen.PrimaryScreen.Bounds.Height
      71. bmpwidth = Screen.PrimaryScreen.WorkingArea.Width
      72. desktopimage = New Bitmap(bmpwidth, bmpheight)
      73. snap = Graphics.FromImage(desktopimage)
      74. snap.CopyFromScreen(0, 0, 0, 0, desktopimage.Size)
      75. Else
      76. bmpheight = A.Height
      77. bmpwidth = A.Width
      78. shotpointx = A.Location.X
      79. shotpointy = A.Location.Y
      80. desktopimage = New Bitmap(bmpwidth, bmpheight)
      81. snap = Graphics.FromImage(desktopimage)
      82. snap.CopyFromScreen(shotpointx, shotpointy, 0, 0, desktopimage.Size)
      83. End If
      84. If Not System.IO.File.Exists(path & "\" & TbFilename.Text & CbbFormat.SelectedItem.ToString) Then
      85. desktopimage.Save(path & "\" & TbFilename.Text & CbbFormat.SelectedItem.ToString, imageformat)
      86. Me.Show()
      87. If Not CbSize.Checked Then
      88. A.Show()
      89. End If
      90. Else : filenumber = 1
      91. CheckName.Start()
      92. End If
      93. End Sub
      94. Private Sub CheckName_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckName.Tick
      95. If System.IO.File.Exists(path & "\" & TbFilename.Text & "(" & filenumber.ToString & ")" & CbbFormat.SelectedItem.ToString) Then
      96. filenumber += 1
      97. Else
      98. CheckName.Stop()
      99. desktopimage.Save(path & "\" & TbFilename.Text & "(" & filenumber.ToString & ")" & CbbFormat.SelectedItem.ToString, imageformat)
      100. Me.Show()
      101. If Not CbSize.Checked Then
      102. A.Show()
      103. End If
      104. End If
      105. End Sub
      106. Private Sub Selectdirectory()
      107. Using FBD As New FolderBrowserDialog
      108. If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
      109. My.Settings.savefolderpath = FBD.SelectedPath & "\"
      110. My.Settings.Save()
      111. path = My.Settings.savefolderpath
      112. End If
      113. End Using
      114. End Sub
      115. Private Sub CbbFormat_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbbFormat.SelectedIndexChanged
      116. Dim CbbValue As Integer = CbbFormat.SelectedIndex
      117. Select Case CbbValue
      118. Case 0
      119. imageformat = System.Drawing.Imaging.ImageFormat.Png
      120. Case 1
      121. imageformat = System.Drawing.Imaging.ImageFormat.Bmp
      122. Case 2
      123. imageformat = System.Drawing.Imaging.ImageFormat.Jpeg
      124. Case 3
      125. imageformat = System.Drawing.Imaging.ImageFormat.Gif
      126. Case 4
      127. imageformat = System.Drawing.Imaging.ImageFormat.Tiff
      128. Case 5
      129. imageformat = System.Drawing.Imaging.ImageFormat.Exif
      130. Case 6
      131. imageformat = System.Drawing.Imaging.ImageFormat.Emf
      132. Case 7
      133. imageformat = System.Drawing.Imaging.ImageFormat.Wmf
      134. End Select
      135. End Sub
      136. Private Sub CbShortcut_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbShortcut.CheckedChanged
      137. If CbShortcut.Checked Then
      138. If System.IO.File.Exists(quicklaunchpath) Then
      139. System.IO.File.Delete(quicklaunchpath)
      140. End If
      141. B.MakeShortCut(exepath, quicklaunchpath, Application.ProductName, exepath, "Macht einen Screenshot")
      142. SHChangeNotify(&H8000000, &H0, 0, 0)
      143. Else : System.IO.File.Delete(quicklaunchpath & Application.ProductName & ".lnk")
      144. SHChangeNotify(&H8000000, &H0, 0, 0)
      145. End If
      146. End Sub
      147. Private Sub CbSize_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbSize.CheckedChanged
      148. If CbSize.Checked Then
      149. NudHeight.Enabled = False
      150. NudWidth.Enabled = False
      151. A.Hide()
      152. Else
      153. NudHeight.Enabled = True
      154. NudWidth.Enabled = True
      155. A.Show()
      156. End If
      157. End Sub
      158. Private Sub NudHeight_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NudHeight.ValueChanged
      159. A.Height = CInt(NudHeight.Value)
      160. A.LblMove.Location = New Point(CInt(A.Width / 2 - A.LblMove.Width / 2), CInt(A.Height / 2 - A.LblMove.Height / 2))
      161. End Sub
      162. Private Sub NudWidth_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NudWidth.ValueChanged
      163. A.Width = CInt(NudWidth.Value)
      164. A.LblMove.Location = New Point(CInt(A.Width / 2 - A.LblMove.Width / 2), CInt(A.Height / 2 - A.LblMove.Height / 2))
      165. End Sub
      166. Private Sub CbTopmost_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbTopmost.CheckedChanged
      167. If CbTopmost.Checked Then
      168. Me.TopMost = True
      169. My.Settings.metopmost = Me.TopMost
      170. My.Settings.Save()
      171. Else
      172. Me.TopMost = False
      173. My.Settings.metopmost = Me.TopMost
      174. My.Settings.Save()
      175. End If
      176. End Sub
      177. End Class


      VB.NET-Quellcode

      1. Option Strict On
      2. Public Class frmArea
      3. Public Declare Function ReleaseCapture Lib "user32" () As Integer
      4. Public
      5. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
      6. hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef
      7. lParam As Object) As Integer
      8. Public Const WM_NCLBUTTONDOWN = &HA1
      9. Public Const HTCAPTION = 2
      10. Dim limepen As Pen = New Pen(Brushes.LimeGreen, 3)
      11. Private Sub FormMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LblMove.MouseDown
      12. ReleaseCapture()
      13. SendMessage(CInt(Handle), WM_NCLBUTTONDOWN, HTCAPTION, 2)
      14. End Sub
      15. Private Sub frmArea_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      16. Me.ShowInTaskbar = False
      17. Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
      18. Me.BackColor = Color.White
      19. Me.TransparencyKey = Color.White
      20. Me.TopMost = True
      21. Me.CenterToScreen()
      22. LblMove.ForeColor = Color.LimeGreen
      23. End Sub
      24. Private Sub frmArea_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
      25. With e
      26. .Graphics.DrawLine(limepen, 0, 0, 0, Me.Height)
      27. .Graphics.DrawLine(limepen, 0, 0, Me.Width, 0)
      28. .Graphics.DrawLine(limepen, 0, Me.Height - 1, Me.Width, Me.Height - 1)
      29. .Graphics.DrawLine(limepen, Me.Width - 1, 0, Me.Width - 1, Me.Height - 1)
      30. End With
      31. End Sub
      32. End Class


      VB.NET-Quellcode

      1. Option Strict Off
      2. Public Class clsshort
      3. Public Sub MakeShortCut(ByVal targetpath As String, ByVal shortcutpath As String, ByVal shortcutname As String, Optional ByVal workingdirectory As String = "", Optional ByVal description As String = "")
      4. Dim shobject As Object = New Object
      5. Dim wantedshortcut As Object = New Object
      6. shobject = CreateObject("WScript.Shell")
      7. wantedshortcut = shobject.CreateShortcut(shortcutpath & "\" & shortcutname & ".lnk")
      8. wantedshortcut.TargetPath = targetpath
      9. wantedshortcut.WorkingDirectory = workingdirectory
      10. wantedshortcut.IconLocation = targetpath
      11. wantedshortcut.Description = description
      12. wantedshortcut.Save()
      13. End Sub
      14. End Class


      zum bewegen vom "Pointer", muss Move im Pointer mit der linken
      Maustaste festgehalten werden!

      edit: für Win7 u. Win8 muss der "quicklaunchpath" geändert werden :!:

      Ganz unten ist die neueste version zum Download :!:
      Dateien

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Derfuhr“ ()

      Da CatchTheBird schon wieder eine sehr gute Idee hatte,
      habe ich den Screenshot Maker noch weiter entwickelt.
      jetzt kann man auch die Bereichsauswahl mit der Maus
      verändern, desweiteren kann man nun auch die Farbe
      vom "Pointer" individuel einstellen und Speichern. Da der
      Quelltext mehr als 15.000 Zeichen enthält, kann ich hier
      nur die Projektmappe zum Download anbieten.

      Für sachliche Kritiken bin ich immer dankbar!

      :!: Unter Win7 und Win8 muss der "quicklaunchpath" geändert werden :!:

      edit: Falls ihr die Farbe vom Pointer auf Weiss macht also "A255,R255,G255,B255"
      ist der pointer nichts sichtbar weil der Transparencykey von frmArea Weiss ist,
      also R oder G oder B dann einfach einen wert runter machen :!:

      edit2: folgende subs muss korrigiert werden:

      VB.NET-Quellcode

      1. Private Sub TsmQuicklaunch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TsmQuicklaunch.Click
      2. If TsmQuicklaunch.Checked Then
      3. If System.IO.File.Exists(quicklaunchpath) Then
      4. System.IO.File.Delete(quicklaunchpath)
      5. End If
      6. System.IO.File.Delete(quicklaunchpath & Application.ProductName & ".lnk")
      7. SHChangeNotify(&H8000000, &H0, 0, 0)
      8. TsmQuicklaunch.Checked = False 'war vorher true
      9. Else
      10. B.MakeShortCut(exepath, quicklaunchpath, Application.ProductName, exepath, "Macht einen Screenshot")
      11. SHChangeNotify(&H8000000, &H0, 0, 0)
      12. TsmQuicklaunch.Checked = True 'war vorher false
      13. End If
      14. End Sub
      15. Private Sub Selectdirectory()
      16. Using FBD As New FolderBrowserDialog
      17. FBD.Description = "Verzeichnnis zum speichern der screenshots auswählen" & vbNewLine & "Aktuelles verzeichnis: " & My.Settings.savefolderpath '.Substring(0,My.Settings.savefolderpath.Length-1) muss weg
      18. If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
      19. My.Settings.savefolderpath = FBD.SelectedPath & "\"
      20. My.Settings.Save()
      21. path = My.Settings.savefolderpath
      22. End If
      23. End Using
      24. End Sub
      Dateien

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Derfuhr“ ()

      Please adding these features and ability to it:

      1-Capturing Screenshots with Mouse click
      2-Capturing Screenshots with these keys : Enter, Tab, Ctrl+A, Ctrl+C, Ctrl+V
      3-Capturing screenshots working in just some process and active after detecting a process and capturing screenshot just of it process
      4-Add ability Changing resolution dpi, like 72 dpi (For reduced Size Image)
      5-Add feature and supporting of mouse Cursor in capturing Screenshots

      ScreenShot Maker Update

      So, hab nun wie ich schon sagte, einen schöneren Code gemacht der viel übersichtlicher ist.
      frmMain
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports System.Drawing.Imaging
      2. Imports System.IO
      3. Public Class FormMain
      4. Private ScreeSize As Size
      5. Private BMP As Bitmap
      6. Private Folder As String = Application.StartupPath
      7. Private SettingsFile As String = "settings.scm"
      8. Private BaseName As String = "Screenshot"
      9. Private Format As ImageFormat = ImageFormat.Bmp
      10. Private Formats() As ImageFormat
      11. Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles Me.Load
      12. Formats = {ImageFormat.Bmp, ImageFormat.Gif, ImageFormat.Jpeg, ImageFormat.Png}
      13. If File.Exists(SettingsFile) Then
      14. Dim Settings() As String = File.ReadAllLines(SettingsFile)
      15. Dim _folder As String = Settings(0)
      16. If Directory.Exists(_folder) Then
      17. Folder = _folder
      18. End If
      19. BaseName = Settings(1)
      20. Dim index As Integer
      21. If Integer.TryParse(Settings(2), index) Then
      22. Format = Formats(index)
      23. End If
      24. If Integer.TryParse(Settings(3), index) Then
      25. ToolStripComboBox1.SelectedIndex = index
      26. Else
      27. ToolStripComboBox1.SelectedIndex = 0
      28. End If
      29. Else
      30. File.WriteAllLines(SettingsFile, {Folder, BaseName, "0", "0"})
      31. ToolStripComboBox1.SelectedIndex = 0
      32. End If
      33. End Sub
      34. Private Sub ScreenShotToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ScreenShotToolStripMenuItem.Click
      35. Me.Opacity = 0
      36. Select Case ToolStripComboBox1.SelectedIndex
      37. Case 0
      38. BMP = GetScreenShot()
      39. PictureBox1.Image = BMP
      40. Me.Opacity = 1
      41. Case 1
      42. Using F As New frmArea With {.Width = Screen.FromControl(Me).Bounds.Width, .Height = Screen.FromControl(Me).Bounds.Height, .Location = New Point(0, 0)}
      43. F.FormBorderStyle = Windows.Forms.FormBorderStyle.None
      44. F.BackgroundImage = GetScreenShot()
      45. If F.ShowDialog <> Windows.Forms.DialogResult.OK Then
      46. Me.Opacity = 1
      47. Return
      48. End If
      49. Me.Opacity = 1
      50. BMP = F.BMP
      51. PictureBox1.Image = BMP
      52. End Using
      53. End Select
      54. End Sub
      55. Private Sub BildSpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BildSpeichernToolStripMenuItem.Click
      56. If Not BMP Is Nothing Then
      57. Dim fNAme As String = Path.Combine(Folder, BaseName & "." & Format.ToString)
      58. Dim Filenumber As Integer = 0
      59. While File.Exists(fNAme)
      60. fNAme = Path.Combine(Folder, BaseName & "_" & Filenumber & "." & Format.ToString)
      61. Filenumber += 1
      62. End While
      63. BMP.Save(If(Filenumber = 0, Path.Combine(Folder, BaseName & "." & Format.ToString), fNAme), Format)
      64. End If
      65. End Sub
      66. Private Sub OptionenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OptionenToolStripMenuItem.Click
      67. Using F As New frmOptions
      68. F.Folder = Folder
      69. F.BaseName = BaseName
      70. F.CbbFormat.DataSource = Formats
      71. F.CbbFormat.SelectedItem = Format
      72. If F.ShowDialog <> Windows.Forms.DialogResult.OK Then
      73. Return
      74. End If
      75. Folder = F.Folder
      76. BaseName = F.BaseName
      77. File.WriteAllLines(SettingsFile, {Folder, BaseName, F.CbbFormat.SelectedIndex.ToString, ToolStripComboBox1.SelectedIndex.ToString})
      78. End Using
      79. End Sub
      80. Private Function GetScreenShot() As Bitmap
      81. ScreeSize = New Size(Screen.FromControl(Me).Bounds.Width, Screen.FromControl(Me).Bounds.Height)
      82. Dim bmp As New Bitmap(ScreeSize.Width, ScreeSize.Height)
      83. Using g As Graphics = Graphics.FromImage(bmp)
      84. g.CopyFromScreen(0, 0, 0, 0, bmp.Size)
      85. End Using
      86. Return bmp
      87. End Function
      88. Private Sub ToolStripComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolStripComboBox1.SelectedIndexChanged
      89. Dim Settings() As String = File.ReadAllLines(SettingsFile)
      90. Settings(3) = ToolStripComboBox1.SelectedIndex.ToString
      91. File.WriteAllLines(SettingsFile, Settings)
      92. End Sub
      93. End Class

      frmArea:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports System.Drawing.Drawing2D
      2. Public Class frmArea
      3. Private SF As New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center}
      4. Private Area As Rectangle = Nothing
      5. Private mDownPos As Point
      6. Public BMP As Bitmap
      7. Private started As Boolean = False
      8. Protected Overrides Sub OnPaint(e As PaintEventArgs)
      9. MyBase.OnPaint(e)
      10. Using GP As GraphicsPath = GetPath()
      11. e.Graphics.FillPath(New SolidBrush(Color.FromArgb(175, Color.Black)), GP)
      12. If mDownPos = Nothing Then
      13. e.Graphics.DrawString("Linke Maustaste gedrückt halten, bereich markieren und Maustaste lösen", New Font("Segoe Print", 40), New SolidBrush(Color.White), ClientRectangle, SF)
      14. End If
      15. End Using
      16. End Sub
      17. Private Function GetPath() As GraphicsPath
      18. Dim G As New GraphicsPath
      19. G.AddLine(0, 0, Width - 1, 0)
      20. G.AddLine(Width - 1, 0, Width - 1, Height - 1)
      21. G.AddLine(Width - 1, Height - 1, 0, Height - 1)
      22. G.AddLine(0, Height - 1, 0, 0)
      23. G.CloseFigure()
      24. If started Then
      25. Dim sx As Integer = Area.X
      26. Dim ex As Integer = Area.X + Area.Width + 1
      27. Dim sy As Integer = Area.Y
      28. Dim ey As Integer = Area.Y + Area.Height + 1
      29. G.AddLine(sx, sy, ex, sy)
      30. G.AddLine(ex, sy, ex, ey)
      31. G.AddLine(ex, ey, sx, ey)
      32. G.AddLine(sx, ey, sx, sy)
      33. End If
      34. Return G
      35. End Function
      36. Private Sub frmArea_Load(sender As Object, e As EventArgs) Handles Me.Load
      37. DoubleBuffered = True
      38. End Sub
      39. Private Sub frmArea_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
      40. If e.Button = Windows.Forms.MouseButtons.Left Then
      41. mDownPos = New Point(e.Location.X, e.Location.Y)
      42. started = True
      43. End If
      44. End Sub
      45. Private Sub frmArea_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
      46. If e.Button = Windows.Forms.MouseButtons.Left Then
      47. Area = New Rectangle(mDownPos, New Size(e.Location.X - mDownPos.X, e.Location.Y - mDownPos.Y))
      48. Invalidate()
      49. End If
      50. End Sub
      51. Private Sub frmArea_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
      52. Dim sx As Integer = Area.X
      53. Dim w As Integer = Area.Width
      54. If w < 0 Then
      55. sx = Area.X - (w * -1) + 1
      56. Area.X = sx
      57. Area.Width *= -1
      58. End If
      59. Dim sy As Integer = Area.Y
      60. Dim h As Integer = Area.Height
      61. If h < 0 Then
      62. sy = Area.Y - (h * -1) + 1
      63. Area.Y = sy
      64. Area.Height *= -1
      65. End If
      66. BMP = New Bitmap(Area.Size.Width + 1, Area.Size.Height + 1)
      67. Using g As Graphics = Graphics.FromImage(BMP)
      68. g.DrawImage(BackgroundImage, New Rectangle(0, 0, BMP.Width, BMP.Height), New Rectangle(Area.X, Area.Y, Area.Width + 1, Area.Height + 1), GraphicsUnit.Pixel)
      69. End Using
      70. Me.DialogResult = Windows.Forms.DialogResult.OK
      71. End Sub
      72. End Class


      frmOptions:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Public Class frmOptions
      2. Public Folder As String
      3. Public BaseName As String
      4. Private Sub frmOptions_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      5. TbBasename.Text = BaseName
      6. End Sub
      7. Private Sub BtnFolder_Click(sender As Object, e As EventArgs) Handles BtnFolder.Click
      8. Using FBD As New FolderBrowserDialog
      9. If FBD.ShowDialog <> Windows.Forms.DialogResult.OK Then
      10. Return
      11. End If
      12. Folder = FBD.SelectedPath
      13. End Using
      14. End Sub
      15. Private Sub BtnCancel_Click(sender As Object, e As EventArgs) Handles BtnCancel.Click
      16. Me.DialogResult = Windows.Forms.DialogResult.Cancel
      17. End Sub
      18. Private Sub BtnOk_Click(sender As Object, e As EventArgs) Handles BtnOk.Click
      19. BaseName = TbBasename.Text
      20. Me.DialogResult = Windows.Forms.DialogResult.OK
      21. End Sub
      22. End Class


      Ich wollte diesen erst umfangreicher machen, habe aber nur eine kleinere als die geplante Version gemacht. Ich werde aber einen Umfangreicheren weiterentwickeln, auch mit Bearbeitungsfunktionen wie z.B. ein MiniPaint damit man auch direkt in den Bildern bereiche markieren kann. Diese Version hab ich dann geplant, im Showroom als OpenSource zu veröffentlichen, dauert aber noch.

      Eine Projektmappe für VS2013 hab ich angehängt.
      Bilder
      • 1.PNG

        35,15 kB, 448×320, 205 mal angesehen
      • 2.png

        10,81 kB, 453×194, 179 mal angesehen
      • 3.png

        47,13 kB, 464×325, 180 mal angesehen
      • 4.png

        124,17 kB, 1.440×900, 196 mal angesehen
      Dateien

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Derfuhr“ ()