Lossless compression on PNG files

 














  WindowState         2
  Form1Position       100,100,1000,800
  FilenameIndex       0


 Partial Friend Class MyApplication
     Private Sub MyApplication_ApplyApplicationDefaults(sender As Object, e As ApplyApplicationDefaultsEventArgs) Handles Me.ApplyApplicationDefaults
         e.HighDpiMode = HighDpiMode.PerMonitorV2
     End Sub
 End Class



  1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
  2. Partial Class Form1
  3.     Inherits System.Windows.Forms.Form

  4.     'Form overrides dispose to clean up the component list.
  5.     <System.Diagnostics.DebuggerNonUserCode()>
  6.     Protected Overrides Sub Dispose(disposing As Boolean)
  7.         Try
  8.             If disposing AndAlso components IsNot Nothing Then
  9.                 components.Dispose()
  10.             End If
  11.         Finally
  12.             MyBase.Dispose(disposing)
  13.         End Try
  14.     End Sub

  15.     'Required by the Windows Form Designer
  16.     Private components As System.ComponentModel.IContainer

  17.     'NOTE: The following procedure is required by the Windows Form Designer
  18.     'It can be modified using the Windows Form Designer.  
  19.     'Do not modify it using the code editor.
  20.     <System.Diagnostics.DebuggerStepThrough()>
  21.     Private Sub InitializeComponent()
  22.         components = New ComponentModel.Container()
  23.         ContextMenuStrip1 = New ContextMenuStrip(components)
  24.         CopyImageToolStripMenuItem = New ToolStripMenuItem()
  25.         PasteImageToolStripMenuItem = New ToolStripMenuItem()
  26.         ContextMenuStrip1.SuspendLayout()
  27.         SuspendLayout()
  28.         ' 
  29.         ' ContextMenuStrip1
  30.         ' 
  31.         ContextMenuStrip1.ImageScalingSize = New Size(48, 48)
  32.         ContextMenuStrip1.Items.AddRange(New ToolStripItem() {CopyImageToolStripMenuItem, PasteImageToolStripMenuItem})
  33.         ContextMenuStrip1.Name = "ContextMenuStrip1"
  34.         ContextMenuStrip1.Size = New Size(293, 116)
  35.         ' 
  36.         ' CopyImageToolStripMenuItem
  37.         ' 
  38.         CopyImageToolStripMenuItem.Name = "CopyImageToolStripMenuItem"
  39.         CopyImageToolStripMenuItem.Size = New Size(292, 56)
  40.         CopyImageToolStripMenuItem.Text = "Copy Image"
  41.         ' 
  42.         ' PasteImageToolStripMenuItem
  43.         ' 
  44.         PasteImageToolStripMenuItem.Name = "PasteImageToolStripMenuItem"
  45.         PasteImageToolStripMenuItem.Size = New Size(292, 56)
  46.         PasteImageToolStripMenuItem.Text = "Paste Image"
  47.         ' 
  48.         ' Form1
  49.         ' 
  50.         AutoScaleDimensions = New SizeF(20.0F, 48.0F)
  51.         AutoScaleMode = AutoScaleMode.Font
  52.         ClientSize = New Size(1659, 909)
  53.         Name = "Form1"
  54.         Text = "Form1"
  55.         ContextMenuStrip1.ResumeLayout(False)
  56.         ResumeLayout(False)
  57.     End Sub

  58.     Friend WithEvents ContextMenuStrip1 As ContextMenuStrip
  59.     Friend WithEvents CopyImageToolStripMenuItem As ToolStripMenuItem
  60.     Friend WithEvents PasteImageToolStripMenuItem As ToolStripMenuItem

  61. End Class


  1. Option Strict On
  2. Imports System.ComponentModel
  3. Imports System.Drawing.Imaging
  4. Imports System.Drawing.Text
  5. Imports System.IO
  6. Imports System.Runtime.InteropServices
  7. Imports System.Text
  8. Public Class Form1
  9.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

  10.         MySetting_Start()

  11.         If Not AddClipboardFormatListener(Me.Handle) Then
  12.             MsgBox("AddClipboardFormatListener")
  13.         End If
  14.         PrintMyBitmap()
  15.         Ref_CurrentBitmap = 0
  16.     End Sub

  17.     Private Sub Form1_HandleCreated(sender As Object, e As EventArgs) Handles Me.HandleCreated
  18.         Me.ContextMenuStrip = ContextMenuStrip1
  19.         Me.AllowDrop = True
  20.         Dpi = GetSystemDpiForProcess(NULL)
  21.         OriginalDpi = Dpi
  22.         PreviousDpi = Dpi

  23.         List_Bitmap = New List(Of Bitmap)
  24.         MyAdjustData()
  25.         MyBitmap = New Bitmap(CX_Screen, 3 * CY_Screen) With
  26.             {.Tag = New Bitmap_Tag("MyBitmap") With {.Saved = 111}}
  27.         List_Bitmap.Add(MyBitmap)
  28.     End Sub

  29.     Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
  30.         If List_Bitmap.Count > 1 Then
  31.             For Each bitmap1 As Bitmap In List_Bitmap
  32.                 Dim tag As Bitmap_Tag = CType(bitmap1.Tag, Bitmap_Tag)
  33.                 If tag.Saved = 0 Then
  34.                     Dim Reply As MsgBoxResult = MsgBox("Save image files", MsgBoxStyle.YesNoCancel)
  35.                     If Reply = MsgBoxResult.Yes Then
  36.                         Module1.SaveImageFile()
  37.                         Exit For
  38.                     ElseIf Reply = MsgBoxResult.No Then
  39.                         Exit For
  40.                     Else
  41.                         e.Cancel = True
  42.                         Exit Sub
  43.                     End If
  44.                 End If
  45.             Next
  46.         End If
  47.         If Not RemoveClipboardFormatListener(Me.Handle) Then
  48.             MsgBox("RemoveClipboardFormatListener")
  49.         End If
  50.         MySetting_Save()

  51.         If DoYouSaveImageIntoSpecifiedFolder Then
  52.             Dim process As New Process() With {
  53.               .StartInfo = New ProcessStartInfo() With {
  54.                  .Verb = "open", .FileName = ClipboardBitmaps_Folder.FullName, .UseShellExecute = True
  55.               }
  56.             }
  57.             process.Start()
  58.         End If
  59.     End Sub
  60.     Sub MySetting_Start()
  61.         Try
  62.             Dim RectangleConverter As New RectangleConverter()
  63.             Dim a As Rectangle =
  64.              CType(RectangleConverter.ConvertFromString(My.Settings.Form1Position), Rectangle)

  65.             Me.Location = a.Location
  66.             Me.Size = a.Size
  67.             Me.WindowState = CType(
  68.               Int32.Parse(My.Settings.WindowState), FormWindowState)
  69.             Bitmap_Tag.Filename_Index = Int32.Parse(My.Settings.FilenameIndex)
  70.         Catch ex As Exception
  71.             Me.WindowState = FormWindowState.Maximized
  72.         End Try
  73.     End Sub
  74.     Sub MySetting_Save()
  75.         Dim RectangleConverter As New RectangleConverter()
  76.         Dim WindowState2 As FormWindowState = Me.WindowState
  77.         Dim Rectange2 As New Rectangle(Me.Location, Me.Size)
  78.         If Me.WindowState <> FormWindowState.Normal Then
  79.             WindowState2 = PreviousWindowState
  80.             Rectange2 = Me.RestoreBounds
  81.         End If
  82.         My.Settings.WindowState = CInt(WindowState2).ToString()
  83.         My.Settings.FilenameIndex = CInt(Bitmap_Tag.Filename_Index).ToString()
  84.         My.Settings.Form1Position = RectangleConverter.ConvertToString(Rectange2)

  85.     End Sub
  86.     Protected Overrides Sub WndProc(ByRef m As Message)
  87.         Static GotDpi As Boolean = False
  88.         Select Case m.Msg
  89.             Case WM_CLIPBOARDUPDATE
  90.                 If IsClipboardFormatAvailable(CF_BITMAP) AndAlso Not DoItMyself Then
  91.                     OpenClipboard(Me.Handle)
  92.                     Dim hBitmap As IntPtr = GetClipboardData(CF_BITMAP)
  93.                     If hBitmap <> NULL Then
  94.                         Dim Bitmap1 As Bitmap = Bitmap.FromHbitmap(hBitmap)
  95.                         Bitmap1.Tag = New Bitmap_Tag("ClipBoard")
  96.                         List_Bitmap.Add(Bitmap1)
  97.                         Ref_CurrentBitmap = List_Bitmap.Count
  98.                         PrintMyBitmap()
  99.                         Ref_CurrentBitmap = 0
  100.                         Me.Invalidate()
  101.                         MessageBeep(MB_OK)
  102.                     End If
  103.                     CloseClipboard()
  104.                     m.Result = IntPtr.Zero
  105.                 End If
  106.             Case WM_MOUSEWHEEL
  107.                 Dim B() As Byte = BitConverter.GetBytes(m.WParam.ToInt64)
  108.                 Dim LittleEndian As Boolean = BitConverter.IsLittleEndian
  109.                 Dim HighWord As Int16 = BitConverter.ToInt16(B, 2)
  110.                 Dim LowWord As UInt16 = BitConverter.ToUInt16(B, 0)
  111.                 Dim bmp As Bitmap = List_Bitmap.Item(Ref_CurrentBitmap)
  112.                 Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
  113.                 If HighWord < 0 Then
  114.                     Tag.y_coordinate += Me.FontHeight * 3
  115.                     If Tag.y_coordinate > bmp.Height - Me.ClientSize.Height Then
  116.                         Tag.y_coordinate = bmp.Height - Me.ClientSize.Height
  117.                     End If
  118.                 Else
  119.                     Tag.y_coordinate -= Me.FontHeight * 3
  120.                     If Tag.y_coordinate < 0 Then Tag.y_coordinate = 0
  121.                 End If
  122.                 Invalidate()
  123.             Case WM_GETDPISCALEDSIZE
  124.                 PreviousDpi = Dpi
  125.                 'MessageBox.Show($"WM_GETDPISCALEDSIZE-----------Dpi={m.WParam.ToInt32}  {PreviousDpi}")
  126.                 Dpi = CUInt(m.WParam.ToInt32)
  127.                 GotDpi = True
  128.             Case WM_DPICHANGED
  129.                 If Not GotDpi Then
  130.                     'MessageBox.Show($"WM_DPICHANGED----------Dpi={m.WParam.ToInt32 And &HFFFF} {PreviousDpi}")
  131.                     GotDpi = False
  132.                     PreviousDpi = Dpi
  133.                     Dpi = CUInt(m.WParam.ToInt32) And &HFFFFUI
  134.                 End If
  135.                 PrintMyBitmap()
  136.                 Ref_CurrentBitmap = 0
  137.                 Me.Invalidate()
  138.             Case WM_DPICHANGED_BEFOREPARENT
  139.             Case WM_DPICHANGED_AFTERPARENT
  140.             Case WM_SIZE
  141.                 If m.WParam.ToInt32 = SIZE_MAXIMIZED Then
  142.                     PreviousWindowState = FormWindowState.Maximized
  143.                 ElseIf m.WParam.ToInt32 = SIZE_RESTORED Then
  144.                     PreviousWindowState = FormWindowState.Normal
  145.                 End If
  146.         End Select
  147.         MyBase.WndProc(m)
  148.     End Sub
  149.     Dim PreviousWindowState As FormWindowState

  150.     Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
  151.         Dim bmp As Bitmap = List_Bitmap.Item(Ref_CurrentBitmap)
  152.         Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
  153.         e.Graphics.DrawImageUnscaled(bmp, 0, -CInt(Tag.y_coordinate))
  154.     End Sub
  155.     Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
  156.         Invalidate()
  157.     End Sub
  158.     Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
  159.         If e.Control Then
  160.             Select Case e.KeyValue
  161.                 Case Keys.N
  162.                     Ref_CurrentBitmap += 1
  163.                     If Ref_CurrentBitmap >= List_Bitmap.Count Then
  164.                         Ref_CurrentBitmap = 0
  165.                     End If
  166.                     Me.Invalidate()
  167.                 Case Keys.P
  168.                     Ref_CurrentBitmap -= 1
  169.                     If Ref_CurrentBitmap < 0 Then
  170.                         Ref_CurrentBitmap = List_Bitmap.Count - 1
  171.                     End If
  172.                     Me.Invalidate()
  173.                 Case Keys.S
  174.                     SaveImageFile()
  175.                 Case Keys.V
  176.                     Call Ctl_V_copy_image_from_clipboard()
  177.                 Case Keys.C
  178.                     Call Ctl_C_paste_image_on_clipboard()
  179.             End Select
  180.         End If
  181.         If e.KeyValue = Keys.F9 Then

  182.         End If
  183.     End Sub

  184.     Private Sub Form1_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
  185.         'MsgBox($"{e.AllowedEffect} {DataFormats.FileDrop} = {e.Data.GetDataPresent(DataFormats.FileDrop)}")

  186.         Using ms As IO.MemoryStream = CType(e.Data.GetData("FilenameW"), IO.MemoryStream),
  187.                sr As New IO.StreamReader(ms, Encoding.Unicode)
  188.             Dim filenames() As String = sr.ReadToEnd().Split(New String() {
  189.                    vbNewLine, String.Empty, vbNullChar}, StringSplitOptions.None)
  190.             ReadImageFile(filenames(0), "DropFile", 0)
  191.         End Using
  192.         Exit Sub
  193.         Dim DataFormats2 As String() = e.Data.GetFormats
  194.         Dim b As New StringBuilder
  195.         Dim ii As Int32 = 0
  196.         For Each str As String In DataFormats2
  197.             ii += 1
  198.             b.AppendLine($"{ii,3:D}" & str)
  199.         Next
  200.         MessageBox.Show(b.ToString)
  201.     End Sub

  202.     Private Sub Form1_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter
  203.         e.Effect = DragDropEffects.Copy
  204.     End Sub

  205.     Dim DoItMyself As Boolean = False

  206.     Sub Ctl_C_paste_image_on_clipboard()
  207.         Clipboard.Clear()
  208.         Clipboard.SetImage(List_Bitmap.Item(Ref_CurrentBitmap))
  209.         DoItMyself = True
  210.         Application.DoEvents()
  211.         DoItMyself = False
  212.     End Sub
  213.     Sub Ctl_V_copy_image_from_clipboard()
  214.         If Clipboard.ContainsImage() Then
  215.             Dim image1 As Image = Clipboard.GetImage()
  216.             If image1 IsNot Nothing Then
  217.                 Dim Bitmap1 As New Bitmap(image1)
  218.                 Bitmap1.Tag = New Bitmap_Tag("ClipBoard")
  219.                 List_Bitmap.Add(Bitmap1) : Ref_CurrentBitmap += 1
  220.                 PrintMyBitmap()
  221.                 Ref_CurrentBitmap = 0
  222.                 Invalidate()
  223.                 MessageBeep(MB_OK)
  224.             End If
  225.         End If
  226.         Exit Sub
  227.         If Clipboard.ContainsFileDropList() Then
  228.             For Each filename As String In Clipboard.GetFileDropList
  229.                 ReadImageFile(filename, "CopyFile", 0)
  230.             Next
  231.         End If
  232.     End Sub

  233.     Private Sub ContextMenuStrip1_Opening(sender As Object, e As CancelEventArgs) Handles ContextMenuStrip1.Opening

  234.     End Sub

  235.     Private Sub CopyImageToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CopyImageToolStripMenuItem.Click
  236.         Call Ctl_V_copy_image_from_clipboard()
  237.     End Sub

  238.     Private Sub PasteImageToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PasteImageToolStripMenuItem.Click
  239.         Call Ctl_C_paste_image_on_clipboard()
  240.     End Sub
  241.     Private Sub Form1_Layout(sender As Object, e As LayoutEventArgs) Handles Me.Layout
  242.         If PreviousDpi = Dpi OrElse
  243.             Me.WindowState = FormWindowState.Maximized OrElse
  244.             Me.WindowState = FormWindowState.Minimized Then Exit Sub
  245.         Try
  246.             Dim Pos_Scaling As Double = Dpi / PreviousDpi
  247.             Me.Size = New Drawing.Size(
  248.                 CInt(Me.Size.Width * Pos_Scaling), CInt(Me.Height * Pos_Scaling))
  249.             SetWindowPos(Me.Handle, Me.Handle,
  250.                              CInt(Location.X * Pos_Scaling),
  251.                              CInt(Location.Y * Pos_Scaling),
  252.                              CInt(Size.Width),
  253.                              CInt(Size.Height),
  254.                              SWP_NOACTIVATE Or SWP_NOZORDER)
  255.             PreviousDpi = Dpi
  256.             MessageBeep(MB_OK)
  257.         Catch ex As Exception
  258.             MsgBox($"Form1_Layout error {ex.Message}")
  259.         End Try
  260.     End Sub

  261.     Dim MyClientSize As Size
  262.     Dim MyLocation As Point

  263. End Class
  264. Module Module1
  265.     Public MyAdjustFontSize As Double
  266.     Public Dpi As UInt32
  267.     Public PreviousDpi, OriginalDpi As Double
  268.     Public CX_Screen, CY_Screen As Int32
  269.     Public ClipboardBitmaps_Folder As IO.DirectoryInfo
  270.     Public WorkArea As RECT
  271.     Public MyBitmap As Bitmap
  272.     Public List_Bitmap As List(Of Bitmap)
  273.     Public Ref_CurrentBitmap As Int32
  274.     Class Bitmap_Tag
  275.         Public Shared Filename_Index As Int32
  276.         Public Time As DateTime
  277.         Public Saved As Int32
  278.         Public SequenceNumber As UInt32
  279.         Public Name As String
  280.         Public y_coordinate As Int64
  281.         Sub New(name As String)
  282.             Me.Name = $"{name,9}"
  283.             Time = DateTime.Now
  284.             SequenceNumber = GetClipboardSequenceNumber()
  285.             Saved = 0
  286.         End Sub
  287.     End Class
  288.     Public DoYouSaveImageIntoSpecifiedFolder As Boolean = False
  289.     Sub SaveImageFile()
  290.         For Each bmp As Bitmap In List_Bitmap
  291.             Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
  292.             If Tag.Saved > 0 Then Continue For
  293.             If ClipboardBitmaps_Folder Is Nothing Then
  294.                 ClipboardBitmaps_Folder = New IO.DirectoryInfo(IO.Path.Combine(
  295.                     Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
  296.                                                         "Clipboard"))
  297.                 If Not ClipboardBitmaps_Folder.Exists() Then
  298.                     ClipboardBitmaps_Folder.Create()
  299.                     Bitmap_Tag.Filename_Index = 0
  300.                 End If
  301.             End If
  302.             Bitmap_Tag.Filename_Index += 1
  303.             'MsgBox($"Bitmap_Tag.Filename_Index={Bitmap_Tag.Filename_Index}")
  304.             Dim filename As String = ClipboardBitmaps_Folder.FullName & "\PIC_" &
  305.               $"{Tag.Time:yyMMdd_hhmmss}_{Bitmap_Tag.Filename_Index}.png"
  306.             Dim fileInfo As New FileInfo(filename)
  307.             If fileInfo.Exists() Then
  308.                 MsgBox($"Overwrite {fileInfo.FullName}")
  309.             End If
  310.             Using FileStream As New IO.FileStream(filename, IO.FileMode.CreateNew)
  311.                 bmp.Save(FileStream, ImageFormat.Png)
  312.                 Tag.Saved = 1
  313.                 DoYouSaveImageIntoSpecifiedFolder = True
  314.             End Using
  315.         Next
  316.     End Sub
  317.     Sub PrintMyBitmap()
  318.         Static Adjust1 As Double = 0.0377 * 1.01
  319.         Static font_height1 As Double = (CDbl(CY_Screen) / Dpi) * Adjust1
  320.         Dim font_height As Single = CSng(font_height1 * Dpi / OriginalDpi)
  321.         Try
  322.             Using _
  323.                  Font2 As New Font(New FontFamily(GenericFontFamilies.Monospace), font_height, FontStyle.Regular, GraphicsUnit.Inch),
  324.                  SolidBrush2 As New SolidBrush(Color.Black),
  325.                  SolidBrush1_background As New SolidBrush(Color.White),
  326.                  SolidBrush2_background As New SolidBrush(Color.Wheat),
  327.                  pen2 As New Pen(Color.Crimson, 10),
  328.                  g2 As Graphics = Graphics.FromImage(MyBitmap)
  329.                 Dim Rectangle1 As New Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height)
  330.                 Dim MyDataTMP As String = MyData()
  331.                 g2.FillRectangle(SolidBrush1_background, Rectangle1)
  332.                 g2.DrawString(MyDataTMP, Font2, SolidBrush2, Rectangle1)
  333.                 Dim sizeF As SizeF = g2.MeasureString(MyDataTMP, Font2, MyBitmap.Width, StringFormat.GenericDefault)
  334.                 Dim Start_X As Int32 = CInt(Math.Ceiling(sizeF.Height))
  335.                 Dim Rectangle2 As New Rectangle(0, Start_X, MyBitmap.Width, MyBitmap.Height - Start_X)
  336.                 g2.FillRectangle(SolidBrush2_background, Rectangle2)
  337.                 g2.DrawRectangle(pen2, Rectangle2)
  338.                 g2.DrawString(ListAllBitmaps(), Font2, SolidBrush2, Rectangle2)
  339.             End Using
  340.         Catch ex As Exception
  341.             MsgBox("piantMyBitmap error")
  342.         End Try
  343.     End Sub
  344.     Function ListAllBitmaps() As String
  345.         Dim AllBitmapData As New Text.StringBuilder(4 << 20)
  346.         Dim index As Int32 = 1
  347.         Const FormatStr As String =
  348.             "{0,2}{1,10} {2,16} {3,6} {4,6} {5,5} {6,5}" & vbNewLine
  349.         AllBitmapData.AppendFormat(FormatStr,
  350.            "", "Name", "PixelFormat", "width", "height", "X-Dpi", "Y-Dpi")
  351.         For Each bmp As Bitmap In List_Bitmap
  352.             Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
  353.             AllBitmapData.AppendFormat(FormatStr,
  354.               index, Tag.Name, bmp.PixelFormat,
  355.               bmp.Width, bmp.Height,
  356.               bmp.HorizontalResolution, bmp.VerticalResolution)
  357.             index += 1
  358.         Next
  359.         Return AllBitmapData.ToString
  360.     End Function
  361.     Function MyData() As String
  362.         Dim str2 As New Text.StringBuilder(1 << 20)
  363.         For Each ici As ImageCodecInfo In ImageCodecInfo.GetImageEncoders()
  364.             str2.AppendLine($"({ici.FormatDescription,4}) MimeType={ici.MimeType,-12} Extension={ici.FilenameExtension}")
  365.         Next
  366.         MyAdjustData()
  367.         str2.AppendLine($"Screen(CX,CY)=({CX_Screen},{CY_Screen}) WorkArea=({WorkArea.left},{WorkArea.top},{WorkArea.right},{WorkArea.bottom})")
  368.         str2.Append($"OriginalDpi={OriginalDpi} Dpi={Dpi}")
  369.         Return str2.ToString
  370.     End Function
  371.     Sub MyAdjustData()
  372.         CX_Screen = GetSystemMetricsForDpi(SM_CXSCREEN, Dpi)
  373.         CY_Screen = GetSystemMetricsForDpi(SM_CYSCREEN, Dpi)
  374.         If Not SystemParametersInfoForDpi(SPI_GETWORKAREA, 0, WorkArea, 0, 0) Then
  375.             MessageBeep(2)
  376.             MsgBox("SystemParametersInfo")
  377.         End If
  378.     End Sub
  379.     Sub ReadImageFile(filename As String, FromWhere As String, SetSaved As Int32)
  380.         Dim fileInfo As New FileInfo(filename)
  381.         If fileInfo.Exists Then
  382.             Try
  383.                 Using filestream As FileStream = fileInfo.Open(FileMode.Open, FileAccess.Read),
  384.                       image1 As Image = Bitmap.FromStream(filestream)
  385.                     Dim Bitmap_3D_paint As New Bitmap(image1) With {
  386.                      .Tag = New Bitmap_Tag(FromWhere) With {.Saved = SetSaved}
  387.                     }
  388.                     List_Bitmap.Add(Bitmap_3D_paint)
  389.                     PrintMyBitmap()
  390.                     Ref_CurrentBitmap = 0
  391.                     Form1.Invalidate()
  392.                     MessageBeep(MB_OK)
  393.                 End Using
  394.             Catch ex As Exception
  395.                 MsgBox(ex.Message & vbNewLine & ex.StackTrace)
  396.             End Try
  397.         Else
  398.             MsgBox(fileInfo.FullName)
  399.         End If
  400.     End Sub
  401.     Public ReadOnly NULL As IntPtr = IntPtr.Zero
  402.     Declare Unicode Function SetProcessDPIAware Lib "user32" () As Boolean
  403.     Declare Unicode Function IsProcessDPIAware Lib "user32" () As Boolean
  404.     Declare Unicode Function GetDpiForWindow Lib "user32" (
  405.                _In_HWND_hwnd As IntPtr) As UInt32
  406.     Declare Unicode Function GetDpiForSystem Lib "user32" () As UInt32
  407.     Declare Unicode Function GetSystemDpiForProcess Lib "user32" (
  408.                _In_HANDLE_hProcess As IntPtr) As UInt32
  409.     Declare Unicode Function GetSystemMetrics Lib "User32" (
  410.                _In_int_nIndex As Int32) As Int32

  411.     Declare Unicode Function GetSystemMetricsForDpi Lib "User32" (
  412.                _In_int_nIndex As Int32,
  413.                _In_UINT_dpi As UInt32) As Int32
  414.     Declare Unicode Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoW" (
  415.                _In_UINT_uiAction As UInt32,
  416.                _In_UINT_uiParam As UInt32,
  417.                _Pre_maybenull__Post_valid_PVOID_pvParam As IntPtr,
  418.                _In_UINT_fWinIni As UInt32) As Boolean
  419.     Declare Unicode Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoW" (
  420.                _In_UINT_uiAction As UInt32,
  421.                _In_UINT_uiParam As UInt32,
  422.          <InAttribute, Out> ByRef _Pre_maybenull__Post_valid_PVOID_pvParam As RECT,
  423.                _In_UINT_fWinIni As UInt32) As Boolean
  424.     Declare Function SystemParametersInfoForDpi Lib "user32" (
  425.                _In_UINT_uiAction As UInt32,
  426.                _In_UINT_uiParam As UInt32,
  427.                _Pre_maybenull_Post_valid_PVOID_pvParam As IntPtr,
  428.                _In_UINT_fWinIni As UInt32,
  429.                _In_UINT_dpi As UInt32) As Boolean
  430.     Declare Unicode Function SystemParametersInfoForDpi Lib "user32" (
  431.                _In_UINT_uiAction As UInt32,
  432.                _In_UINT_uiParam As UInt32,
  433.       <InAttribute, Out> ByRef _Pre_maybenull__Post_valid_PVOID_pvParam As RECT,
  434.                _In_UINT_fWinIni As UInt32,
  435.                _In_UINT_dpi As UInt32) As Boolean
  436.     Declare Unicode Function GetWindowPlacement Lib "User32" (
  437.                 _In_HWND_hWnd As IntPtr,
  438.        <InAttribute, Out> ByRef _Inout_WINDOWPLACEMENT_lpwndpl As WINDOWPLACEMENT) As Boolean
  439.     Declare Unicode Function GetWindowPlacement Lib "User32" (
  440.                 _In_HWND_hWnd As IntPtr,
  441.                 _Inout_WINDOWPLACEMENT_lpwndpl As IntPtr) As Boolean
  442.     Declare Unicode Function SetWindowPlacement Lib "User32" (
  443.                 _In_HWND_hWnd As IntPtr,
  444.                 _In_Const_WINDOWPLACEMENT_lpwndpl As IntPtr) As Boolean
  445.     Declare Function OpenClipboard Lib "user32" (
  446.                _In_opt_HWND_hWndNewOwner As IntPtr) As Boolean
  447.     Declare Function CloseClipboard Lib "user32" () As Boolean
  448.     Declare Function EmptyClipboard Lib "user32" () As Boolean
  449.     Declare Function SetClipboardData Lib "user32" (
  450.              _In_UINT_uFormat As UInt32,
  451.              _In_opt_HANDLE_hMem As IntPtr) As IntPtr
  452.     Declare Function GetClipboardData Lib "user32" (
  453.              _In_UINT_uFormat As UInt32) As IntPtr
  454.     Declare Function IsClipboardFormatAvailable Lib "user32" (
  455.             _In_UINT_format As UInt32) As Boolean
  456.     Declare Unicode Function SetWindowPos Lib "User32" (
  457.             _In_HWND_hWnd As IntPtr,
  458.             _In_opt_HWND_hWndInsertAfter As IntPtr,
  459.             _In_int_X As Int32,
  460.             _In_int_Y As Int32,
  461.             _In_int_cx As Int32,
  462.             _In_int_cy As Int32,
  463.             _In_UINT_uFlags As UInt32) As Boolean
  464.     Declare Function GetClipboardSequenceNumber Lib "User32" () As UInt32
  465.     Declare Function AddClipboardFormatListener Lib "User32" (
  466.            _In_HWND_hwnd As IntPtr) As Boolean
  467.     Declare Function RemoveClipboardFormatListener Lib "user32" (
  468.            _In_HWND_hwnd As IntPtr) As Boolean

  469.     Declare Function GetUpdatedClipboardFormats Lib "user32" (
  470.            <Out> _Out_writes__cFormats_PUINT_lpuiFormats As UInt32,
  471.            _In_UINT_cFormats As UInt32,
  472.            <Out()> ByRef _Out_PUINT_pcFormatsOut As UInt32) As Boolean
  473.     Declare Unicode Function MessageBeep Lib "User32" (
  474.                 _In_UINT_uType As UInt32) As Boolean
  475.     Structure WINDOWPLACEMENT
  476.         Dim length As UInt32
  477.         Dim flags As UInt32
  478.         Dim showCmd As UInt32
  479.         Dim ptMinPosition As Point
  480.         Dim ptMaxPosition As Point
  481.         Dim rcNormalPosition As RECT
  482.     End Structure

  483.     Public Const WM_CLIPBOARDUPDATE As UInt32 = &H31D
  484.     '    * Predefined Clipboard Formats
  485.     Public Const CF_TEXT As Int32 = 1
  486.     Public Const CF_BITMAP As Int32 = 2
  487.     Public Const CF_METAFILEPICT As Int32 = 3
  488.     Public Const CF_SYLK As Int32 = 4
  489.     Public Const CF_DIF As Int32 = 5
  490.     Public Const CF_TIFF As Int32 = 6
  491.     Public Const CF_OEMTEXT As Int32 = 7
  492.     Public Const CF_DIB As Int32 = 8
  493.     Public Const CF_PALETTE As Int32 = 9
  494.     Public Const CF_PENDATA As Int32 = 10
  495.     Public Const CF_RIFF As Int32 = 11
  496.     Public Const CF_WAVE As Int32 = 12
  497.     Public Const CF_UNICODETEXT As Int32 = 13
  498.     Public Const CF_ENHMETAFILE As Int32 = 14
  499.     Public Const CF_HDROP As Int32 = 15
  500.     Public Const CF_LOCALE As Int32 = 16
  501.     Public Const CF_DIBV5 As Int32 = 17
  502.     Public Const CF_MAX As Int32 = 18
  503.     Public Const CF_OWNERDISPLAY As Int32 = &H80
  504.     Public Const CF_DSPTEXT As Int32 = &H81
  505.     Public Const CF_DSPBITMAP As Int32 = &H82
  506.     Public Const CF_DSPMETAFILEPICT As Int32 = &H83
  507.     Public Const CF_DSPENHMETAFILE As Int32 = &H8E
  508.     ' * "Private" formats don't get GlobalFree()'d
  509.     Public Const CF_PRIVATEFIRST As Int32 = &H200
  510.     Public Const CF_PRIVATELAST As Int32 = &H2FF
  511.     Public Const CF_GDIOBJFIRST As Int32 = &H300
  512.     Public Const CF_GDIOBJLAST As Int32 = &H3FF

  513.     Public Const SPIF_UPDATEINIFILE As UInt32 = &H1
  514.     Public Const SPIF_SENDWININICHANGE As UInt32 = &H2
  515.     Public Const SPIF_SENDCHANGE As UInt32 = SPIF_SENDWININICHANGE
  516.     ' * Parameter for SystemParametersInfo.
  517.     Public Const SPI_GETBEEP As UInt32 = &H1
  518.     Public Const SPI_SETBEEP As UInt32 = &H2
  519.     Public Const SPI_GETMOUSE As UInt32 = &H3
  520.     Public Const SPI_SETMOUSE As UInt32 = &H4
  521.     Public Const SPI_GETBORDER As UInt32 = &H5
  522.     Public Const SPI_SETBORDER As UInt32 = &H6
  523.     Public Const SPI_GETKEYBOARDSPEED As UInt32 = &HA
  524.     Public Const SPI_SETKEYBOARDSPEED As UInt32 = &HB
  525.     Public Const SPI_LANGDRIVER As UInt32 = &HC
  526.     Public Const SPI_ICONHORIZONTALSPACING As UInt32 = &HD
  527.     Public Const SPI_GETSCREENSAVETIMEOUT As UInt32 = &HE
  528.     Public Const SPI_SETSCREENSAVETIMEOUT As UInt32 = &HF
  529.     Public Const SPI_GETSCREENSAVEACTIVE As UInt32 = &H10
  530.     Public Const SPI_SETSCREENSAVEACTIVE As UInt32 = &H11
  531.     Public Const SPI_GETGRIDGRANULARITY As UInt32 = &H12
  532.     Public Const SPI_SETGRIDGRANULARITY As UInt32 = &H13
  533.     Public Const SPI_SETDESKWALLPAPER As UInt32 = &H14
  534.     Public Const SPI_SETDESKPATTERN As UInt32 = &H15
  535.     Public Const SPI_GETKEYBOARDDELAY As UInt32 = &H16
  536.     Public Const SPI_SETKEYBOARDDELAY As UInt32 = &H17
  537.     Public Const SPI_ICONVERTICALSPACING As UInt32 = &H18
  538.     Public Const SPI_GETICONTITLEWRAP As UInt32 = &H19
  539.     Public Const SPI_SETICONTITLEWRAP As UInt32 = &H1A
  540.     Public Const SPI_GETMENUDROPALIGNMENT As UInt32 = &H1B
  541.     Public Const SPI_SETMENUDROPALIGNMENT As UInt32 = &H1C
  542.     Public Const SPI_SETDOUBLECLKWIDTH As UInt32 = &H1D
  543.     Public Const SPI_SETDOUBLECLKHEIGHT As UInt32 = &H1E
  544.     Public Const SPI_GETICONTITLELOGFONT As UInt32 = &H1F
  545.     Public Const SPI_SETDOUBLECLICKTIME As UInt32 = &H20
  546.     Public Const SPI_SETMOUSEBUTTONSWAP As UInt32 = &H21
  547.     Public Const SPI_SETICONTITLELOGFONT As UInt32 = &H22
  548.     Public Const SPI_GETFASTTASKSWITCH As UInt32 = &H23
  549.     Public Const SPI_SETFASTTASKSWITCH As UInt32 = &H24
  550.     Public Const SPI_SETDRAGFULLWINDOWS As UInt32 = &H25
  551.     Public Const SPI_GETDRAGFULLWINDOWS As UInt32 = &H26
  552.     Public Const SPI_GETNONCLIENTMETRICS As UInt32 = &H29
  553.     Public Const SPI_SETNONCLIENTMETRICS As UInt32 = &H2A
  554.     Public Const SPI_GETMINIMIZEDMETRICS As UInt32 = &H2B
  555.     Public Const SPI_SETMINIMIZEDMETRICS As UInt32 = &H2C
  556.     Public Const SPI_GETICONMETRICS As UInt32 = &H2D
  557.     Public Const SPI_SETICONMETRICS As UInt32 = &H2E
  558.     Public Const SPI_SETWORKAREA As UInt32 = &H2F
  559.     Public Const SPI_GETWORKAREA As UInt32 = &H30
  560.     Public Const SPI_SETPENWINDOWS As UInt32 = &H31

  561.     Public Const SPI_GETHIGHCONTRAST As UInt32 = &H42
  562.     Public Const SPI_SETHIGHCONTRAST As UInt32 = &H43
  563.     Public Const SPI_GETKEYBOARDPREF As UInt32 = &H44
  564.     Public Const SPI_SETKEYBOARDPREF As UInt32 = &H45
  565.     Public Const SPI_GETSCREENREADER As UInt32 = &H46
  566.     Public Const SPI_SETSCREENREADER As UInt32 = &H47
  567.     Public Const SPI_GETANIMATION As UInt32 = &H48
  568.     Public Const SPI_SETANIMATION As UInt32 = &H49
  569.     Public Const SPI_GETFONTSMOOTHING As UInt32 = &H4A
  570.     Public Const SPI_SETFONTSMOOTHING As UInt32 = &H4B
  571.     Public Const SPI_SETDRAGWIDTH As UInt32 = &H4C
  572.     Public Const SPI_SETDRAGHEIGHT As UInt32 = &H4D
  573.     Public Const SPI_SETHANDHELD As UInt32 = &H4E
  574.     Public Const SPI_GETLOWPOWERTIMEOUT As UInt32 = &H4F
  575.     Public Const SPI_GETPOWEROFFTIMEOUT As UInt32 = &H50
  576.     Public Const SPI_SETLOWPOWERTIMEOUT As UInt32 = &H51
  577.     Public Const SPI_SETPOWEROFFTIMEOUT As UInt32 = &H52
  578.     Public Const SPI_GETLOWPOWERACTIVE As UInt32 = &H53
  579.     Public Const SPI_GETPOWEROFFACTIVE As UInt32 = &H54
  580.     Public Const SPI_SETLOWPOWERACTIVE As UInt32 = &H55
  581.     Public Const SPI_SETPOWEROFFACTIVE As UInt32 = &H56
  582.     Public Const SPI_SETCURSORS As UInt32 = &H57
  583.     Public Const SPI_SETICONS As UInt32 = &H58
  584.     Public Const SPI_GETDEFAULTINPUTLANG As UInt32 = &H59
  585.     Public Const SPI_SETDEFAULTINPUTLANG As UInt32 = &H5A
  586.     Public Const SPI_SETLANGTOGGLE As UInt32 = &H5B
  587.     Public Const SPI_GETWINDOWSEXTENSION As UInt32 = &H5C
  588.     Public Const SPI_SETMOUSETRAILS As UInt32 = &H5D
  589.     Public Const SPI_GETMOUSETRAILS As UInt32 = &H5E
  590.     Public Const SPI_SETSCREENSAVERRUNNING As UInt32 = &H61
  591.     Public Const SPI_SCREENSAVERRUNNING As UInt32 = SPI_SETSCREENSAVERRUNNING
  592.     Public Const SPI_GETFILTERKEYS As UInt32 = &H32
  593.     Public Const SPI_SETFILTERKEYS As UInt32 = &H33
  594.     Public Const SPI_GETTOGGLEKEYS As UInt32 = &H34
  595.     Public Const SPI_SETTOGGLEKEYS As UInt32 = &H35
  596.     Public Const SPI_GETMOUSEKEYS As UInt32 = &H36
  597.     Public Const SPI_SETMOUSEKEYS As UInt32 = &H37
  598.     Public Const SPI_GETSHOWSOUNDS As UInt32 = &H38
  599.     Public Const SPI_SETSHOWSOUNDS As UInt32 = &H39
  600.     Public Const SPI_GETSTICKYKEYS As UInt32 = &H3A
  601.     Public Const SPI_SETSTICKYKEYS As UInt32 = &H3B
  602.     Public Const SPI_GETACCESSTIMEOUT As UInt32 = &H3C
  603.     Public Const SPI_SETACCESSTIMEOUT As UInt32 = &H3D
  604.     Public Const SPI_GETSERIALKEYS As UInt32 = &H3E
  605.     Public Const SPI_SETSERIALKEYS As UInt32 = &H3F
  606.     Public Const SPI_GETSOUNDSENTRY As UInt32 = &H40
  607.     Public Const SPI_SETSOUNDSENTRY As UInt32 = &H41
  608.     Public Const SPI_GETSNAPTODEFBUTTON As UInt32 = &H5F
  609.     Public Const SPI_SETSNAPTODEFBUTTON As UInt32 = &H60
  610.     Public Const SPI_GETMOUSEHOVERWIDTH As UInt32 = &H62
  611.     Public Const SPI_SETMOUSEHOVERWIDTH As UInt32 = &H63
  612.     Public Const SPI_GETMOUSEHOVERHEIGHT As UInt32 = &H64
  613.     Public Const SPI_SETMOUSEHOVERHEIGHT As UInt32 = &H65
  614.     Public Const SPI_GETMOUSEHOVERTIME As UInt32 = &H66
  615.     Public Const SPI_SETMOUSEHOVERTIME As UInt32 = &H67
  616.     Public Const SPI_GETWHEELSCROLLLINES As UInt32 = &H68
  617.     Public Const SPI_SETWHEELSCROLLLINES As UInt32 = &H69
  618.     Public Const SPI_GETMENUSHOWDELAY As UInt32 = &H6A
  619.     Public Const SPI_SETMENUSHOWDELAY As UInt32 = &H6B

  620.     Public Const SPI_GETWHEELSCROLLCHARS As UInt32 = &H6C
  621.     Public Const SPI_SETWHEELSCROLLCHARS As UInt32 = &H6D

  622.     Public Const SPI_GETSHOWIMEUI As UInt32 = &H6E
  623.     Public Const SPI_SETSHOWIMEUI As UInt32 = &H6F


  624.     Public Const SPI_GETMOUSESPEED As UInt32 = &H70
  625.     Public Const SPI_SETMOUSESPEED As UInt32 = &H71
  626.     Public Const SPI_GETSCREENSAVERRUNNING As UInt32 = &H72
  627.     Public Const SPI_GETDESKWALLPAPER As UInt32 = &H73

  628.     Public Const SPI_GETAUDIODESCRIPTION As UInt32 = &H74
  629.     Public Const SPI_SETAUDIODESCRIPTION As UInt32 = &H75

  630.     Public Const SPI_GETSCREENSAVESECURE As UInt32 = &H76
  631.     Public Const SPI_SETSCREENSAVESECURE As UInt32 = &H77

  632.     Public Const SPI_GETHUNGAPPTIMEOUT As UInt32 = &H78
  633.     Public Const SPI_SETHUNGAPPTIMEOUT As UInt32 = &H79
  634.     Public Const SPI_GETWAITTOKILLTIMEOUT As UInt32 = &H7A
  635.     Public Const SPI_SETWAITTOKILLTIMEOUT As UInt32 = &H7B
  636.     Public Const SPI_GETWAITTOKILLSERVICETIMEOUT As UInt32 = &H7C
  637.     Public Const SPI_SETWAITTOKILLSERVICETIMEOUT As UInt32 = &H7D
  638.     Public Const SPI_GETMOUSEDOCKTHRESHOLD As UInt32 = &H7E
  639.     Public Const SPI_SETMOUSEDOCKTHRESHOLD As UInt32 = &H7F
  640.     Public Const SPI_GETPENDOCKTHRESHOLD As UInt32 = &H80
  641.     Public Const SPI_SETPENDOCKTHRESHOLD As UInt32 = &H81
  642.     Public Const SPI_GETWINARRANGING As UInt32 = &H82
  643.     Public Const SPI_SETWINARRANGING As UInt32 = &H83
  644.     Public Const SPI_GETMOUSEDRAGOUTTHRESHOLD As UInt32 = &H84
  645.     Public Const SPI_SETMOUSEDRAGOUTTHRESHOLD As UInt32 = &H85
  646.     Public Const SPI_GETPENDRAGOUTTHRESHOLD As UInt32 = &H86
  647.     Public Const SPI_SETPENDRAGOUTTHRESHOLD As UInt32 = &H87
  648.     Public Const SPI_GETMOUSESIDEMOVETHRESHOLD As UInt32 = &H88
  649.     Public Const SPI_SETMOUSESIDEMOVETHRESHOLD As UInt32 = &H89
  650.     Public Const SPI_GETPENSIDEMOVETHRESHOLD As UInt32 = &H8A
  651.     Public Const SPI_SETPENSIDEMOVETHRESHOLD As UInt32 = &H8B
  652.     Public Const SPI_GETDRAGFROMMAXIMIZE As UInt32 = &H8C
  653.     Public Const SPI_SETDRAGFROMMAXIMIZE As UInt32 = &H8D
  654.     Public Const SPI_GETSNAPSIZING As UInt32 = &H8E
  655.     Public Const SPI_SETSNAPSIZING As UInt32 = &H8F
  656.     Public Const SPI_GETDOCKMOVING As UInt32 = &H90
  657.     Public Const SPI_SETDOCKMOVING As UInt32 = &H91
  658.     Public Const MB_OK As UInt32 = 0
  659.     Public Const SM_CXSCREEN As Int32 = 0
  660.     Public Const SM_CYSCREEN As Int32 = 1
  661.     Public Const SM_CXVSCROLL As Int32 = 2
  662.     Public Const SM_CYHSCROLL As Int32 = 3
  663.     Public Const SM_CYCAPTION As Int32 = 4
  664.     Public Const SM_CXBORDER As Int32 = 5
  665.     Public Const SM_CYBORDER As Int32 = 6
  666.     Public Const SM_CXDLGFRAME As Int32 = 7
  667.     Public Const SM_CYDLGFRAME As Int32 = 8
  668.     Public Const SM_CYVTHUMB As Int32 = 9
  669.     Public Const SM_CXHTHUMB As Int32 = 10
  670.     Public Const SM_CXICON As Int32 = 11
  671.     Public Const SM_CYICON As Int32 = 12
  672.     Public Const SM_CXCURSOR As Int32 = 13
  673.     Public Const SM_CYCURSOR As Int32 = 14
  674.     Public Const SM_CYMENU As Int32 = 15
  675.     Public Const SM_CXFULLSCREEN As Int32 = 16
  676.     Public Const SM_CYFULLSCREEN As Int32 = 17
  677.     Public Const SM_CYKANJIWINDOW As Int32 = 18
  678.     Public Const SM_MOUSEPRESENT As Int32 = 19
  679.     Public Const SM_CYVSCROLL As Int32 = 20
  680.     Public Const SM_CXHSCROLL As Int32 = 21
  681.     Public Const SM_DEBUG As Int32 = 22
  682.     Public Const SM_SWAPBUTTON As Int32 = 23
  683.     Public Const SM_RESERVED1 As Int32 = 24
  684.     Public Const SM_RESERVED2 As Int32 = 25
  685.     Public Const SM_RESERVED3 As Int32 = 26
  686.     Public Const SM_RESERVED4 As Int32 = 27
  687.     Public Const SM_CXMIN As Int32 = 28
  688.     Public Const SM_CYMIN As Int32 = 29
  689.     Public Const SM_CXSIZE As Int32 = 30
  690.     Public Const SM_CYSIZE As Int32 = 31
  691.     Public Const SM_CXFRAME As Int32 = 32
  692.     Public Const SM_CYFRAME As Int32 = 33
  693.     Public Const SM_CXMINTRACK As Int32 = 34
  694.     Public Const SM_CYMINTRACK As Int32 = 35
  695.     Public Const SM_CXDOUBLECLK As Int32 = 36
  696.     Public Const SM_CYDOUBLECLK As Int32 = 37
  697.     Public Const SM_CXICONSPACING As Int32 = 38
  698.     Public Const SM_CYICONSPACING As Int32 = 39
  699.     Public Const SM_MENUDROPALIGNMENT As Int32 = 40
  700.     Public Const SM_PENWINDOWS As Int32 = 41
  701.     Public Const SM_DBCSENABLED As Int32 = 42
  702.     Public Const SM_CMOUSEBUTTONS As Int32 = 43

  703.     Public Const SM_CXFIXEDFRAME As Int32 = SM_CXDLGFRAME
  704.     Public Const SM_CYFIXEDFRAME As Int32 = SM_CYDLGFRAME
  705.     Public Const SM_CXSIZEFRAME As Int32 = SM_CXFRAME
  706.     Public Const SM_CYSIZEFRAME As Int32 = SM_CYFRAME
  707.     Public Const SM_SECURE As Int32 = 44
  708.     Public Const SM_CXEDGE As Int32 = 45
  709.     Public Const SM_CYEDGE As Int32 = 46
  710.     Public Const SM_CXMINSPACING As Int32 = 47
  711.     Public Const SM_CYMINSPACING As Int32 = 48
  712.     Public Const SM_CXSMICON As Int32 = 49
  713.     Public Const SM_CYSMICON As Int32 = 50
  714.     Public Const SM_CYSMCAPTION As Int32 = 51
  715.     Public Const SM_CXSMSIZE As Int32 = 52
  716.     Public Const SM_CYSMSIZE As Int32 = 53
  717.     Public Const SM_CXMENUSIZE As Int32 = 54
  718.     Public Const SM_CYMENUSIZE As Int32 = 55
  719.     Public Const SM_ARRANGE As Int32 = 56
  720.     Public Const SM_CXMINIMIZED As Int32 = 57
  721.     Public Const SM_CYMINIMIZED As Int32 = 58
  722.     Public Const SM_CXMAXTRACK As Int32 = 59
  723.     Public Const SM_CYMAXTRACK As Int32 = 60
  724.     Public Const SM_CXMAXIMIZED As Int32 = 61
  725.     Public Const SM_CYMAXIMIZED As Int32 = 62
  726.     Public Const SM_NETWORK As Int32 = 63
  727.     Public Const SM_CLEANBOOT As Int32 = 67
  728.     Public Const SM_CXDRAG As Int32 = 68
  729.     Public Const SM_CYDRAG As Int32 = 69
  730.     Public Const SM_SHOWSOUNDS As Int32 = 70
  731.     Public Const SM_CXMENUCHECK As Int32 = 71
  732.     Public Const SM_CYMENUCHECK As Int32 = 72
  733.     Public Const SM_SLOWMACHINE As Int32 = 73
  734.     Public Const SM_MIDEASTENABLED As Int32 = 74
  735.     Public Const SM_MOUSEWHEELPRESENT As Int32 = 75
  736.     Public Const SM_XVIRTUALSCREEN As Int32 = 76
  737.     Public Const SM_YVIRTUALSCREEN As Int32 = 77
  738.     Public Const SM_CXVIRTUALSCREEN As Int32 = 78
  739.     Public Const SM_CYVIRTUALSCREEN As Int32 = 79
  740.     Public Const SM_CMONITORS As Int32 = 80
  741.     Public Const SM_SAMEDISPLAYFORMAT As Int32 = 81
  742.     Public Const SM_IMMENABLED As Int32 = 82
  743.     Public Const SM_CXFOCUSBORDER As Int32 = 83
  744.     Public Const SM_CYFOCUSBORDER As Int32 = 84
  745.     Public Const SM_TABLETPC As Int32 = 86
  746.     Public Const SM_MEDIACENTER As Int32 = 87
  747.     Public Const SM_STARTER As Int32 = 88
  748.     Public Const SM_SERVERR2 As Int32 = 89
  749.     Public Const SM_MOUSEHORIZONTALWHEELPRESENT As Int32 = 91
  750.     Public Const SM_CXPADDEDBORDER As Int32 = 92
  751.     Public Const SM_DIGITIZER As Int32 = 94
  752.     Public Const SM_MAXIMUMTOUCHES As Int32 = 95
  753.     Public Const SM_CMETRICS As Int32 = 97
  754.     Public Const SM_REMOTESESSION As Int32 = &H1000
  755.     Public Const SM_SHUTTINGDOWN As Int32 = &H2000
  756.     Public Const SM_REMOTECONTROL As Int32 = &H2001
  757.     Public Const SM_CARETBLINKINGENABLED As Int32 = &H2002
  758.     Public Const SM_CONVERTIBLESLATEMODE As Int32 = &H2003
  759.     Public Const SM_SYSTEMDOCKED As Int32 = &H2004

  760.     Public Const WM_MOUSEMOVE As UInt32 = &H200
  761.     Public Const WM_LBUTTONDOWN As UInt32 = &H201
  762.     Public Const WM_LBUTTONUP As UInt32 = &H202
  763.     Public Const WM_LBUTTONDBLCLK As UInt32 = &H203
  764.     Public Const WM_RBUTTONDOWN As UInt32 = &H204
  765.     Public Const WM_RBUTTONUP As UInt32 = &H205
  766.     Public Const WM_RBUTTONDBLCLK As UInt32 = &H206
  767.     Public Const WM_MBUTTONDOWN As UInt32 = &H207
  768.     Public Const WM_MBUTTONUP As UInt32 = &H208
  769.     Public Const WM_MBUTTONDBLCLK As UInt32 = &H209
  770.     Public Const WM_MOUSEWHEEL As UInt32 = &H20A
  771.     Public Const WM_XBUTTONDOWN As UInt32 = &H20B
  772.     Public Const WM_XBUTTONUP As UInt32 = &H20C
  773.     Public Const WM_XBUTTONDBLCLK As UInt32 = &H20D
  774.     Public Const WM_MOUSEHWHEEL As UInt32 = &H20E
  775.     Public Const WM_DPICHANGED As UInt32 = &H2E0
  776.     Public Const WM_DPICHANGED_BEFOREPARENT As UInt32 = &H2E2
  777.     Public Const WM_DPICHANGED_AFTERPARENT As UInt32 = &H2E3
  778.     Public Const WM_GETDPISCALEDSIZE As UInt32 = &H2E4
  779.     Public Const WM_MOVE As UInt32 = &H3
  780.     Public Const WM_SIZE As UInt32 = &H5
  781.     Public Const SIZE_RESTORED As Integer = 0
  782.     Public Const SIZE_MINIMIZED As Integer = 1
  783.     Public Const SIZE_MAXIMIZED As Integer = 2
  784.     Public Const SIZE_MAXSHOW As Integer = 3
  785.     Public Const SIZE_MAXHIDE As Integer = 4
  786.     Public Const SWP_NOZORDER As UInt32 = &H4
  787.     Public Const SWP_NOACTIVATE As UInt32 = &H10
  788.     <StructLayout(LayoutKind.Sequential)> Structure RECT
  789.         Dim left As UInt32
  790.         Dim top As UInt32
  791.         Dim right As UInt32
  792.         Dim bottom As UInt32
  793.     End Structure
  794. End Module





Reference:What is the difference between JPEG and PNG files

留言

這個網誌中的熱門文章

Marshalling

Calling a C# WPF library from C++

Marshalling II