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
- <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
- Partial Class Form1
- Inherits System.Windows.Forms.Form
- 'Form overrides dispose to clean up the component list.
- <System.Diagnostics.DebuggerNonUserCode()>
- Protected Overrides Sub Dispose(disposing As Boolean)
- Try
- If disposing AndAlso components IsNot Nothing Then
- components.Dispose()
- End If
- Finally
- MyBase.Dispose(disposing)
- End Try
- End Sub
- 'Required by the Windows Form Designer
- Private components As System.ComponentModel.IContainer
- 'NOTE: The following procedure is required by the Windows Form Designer
- 'It can be modified using the Windows Form Designer.
- 'Do not modify it using the code editor.
- <System.Diagnostics.DebuggerStepThrough()>
- Private Sub InitializeComponent()
- components = New ComponentModel.Container()
- ContextMenuStrip1 = New ContextMenuStrip(components)
- CopyImageToolStripMenuItem = New ToolStripMenuItem()
- PasteImageToolStripMenuItem = New ToolStripMenuItem()
- ContextMenuStrip1.SuspendLayout()
- SuspendLayout()
- '
- ' ContextMenuStrip1
- '
- ContextMenuStrip1.ImageScalingSize = New Size(48, 48)
- ContextMenuStrip1.Items.AddRange(New ToolStripItem() {CopyImageToolStripMenuItem, PasteImageToolStripMenuItem})
- ContextMenuStrip1.Name = "ContextMenuStrip1"
- ContextMenuStrip1.Size = New Size(293, 116)
- '
- ' CopyImageToolStripMenuItem
- '
- CopyImageToolStripMenuItem.Name = "CopyImageToolStripMenuItem"
- CopyImageToolStripMenuItem.Size = New Size(292, 56)
- CopyImageToolStripMenuItem.Text = "Copy Image"
- '
- ' PasteImageToolStripMenuItem
- '
- PasteImageToolStripMenuItem.Name = "PasteImageToolStripMenuItem"
- PasteImageToolStripMenuItem.Size = New Size(292, 56)
- PasteImageToolStripMenuItem.Text = "Paste Image"
- '
- ' Form1
- '
- AutoScaleDimensions = New SizeF(20.0F, 48.0F)
- AutoScaleMode = AutoScaleMode.Font
- ClientSize = New Size(1659, 909)
- Name = "Form1"
- Text = "Form1"
- ContextMenuStrip1.ResumeLayout(False)
- ResumeLayout(False)
- End Sub
- Friend WithEvents ContextMenuStrip1 As ContextMenuStrip
- Friend WithEvents CopyImageToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents PasteImageToolStripMenuItem As ToolStripMenuItem
- End Class
- Option Strict On
- Imports System.ComponentModel
- Imports System.Drawing.Imaging
- Imports System.Drawing.Text
- Imports System.IO
- Imports System.Runtime.InteropServices
- Imports System.Text
- Public Class Form1
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- MySetting_Start()
- If Not AddClipboardFormatListener(Me.Handle) Then
- MsgBox("AddClipboardFormatListener")
- End If
- PrintMyBitmap()
- Ref_CurrentBitmap = 0
- End Sub
- Private Sub Form1_HandleCreated(sender As Object, e As EventArgs) Handles Me.HandleCreated
- Me.ContextMenuStrip = ContextMenuStrip1
- Me.AllowDrop = True
- Dpi = GetSystemDpiForProcess(NULL)
- OriginalDpi = Dpi
- PreviousDpi = Dpi
- List_Bitmap = New List(Of Bitmap)
- MyAdjustData()
- MyBitmap = New Bitmap(CX_Screen, 3 * CY_Screen) With
- {.Tag = New Bitmap_Tag("MyBitmap") With {.Saved = 111}}
- List_Bitmap.Add(MyBitmap)
- End Sub
- Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
- If List_Bitmap.Count > 1 Then
- For Each bitmap1 As Bitmap In List_Bitmap
- Dim tag As Bitmap_Tag = CType(bitmap1.Tag, Bitmap_Tag)
- If tag.Saved = 0 Then
- Dim Reply As MsgBoxResult = MsgBox("Save image files", MsgBoxStyle.YesNoCancel)
- If Reply = MsgBoxResult.Yes Then
- Module1.SaveImageFile()
- Exit For
- ElseIf Reply = MsgBoxResult.No Then
- Exit For
- Else
- e.Cancel = True
- Exit Sub
- End If
- End If
- Next
- End If
- If Not RemoveClipboardFormatListener(Me.Handle) Then
- MsgBox("RemoveClipboardFormatListener")
- End If
- MySetting_Save()
- If DoYouSaveImageIntoSpecifiedFolder Then
- Dim process As New Process() With {
- .StartInfo = New ProcessStartInfo() With {
- .Verb = "open", .FileName = ClipboardBitmaps_Folder.FullName, .UseShellExecute = True
- }
- }
- process.Start()
- End If
- End Sub
- Sub MySetting_Start()
- Try
- Dim RectangleConverter As New RectangleConverter()
- Dim a As Rectangle =
- CType(RectangleConverter.ConvertFromString(My.Settings.Form1Position), Rectangle)
- Me.Location = a.Location
- Me.Size = a.Size
- Me.WindowState = CType(
- Int32.Parse(My.Settings.WindowState), FormWindowState)
- Bitmap_Tag.Filename_Index = Int32.Parse(My.Settings.FilenameIndex)
- Catch ex As Exception
- Me.WindowState = FormWindowState.Maximized
- End Try
- End Sub
- Sub MySetting_Save()
- Dim RectangleConverter As New RectangleConverter()
- Dim WindowState2 As FormWindowState = Me.WindowState
- Dim Rectange2 As New Rectangle(Me.Location, Me.Size)
- If Me.WindowState <> FormWindowState.Normal Then
- WindowState2 = PreviousWindowState
- Rectange2 = Me.RestoreBounds
- End If
- My.Settings.WindowState = CInt(WindowState2).ToString()
- My.Settings.FilenameIndex = CInt(Bitmap_Tag.Filename_Index).ToString()
- My.Settings.Form1Position = RectangleConverter.ConvertToString(Rectange2)
- End Sub
- Protected Overrides Sub WndProc(ByRef m As Message)
- Static GotDpi As Boolean = False
- Select Case m.Msg
- Case WM_CLIPBOARDUPDATE
- If IsClipboardFormatAvailable(CF_BITMAP) AndAlso Not DoItMyself Then
- OpenClipboard(Me.Handle)
- Dim hBitmap As IntPtr = GetClipboardData(CF_BITMAP)
- If hBitmap <> NULL Then
- Dim Bitmap1 As Bitmap = Bitmap.FromHbitmap(hBitmap)
- Bitmap1.Tag = New Bitmap_Tag("ClipBoard")
- List_Bitmap.Add(Bitmap1)
- Ref_CurrentBitmap = List_Bitmap.Count
- PrintMyBitmap()
- Ref_CurrentBitmap = 0
- Me.Invalidate()
- MessageBeep(MB_OK)
- End If
- CloseClipboard()
- m.Result = IntPtr.Zero
- End If
- Case WM_MOUSEWHEEL
- Dim B() As Byte = BitConverter.GetBytes(m.WParam.ToInt64)
- Dim LittleEndian As Boolean = BitConverter.IsLittleEndian
- Dim HighWord As Int16 = BitConverter.ToInt16(B, 2)
- Dim LowWord As UInt16 = BitConverter.ToUInt16(B, 0)
- Dim bmp As Bitmap = List_Bitmap.Item(Ref_CurrentBitmap)
- Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
- If HighWord < 0 Then
- Tag.y_coordinate += Me.FontHeight * 3
- If Tag.y_coordinate > bmp.Height - Me.ClientSize.Height Then
- Tag.y_coordinate = bmp.Height - Me.ClientSize.Height
- End If
- Else
- Tag.y_coordinate -= Me.FontHeight * 3
- If Tag.y_coordinate < 0 Then Tag.y_coordinate = 0
- End If
- Invalidate()
- Case WM_GETDPISCALEDSIZE
- PreviousDpi = Dpi
- 'MessageBox.Show($"WM_GETDPISCALEDSIZE-----------Dpi={m.WParam.ToInt32} {PreviousDpi}")
- Dpi = CUInt(m.WParam.ToInt32)
- GotDpi = True
- Case WM_DPICHANGED
- If Not GotDpi Then
- 'MessageBox.Show($"WM_DPICHANGED----------Dpi={m.WParam.ToInt32 And &HFFFF} {PreviousDpi}")
- GotDpi = False
- PreviousDpi = Dpi
- Dpi = CUInt(m.WParam.ToInt32) And &HFFFFUI
- End If
- PrintMyBitmap()
- Ref_CurrentBitmap = 0
- Me.Invalidate()
- Case WM_DPICHANGED_BEFOREPARENT
- Case WM_DPICHANGED_AFTERPARENT
- Case WM_SIZE
- If m.WParam.ToInt32 = SIZE_MAXIMIZED Then
- PreviousWindowState = FormWindowState.Maximized
- ElseIf m.WParam.ToInt32 = SIZE_RESTORED Then
- PreviousWindowState = FormWindowState.Normal
- End If
- End Select
- MyBase.WndProc(m)
- End Sub
- Dim PreviousWindowState As FormWindowState
- Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
- Dim bmp As Bitmap = List_Bitmap.Item(Ref_CurrentBitmap)
- Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
- e.Graphics.DrawImageUnscaled(bmp, 0, -CInt(Tag.y_coordinate))
- End Sub
- Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
- Invalidate()
- End Sub
- Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
- If e.Control Then
- Select Case e.KeyValue
- Case Keys.N
- Ref_CurrentBitmap += 1
- If Ref_CurrentBitmap >= List_Bitmap.Count Then
- Ref_CurrentBitmap = 0
- End If
- Me.Invalidate()
- Case Keys.P
- Ref_CurrentBitmap -= 1
- If Ref_CurrentBitmap < 0 Then
- Ref_CurrentBitmap = List_Bitmap.Count - 1
- End If
- Me.Invalidate()
- Case Keys.S
- SaveImageFile()
- Case Keys.V
- Call Ctl_V_copy_image_from_clipboard()
- Case Keys.C
- Call Ctl_C_paste_image_on_clipboard()
- End Select
- End If
- If e.KeyValue = Keys.F9 Then
- End If
- End Sub
- Private Sub Form1_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
- 'MsgBox($"{e.AllowedEffect} {DataFormats.FileDrop} = {e.Data.GetDataPresent(DataFormats.FileDrop)}")
- Using ms As IO.MemoryStream = CType(e.Data.GetData("FilenameW"), IO.MemoryStream),
- sr As New IO.StreamReader(ms, Encoding.Unicode)
- Dim filenames() As String = sr.ReadToEnd().Split(New String() {
- vbNewLine, String.Empty, vbNullChar}, StringSplitOptions.None)
- ReadImageFile(filenames(0), "DropFile", 0)
- End Using
- Exit Sub
- Dim DataFormats2 As String() = e.Data.GetFormats
- Dim b As New StringBuilder
- Dim ii As Int32 = 0
- For Each str As String In DataFormats2
- ii += 1
- b.AppendLine($"{ii,3:D}" & str)
- Next
- MessageBox.Show(b.ToString)
- End Sub
- Private Sub Form1_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter
- e.Effect = DragDropEffects.Copy
- End Sub
- Dim DoItMyself As Boolean = False
- Sub Ctl_C_paste_image_on_clipboard()
- Clipboard.Clear()
- Clipboard.SetImage(List_Bitmap.Item(Ref_CurrentBitmap))
- DoItMyself = True
- Application.DoEvents()
- DoItMyself = False
- End Sub
- Sub Ctl_V_copy_image_from_clipboard()
- If Clipboard.ContainsImage() Then
- Dim image1 As Image = Clipboard.GetImage()
- If image1 IsNot Nothing Then
- Dim Bitmap1 As New Bitmap(image1)
- Bitmap1.Tag = New Bitmap_Tag("ClipBoard")
- List_Bitmap.Add(Bitmap1) : Ref_CurrentBitmap += 1
- PrintMyBitmap()
- Ref_CurrentBitmap = 0
- Invalidate()
- MessageBeep(MB_OK)
- End If
- End If
- Exit Sub
- If Clipboard.ContainsFileDropList() Then
- For Each filename As String In Clipboard.GetFileDropList
- ReadImageFile(filename, "CopyFile", 0)
- Next
- End If
- End Sub
- Private Sub ContextMenuStrip1_Opening(sender As Object, e As CancelEventArgs) Handles ContextMenuStrip1.Opening
- End Sub
- Private Sub CopyImageToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CopyImageToolStripMenuItem.Click
- Call Ctl_V_copy_image_from_clipboard()
- End Sub
- Private Sub PasteImageToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PasteImageToolStripMenuItem.Click
- Call Ctl_C_paste_image_on_clipboard()
- End Sub
- Private Sub Form1_Layout(sender As Object, e As LayoutEventArgs) Handles Me.Layout
- If PreviousDpi = Dpi OrElse
- Me.WindowState = FormWindowState.Maximized OrElse
- Me.WindowState = FormWindowState.Minimized Then Exit Sub
- Try
- Dim Pos_Scaling As Double = Dpi / PreviousDpi
- Me.Size = New Drawing.Size(
- CInt(Me.Size.Width * Pos_Scaling), CInt(Me.Height * Pos_Scaling))
- SetWindowPos(Me.Handle, Me.Handle,
- CInt(Location.X * Pos_Scaling),
- CInt(Location.Y * Pos_Scaling),
- CInt(Size.Width),
- CInt(Size.Height),
- SWP_NOACTIVATE Or SWP_NOZORDER)
- PreviousDpi = Dpi
- MessageBeep(MB_OK)
- Catch ex As Exception
- MsgBox($"Form1_Layout error {ex.Message}")
- End Try
- End Sub
- Dim MyClientSize As Size
- Dim MyLocation As Point
- End Class
- Module Module1
- Public MyAdjustFontSize As Double
- Public Dpi As UInt32
- Public PreviousDpi, OriginalDpi As Double
- Public CX_Screen, CY_Screen As Int32
- Public ClipboardBitmaps_Folder As IO.DirectoryInfo
- Public WorkArea As RECT
- Public MyBitmap As Bitmap
- Public List_Bitmap As List(Of Bitmap)
- Public Ref_CurrentBitmap As Int32
- Class Bitmap_Tag
- Public Shared Filename_Index As Int32
- Public Time As DateTime
- Public Saved As Int32
- Public SequenceNumber As UInt32
- Public Name As String
- Public y_coordinate As Int64
- Sub New(name As String)
- Me.Name = $"{name,9}"
- Time = DateTime.Now
- SequenceNumber = GetClipboardSequenceNumber()
- Saved = 0
- End Sub
- End Class
- Public DoYouSaveImageIntoSpecifiedFolder As Boolean = False
- Sub SaveImageFile()
- For Each bmp As Bitmap In List_Bitmap
- Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
- If Tag.Saved > 0 Then Continue For
- If ClipboardBitmaps_Folder Is Nothing Then
- ClipboardBitmaps_Folder = New IO.DirectoryInfo(IO.Path.Combine(
- Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
- "Clipboard"))
- If Not ClipboardBitmaps_Folder.Exists() Then
- ClipboardBitmaps_Folder.Create()
- Bitmap_Tag.Filename_Index = 0
- End If
- End If
- Bitmap_Tag.Filename_Index += 1
- 'MsgBox($"Bitmap_Tag.Filename_Index={Bitmap_Tag.Filename_Index}")
- Dim filename As String = ClipboardBitmaps_Folder.FullName & "\PIC_" &
- $"{Tag.Time:yyMMdd_hhmmss}_{Bitmap_Tag.Filename_Index}.png"
- Dim fileInfo As New FileInfo(filename)
- If fileInfo.Exists() Then
- MsgBox($"Overwrite {fileInfo.FullName}")
- End If
- Using FileStream As New IO.FileStream(filename, IO.FileMode.CreateNew)
- bmp.Save(FileStream, ImageFormat.Png)
- Tag.Saved = 1
- DoYouSaveImageIntoSpecifiedFolder = True
- End Using
- Next
- End Sub
- Sub PrintMyBitmap()
- Static Adjust1 As Double = 0.0377 * 1.01
- Static font_height1 As Double = (CDbl(CY_Screen) / Dpi) * Adjust1
- Dim font_height As Single = CSng(font_height1 * Dpi / OriginalDpi)
- Try
- Using _
- Font2 As New Font(New FontFamily(GenericFontFamilies.Monospace), font_height, FontStyle.Regular, GraphicsUnit.Inch),
- SolidBrush2 As New SolidBrush(Color.Black),
- SolidBrush1_background As New SolidBrush(Color.White),
- SolidBrush2_background As New SolidBrush(Color.Wheat),
- pen2 As New Pen(Color.Crimson, 10),
- g2 As Graphics = Graphics.FromImage(MyBitmap)
- Dim Rectangle1 As New Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height)
- Dim MyDataTMP As String = MyData()
- g2.FillRectangle(SolidBrush1_background, Rectangle1)
- g2.DrawString(MyDataTMP, Font2, SolidBrush2, Rectangle1)
- Dim sizeF As SizeF = g2.MeasureString(MyDataTMP, Font2, MyBitmap.Width, StringFormat.GenericDefault)
- Dim Start_X As Int32 = CInt(Math.Ceiling(sizeF.Height))
- Dim Rectangle2 As New Rectangle(0, Start_X, MyBitmap.Width, MyBitmap.Height - Start_X)
- g2.FillRectangle(SolidBrush2_background, Rectangle2)
- g2.DrawRectangle(pen2, Rectangle2)
- g2.DrawString(ListAllBitmaps(), Font2, SolidBrush2, Rectangle2)
- End Using
- Catch ex As Exception
- MsgBox("piantMyBitmap error")
- End Try
- End Sub
- Function ListAllBitmaps() As String
- Dim AllBitmapData As New Text.StringBuilder(4 << 20)
- Dim index As Int32 = 1
- Const FormatStr As String =
- "{0,2}{1,10} {2,16} {3,6} {4,6} {5,5} {6,5}" & vbNewLine
- AllBitmapData.AppendFormat(FormatStr,
- "", "Name", "PixelFormat", "width", "height", "X-Dpi", "Y-Dpi")
- For Each bmp As Bitmap In List_Bitmap
- Dim Tag As Bitmap_Tag = CType(bmp.Tag, Bitmap_Tag)
- AllBitmapData.AppendFormat(FormatStr,
- index, Tag.Name, bmp.PixelFormat,
- bmp.Width, bmp.Height,
- bmp.HorizontalResolution, bmp.VerticalResolution)
- index += 1
- Next
- Return AllBitmapData.ToString
- End Function
- Function MyData() As String
- Dim str2 As New Text.StringBuilder(1 << 20)
- For Each ici As ImageCodecInfo In ImageCodecInfo.GetImageEncoders()
- str2.AppendLine($"({ici.FormatDescription,4}) MimeType={ici.MimeType,-12} Extension={ici.FilenameExtension}")
- Next
- MyAdjustData()
- str2.AppendLine($"Screen(CX,CY)=({CX_Screen},{CY_Screen}) WorkArea=({WorkArea.left},{WorkArea.top},{WorkArea.right},{WorkArea.bottom})")
- str2.Append($"OriginalDpi={OriginalDpi} Dpi={Dpi}")
- Return str2.ToString
- End Function
- Sub MyAdjustData()
- CX_Screen = GetSystemMetricsForDpi(SM_CXSCREEN, Dpi)
- CY_Screen = GetSystemMetricsForDpi(SM_CYSCREEN, Dpi)
- If Not SystemParametersInfoForDpi(SPI_GETWORKAREA, 0, WorkArea, 0, 0) Then
- MessageBeep(2)
- MsgBox("SystemParametersInfo")
- End If
- End Sub
- Sub ReadImageFile(filename As String, FromWhere As String, SetSaved As Int32)
- Dim fileInfo As New FileInfo(filename)
- If fileInfo.Exists Then
- Try
- Using filestream As FileStream = fileInfo.Open(FileMode.Open, FileAccess.Read),
- image1 As Image = Bitmap.FromStream(filestream)
- Dim Bitmap_3D_paint As New Bitmap(image1) With {
- .Tag = New Bitmap_Tag(FromWhere) With {.Saved = SetSaved}
- }
- List_Bitmap.Add(Bitmap_3D_paint)
- PrintMyBitmap()
- Ref_CurrentBitmap = 0
- Form1.Invalidate()
- MessageBeep(MB_OK)
- End Using
- Catch ex As Exception
- MsgBox(ex.Message & vbNewLine & ex.StackTrace)
- End Try
- Else
- MsgBox(fileInfo.FullName)
- End If
- End Sub
- Public ReadOnly NULL As IntPtr = IntPtr.Zero
- Declare Unicode Function SetProcessDPIAware Lib "user32" () As Boolean
- Declare Unicode Function IsProcessDPIAware Lib "user32" () As Boolean
- Declare Unicode Function GetDpiForWindow Lib "user32" (
- _In_HWND_hwnd As IntPtr) As UInt32
- Declare Unicode Function GetDpiForSystem Lib "user32" () As UInt32
- Declare Unicode Function GetSystemDpiForProcess Lib "user32" (
- _In_HANDLE_hProcess As IntPtr) As UInt32
- Declare Unicode Function GetSystemMetrics Lib "User32" (
- _In_int_nIndex As Int32) As Int32
- Declare Unicode Function GetSystemMetricsForDpi Lib "User32" (
- _In_int_nIndex As Int32,
- _In_UINT_dpi As UInt32) As Int32
- Declare Unicode Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoW" (
- _In_UINT_uiAction As UInt32,
- _In_UINT_uiParam As UInt32,
- _Pre_maybenull__Post_valid_PVOID_pvParam As IntPtr,
- _In_UINT_fWinIni As UInt32) As Boolean
- Declare Unicode Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoW" (
- _In_UINT_uiAction As UInt32,
- _In_UINT_uiParam As UInt32,
- <InAttribute, Out> ByRef _Pre_maybenull__Post_valid_PVOID_pvParam As RECT,
- _In_UINT_fWinIni As UInt32) As Boolean
- Declare Function SystemParametersInfoForDpi Lib "user32" (
- _In_UINT_uiAction As UInt32,
- _In_UINT_uiParam As UInt32,
- _Pre_maybenull_Post_valid_PVOID_pvParam As IntPtr,
- _In_UINT_fWinIni As UInt32,
- _In_UINT_dpi As UInt32) As Boolean
- Declare Unicode Function SystemParametersInfoForDpi Lib "user32" (
- _In_UINT_uiAction As UInt32,
- _In_UINT_uiParam As UInt32,
- <InAttribute, Out> ByRef _Pre_maybenull__Post_valid_PVOID_pvParam As RECT,
- _In_UINT_fWinIni As UInt32,
- _In_UINT_dpi As UInt32) As Boolean
- Declare Unicode Function GetWindowPlacement Lib "User32" (
- _In_HWND_hWnd As IntPtr,
- <InAttribute, Out> ByRef _Inout_WINDOWPLACEMENT_lpwndpl As WINDOWPLACEMENT) As Boolean
- Declare Unicode Function GetWindowPlacement Lib "User32" (
- _In_HWND_hWnd As IntPtr,
- _Inout_WINDOWPLACEMENT_lpwndpl As IntPtr) As Boolean
- Declare Unicode Function SetWindowPlacement Lib "User32" (
- _In_HWND_hWnd As IntPtr,
- _In_Const_WINDOWPLACEMENT_lpwndpl As IntPtr) As Boolean
- Declare Function OpenClipboard Lib "user32" (
- _In_opt_HWND_hWndNewOwner As IntPtr) As Boolean
- Declare Function CloseClipboard Lib "user32" () As Boolean
- Declare Function EmptyClipboard Lib "user32" () As Boolean
- Declare Function SetClipboardData Lib "user32" (
- _In_UINT_uFormat As UInt32,
- _In_opt_HANDLE_hMem As IntPtr) As IntPtr
- Declare Function GetClipboardData Lib "user32" (
- _In_UINT_uFormat As UInt32) As IntPtr
- Declare Function IsClipboardFormatAvailable Lib "user32" (
- _In_UINT_format As UInt32) As Boolean
- Declare Unicode Function SetWindowPos Lib "User32" (
- _In_HWND_hWnd As IntPtr,
- _In_opt_HWND_hWndInsertAfter As IntPtr,
- _In_int_X As Int32,
- _In_int_Y As Int32,
- _In_int_cx As Int32,
- _In_int_cy As Int32,
- _In_UINT_uFlags As UInt32) As Boolean
- Declare Function GetClipboardSequenceNumber Lib "User32" () As UInt32
- Declare Function AddClipboardFormatListener Lib "User32" (
- _In_HWND_hwnd As IntPtr) As Boolean
- Declare Function RemoveClipboardFormatListener Lib "user32" (
- _In_HWND_hwnd As IntPtr) As Boolean
- Declare Function GetUpdatedClipboardFormats Lib "user32" (
- <Out> _Out_writes__cFormats_PUINT_lpuiFormats As UInt32,
- _In_UINT_cFormats As UInt32,
- <Out()> ByRef _Out_PUINT_pcFormatsOut As UInt32) As Boolean
- Declare Unicode Function MessageBeep Lib "User32" (
- _In_UINT_uType As UInt32) As Boolean
- Structure WINDOWPLACEMENT
- Dim length As UInt32
- Dim flags As UInt32
- Dim showCmd As UInt32
- Dim ptMinPosition As Point
- Dim ptMaxPosition As Point
- Dim rcNormalPosition As RECT
- End Structure
- Public Const WM_CLIPBOARDUPDATE As UInt32 = &H31D
- ' * Predefined Clipboard Formats
- Public Const CF_TEXT As Int32 = 1
- Public Const CF_BITMAP As Int32 = 2
- Public Const CF_METAFILEPICT As Int32 = 3
- Public Const CF_SYLK As Int32 = 4
- Public Const CF_DIF As Int32 = 5
- Public Const CF_TIFF As Int32 = 6
- Public Const CF_OEMTEXT As Int32 = 7
- Public Const CF_DIB As Int32 = 8
- Public Const CF_PALETTE As Int32 = 9
- Public Const CF_PENDATA As Int32 = 10
- Public Const CF_RIFF As Int32 = 11
- Public Const CF_WAVE As Int32 = 12
- Public Const CF_UNICODETEXT As Int32 = 13
- Public Const CF_ENHMETAFILE As Int32 = 14
- Public Const CF_HDROP As Int32 = 15
- Public Const CF_LOCALE As Int32 = 16
- Public Const CF_DIBV5 As Int32 = 17
- Public Const CF_MAX As Int32 = 18
- Public Const CF_OWNERDISPLAY As Int32 = &H80
- Public Const CF_DSPTEXT As Int32 = &H81
- Public Const CF_DSPBITMAP As Int32 = &H82
- Public Const CF_DSPMETAFILEPICT As Int32 = &H83
- Public Const CF_DSPENHMETAFILE As Int32 = &H8E
- ' * "Private" formats don't get GlobalFree()'d
- Public Const CF_PRIVATEFIRST As Int32 = &H200
- Public Const CF_PRIVATELAST As Int32 = &H2FF
- Public Const CF_GDIOBJFIRST As Int32 = &H300
- Public Const CF_GDIOBJLAST As Int32 = &H3FF
- Public Const SPIF_UPDATEINIFILE As UInt32 = &H1
- Public Const SPIF_SENDWININICHANGE As UInt32 = &H2
- Public Const SPIF_SENDCHANGE As UInt32 = SPIF_SENDWININICHANGE
- ' * Parameter for SystemParametersInfo.
- Public Const SPI_GETBEEP As UInt32 = &H1
- Public Const SPI_SETBEEP As UInt32 = &H2
- Public Const SPI_GETMOUSE As UInt32 = &H3
- Public Const SPI_SETMOUSE As UInt32 = &H4
- Public Const SPI_GETBORDER As UInt32 = &H5
- Public Const SPI_SETBORDER As UInt32 = &H6
- Public Const SPI_GETKEYBOARDSPEED As UInt32 = &HA
- Public Const SPI_SETKEYBOARDSPEED As UInt32 = &HB
- Public Const SPI_LANGDRIVER As UInt32 = &HC
- Public Const SPI_ICONHORIZONTALSPACING As UInt32 = &HD
- Public Const SPI_GETSCREENSAVETIMEOUT As UInt32 = &HE
- Public Const SPI_SETSCREENSAVETIMEOUT As UInt32 = &HF
- Public Const SPI_GETSCREENSAVEACTIVE As UInt32 = &H10
- Public Const SPI_SETSCREENSAVEACTIVE As UInt32 = &H11
- Public Const SPI_GETGRIDGRANULARITY As UInt32 = &H12
- Public Const SPI_SETGRIDGRANULARITY As UInt32 = &H13
- Public Const SPI_SETDESKWALLPAPER As UInt32 = &H14
- Public Const SPI_SETDESKPATTERN As UInt32 = &H15
- Public Const SPI_GETKEYBOARDDELAY As UInt32 = &H16
- Public Const SPI_SETKEYBOARDDELAY As UInt32 = &H17
- Public Const SPI_ICONVERTICALSPACING As UInt32 = &H18
- Public Const SPI_GETICONTITLEWRAP As UInt32 = &H19
- Public Const SPI_SETICONTITLEWRAP As UInt32 = &H1A
- Public Const SPI_GETMENUDROPALIGNMENT As UInt32 = &H1B
- Public Const SPI_SETMENUDROPALIGNMENT As UInt32 = &H1C
- Public Const SPI_SETDOUBLECLKWIDTH As UInt32 = &H1D
- Public Const SPI_SETDOUBLECLKHEIGHT As UInt32 = &H1E
- Public Const SPI_GETICONTITLELOGFONT As UInt32 = &H1F
- Public Const SPI_SETDOUBLECLICKTIME As UInt32 = &H20
- Public Const SPI_SETMOUSEBUTTONSWAP As UInt32 = &H21
- Public Const SPI_SETICONTITLELOGFONT As UInt32 = &H22
- Public Const SPI_GETFASTTASKSWITCH As UInt32 = &H23
- Public Const SPI_SETFASTTASKSWITCH As UInt32 = &H24
- Public Const SPI_SETDRAGFULLWINDOWS As UInt32 = &H25
- Public Const SPI_GETDRAGFULLWINDOWS As UInt32 = &H26
- Public Const SPI_GETNONCLIENTMETRICS As UInt32 = &H29
- Public Const SPI_SETNONCLIENTMETRICS As UInt32 = &H2A
- Public Const SPI_GETMINIMIZEDMETRICS As UInt32 = &H2B
- Public Const SPI_SETMINIMIZEDMETRICS As UInt32 = &H2C
- Public Const SPI_GETICONMETRICS As UInt32 = &H2D
- Public Const SPI_SETICONMETRICS As UInt32 = &H2E
- Public Const SPI_SETWORKAREA As UInt32 = &H2F
- Public Const SPI_GETWORKAREA As UInt32 = &H30
- Public Const SPI_SETPENWINDOWS As UInt32 = &H31
- Public Const SPI_GETHIGHCONTRAST As UInt32 = &H42
- Public Const SPI_SETHIGHCONTRAST As UInt32 = &H43
- Public Const SPI_GETKEYBOARDPREF As UInt32 = &H44
- Public Const SPI_SETKEYBOARDPREF As UInt32 = &H45
- Public Const SPI_GETSCREENREADER As UInt32 = &H46
- Public Const SPI_SETSCREENREADER As UInt32 = &H47
- Public Const SPI_GETANIMATION As UInt32 = &H48
- Public Const SPI_SETANIMATION As UInt32 = &H49
- Public Const SPI_GETFONTSMOOTHING As UInt32 = &H4A
- Public Const SPI_SETFONTSMOOTHING As UInt32 = &H4B
- Public Const SPI_SETDRAGWIDTH As UInt32 = &H4C
- Public Const SPI_SETDRAGHEIGHT As UInt32 = &H4D
- Public Const SPI_SETHANDHELD As UInt32 = &H4E
- Public Const SPI_GETLOWPOWERTIMEOUT As UInt32 = &H4F
- Public Const SPI_GETPOWEROFFTIMEOUT As UInt32 = &H50
- Public Const SPI_SETLOWPOWERTIMEOUT As UInt32 = &H51
- Public Const SPI_SETPOWEROFFTIMEOUT As UInt32 = &H52
- Public Const SPI_GETLOWPOWERACTIVE As UInt32 = &H53
- Public Const SPI_GETPOWEROFFACTIVE As UInt32 = &H54
- Public Const SPI_SETLOWPOWERACTIVE As UInt32 = &H55
- Public Const SPI_SETPOWEROFFACTIVE As UInt32 = &H56
- Public Const SPI_SETCURSORS As UInt32 = &H57
- Public Const SPI_SETICONS As UInt32 = &H58
- Public Const SPI_GETDEFAULTINPUTLANG As UInt32 = &H59
- Public Const SPI_SETDEFAULTINPUTLANG As UInt32 = &H5A
- Public Const SPI_SETLANGTOGGLE As UInt32 = &H5B
- Public Const SPI_GETWINDOWSEXTENSION As UInt32 = &H5C
- Public Const SPI_SETMOUSETRAILS As UInt32 = &H5D
- Public Const SPI_GETMOUSETRAILS As UInt32 = &H5E
- Public Const SPI_SETSCREENSAVERRUNNING As UInt32 = &H61
- Public Const SPI_SCREENSAVERRUNNING As UInt32 = SPI_SETSCREENSAVERRUNNING
- Public Const SPI_GETFILTERKEYS As UInt32 = &H32
- Public Const SPI_SETFILTERKEYS As UInt32 = &H33
- Public Const SPI_GETTOGGLEKEYS As UInt32 = &H34
- Public Const SPI_SETTOGGLEKEYS As UInt32 = &H35
- Public Const SPI_GETMOUSEKEYS As UInt32 = &H36
- Public Const SPI_SETMOUSEKEYS As UInt32 = &H37
- Public Const SPI_GETSHOWSOUNDS As UInt32 = &H38
- Public Const SPI_SETSHOWSOUNDS As UInt32 = &H39
- Public Const SPI_GETSTICKYKEYS As UInt32 = &H3A
- Public Const SPI_SETSTICKYKEYS As UInt32 = &H3B
- Public Const SPI_GETACCESSTIMEOUT As UInt32 = &H3C
- Public Const SPI_SETACCESSTIMEOUT As UInt32 = &H3D
- Public Const SPI_GETSERIALKEYS As UInt32 = &H3E
- Public Const SPI_SETSERIALKEYS As UInt32 = &H3F
- Public Const SPI_GETSOUNDSENTRY As UInt32 = &H40
- Public Const SPI_SETSOUNDSENTRY As UInt32 = &H41
- Public Const SPI_GETSNAPTODEFBUTTON As UInt32 = &H5F
- Public Const SPI_SETSNAPTODEFBUTTON As UInt32 = &H60
- Public Const SPI_GETMOUSEHOVERWIDTH As UInt32 = &H62
- Public Const SPI_SETMOUSEHOVERWIDTH As UInt32 = &H63
- Public Const SPI_GETMOUSEHOVERHEIGHT As UInt32 = &H64
- Public Const SPI_SETMOUSEHOVERHEIGHT As UInt32 = &H65
- Public Const SPI_GETMOUSEHOVERTIME As UInt32 = &H66
- Public Const SPI_SETMOUSEHOVERTIME As UInt32 = &H67
- Public Const SPI_GETWHEELSCROLLLINES As UInt32 = &H68
- Public Const SPI_SETWHEELSCROLLLINES As UInt32 = &H69
- Public Const SPI_GETMENUSHOWDELAY As UInt32 = &H6A
- Public Const SPI_SETMENUSHOWDELAY As UInt32 = &H6B
- Public Const SPI_GETWHEELSCROLLCHARS As UInt32 = &H6C
- Public Const SPI_SETWHEELSCROLLCHARS As UInt32 = &H6D
- Public Const SPI_GETSHOWIMEUI As UInt32 = &H6E
- Public Const SPI_SETSHOWIMEUI As UInt32 = &H6F
- Public Const SPI_GETMOUSESPEED As UInt32 = &H70
- Public Const SPI_SETMOUSESPEED As UInt32 = &H71
- Public Const SPI_GETSCREENSAVERRUNNING As UInt32 = &H72
- Public Const SPI_GETDESKWALLPAPER As UInt32 = &H73
- Public Const SPI_GETAUDIODESCRIPTION As UInt32 = &H74
- Public Const SPI_SETAUDIODESCRIPTION As UInt32 = &H75
- Public Const SPI_GETSCREENSAVESECURE As UInt32 = &H76
- Public Const SPI_SETSCREENSAVESECURE As UInt32 = &H77
- Public Const SPI_GETHUNGAPPTIMEOUT As UInt32 = &H78
- Public Const SPI_SETHUNGAPPTIMEOUT As UInt32 = &H79
- Public Const SPI_GETWAITTOKILLTIMEOUT As UInt32 = &H7A
- Public Const SPI_SETWAITTOKILLTIMEOUT As UInt32 = &H7B
- Public Const SPI_GETWAITTOKILLSERVICETIMEOUT As UInt32 = &H7C
- Public Const SPI_SETWAITTOKILLSERVICETIMEOUT As UInt32 = &H7D
- Public Const SPI_GETMOUSEDOCKTHRESHOLD As UInt32 = &H7E
- Public Const SPI_SETMOUSEDOCKTHRESHOLD As UInt32 = &H7F
- Public Const SPI_GETPENDOCKTHRESHOLD As UInt32 = &H80
- Public Const SPI_SETPENDOCKTHRESHOLD As UInt32 = &H81
- Public Const SPI_GETWINARRANGING As UInt32 = &H82
- Public Const SPI_SETWINARRANGING As UInt32 = &H83
- Public Const SPI_GETMOUSEDRAGOUTTHRESHOLD As UInt32 = &H84
- Public Const SPI_SETMOUSEDRAGOUTTHRESHOLD As UInt32 = &H85
- Public Const SPI_GETPENDRAGOUTTHRESHOLD As UInt32 = &H86
- Public Const SPI_SETPENDRAGOUTTHRESHOLD As UInt32 = &H87
- Public Const SPI_GETMOUSESIDEMOVETHRESHOLD As UInt32 = &H88
- Public Const SPI_SETMOUSESIDEMOVETHRESHOLD As UInt32 = &H89
- Public Const SPI_GETPENSIDEMOVETHRESHOLD As UInt32 = &H8A
- Public Const SPI_SETPENSIDEMOVETHRESHOLD As UInt32 = &H8B
- Public Const SPI_GETDRAGFROMMAXIMIZE As UInt32 = &H8C
- Public Const SPI_SETDRAGFROMMAXIMIZE As UInt32 = &H8D
- Public Const SPI_GETSNAPSIZING As UInt32 = &H8E
- Public Const SPI_SETSNAPSIZING As UInt32 = &H8F
- Public Const SPI_GETDOCKMOVING As UInt32 = &H90
- Public Const SPI_SETDOCKMOVING As UInt32 = &H91
- Public Const MB_OK As UInt32 = 0
- Public Const SM_CXSCREEN As Int32 = 0
- Public Const SM_CYSCREEN As Int32 = 1
- Public Const SM_CXVSCROLL As Int32 = 2
- Public Const SM_CYHSCROLL As Int32 = 3
- Public Const SM_CYCAPTION As Int32 = 4
- Public Const SM_CXBORDER As Int32 = 5
- Public Const SM_CYBORDER As Int32 = 6
- Public Const SM_CXDLGFRAME As Int32 = 7
- Public Const SM_CYDLGFRAME As Int32 = 8
- Public Const SM_CYVTHUMB As Int32 = 9
- Public Const SM_CXHTHUMB As Int32 = 10
- Public Const SM_CXICON As Int32 = 11
- Public Const SM_CYICON As Int32 = 12
- Public Const SM_CXCURSOR As Int32 = 13
- Public Const SM_CYCURSOR As Int32 = 14
- Public Const SM_CYMENU As Int32 = 15
- Public Const SM_CXFULLSCREEN As Int32 = 16
- Public Const SM_CYFULLSCREEN As Int32 = 17
- Public Const SM_CYKANJIWINDOW As Int32 = 18
- Public Const SM_MOUSEPRESENT As Int32 = 19
- Public Const SM_CYVSCROLL As Int32 = 20
- Public Const SM_CXHSCROLL As Int32 = 21
- Public Const SM_DEBUG As Int32 = 22
- Public Const SM_SWAPBUTTON As Int32 = 23
- Public Const SM_RESERVED1 As Int32 = 24
- Public Const SM_RESERVED2 As Int32 = 25
- Public Const SM_RESERVED3 As Int32 = 26
- Public Const SM_RESERVED4 As Int32 = 27
- Public Const SM_CXMIN As Int32 = 28
- Public Const SM_CYMIN As Int32 = 29
- Public Const SM_CXSIZE As Int32 = 30
- Public Const SM_CYSIZE As Int32 = 31
- Public Const SM_CXFRAME As Int32 = 32
- Public Const SM_CYFRAME As Int32 = 33
- Public Const SM_CXMINTRACK As Int32 = 34
- Public Const SM_CYMINTRACK As Int32 = 35
- Public Const SM_CXDOUBLECLK As Int32 = 36
- Public Const SM_CYDOUBLECLK As Int32 = 37
- Public Const SM_CXICONSPACING As Int32 = 38
- Public Const SM_CYICONSPACING As Int32 = 39
- Public Const SM_MENUDROPALIGNMENT As Int32 = 40
- Public Const SM_PENWINDOWS As Int32 = 41
- Public Const SM_DBCSENABLED As Int32 = 42
- Public Const SM_CMOUSEBUTTONS As Int32 = 43
- Public Const SM_CXFIXEDFRAME As Int32 = SM_CXDLGFRAME
- Public Const SM_CYFIXEDFRAME As Int32 = SM_CYDLGFRAME
- Public Const SM_CXSIZEFRAME As Int32 = SM_CXFRAME
- Public Const SM_CYSIZEFRAME As Int32 = SM_CYFRAME
- Public Const SM_SECURE As Int32 = 44
- Public Const SM_CXEDGE As Int32 = 45
- Public Const SM_CYEDGE As Int32 = 46
- Public Const SM_CXMINSPACING As Int32 = 47
- Public Const SM_CYMINSPACING As Int32 = 48
- Public Const SM_CXSMICON As Int32 = 49
- Public Const SM_CYSMICON As Int32 = 50
- Public Const SM_CYSMCAPTION As Int32 = 51
- Public Const SM_CXSMSIZE As Int32 = 52
- Public Const SM_CYSMSIZE As Int32 = 53
- Public Const SM_CXMENUSIZE As Int32 = 54
- Public Const SM_CYMENUSIZE As Int32 = 55
- Public Const SM_ARRANGE As Int32 = 56
- Public Const SM_CXMINIMIZED As Int32 = 57
- Public Const SM_CYMINIMIZED As Int32 = 58
- Public Const SM_CXMAXTRACK As Int32 = 59
- Public Const SM_CYMAXTRACK As Int32 = 60
- Public Const SM_CXMAXIMIZED As Int32 = 61
- Public Const SM_CYMAXIMIZED As Int32 = 62
- Public Const SM_NETWORK As Int32 = 63
- Public Const SM_CLEANBOOT As Int32 = 67
- Public Const SM_CXDRAG As Int32 = 68
- Public Const SM_CYDRAG As Int32 = 69
- Public Const SM_SHOWSOUNDS As Int32 = 70
- Public Const SM_CXMENUCHECK As Int32 = 71
- Public Const SM_CYMENUCHECK As Int32 = 72
- Public Const SM_SLOWMACHINE As Int32 = 73
- Public Const SM_MIDEASTENABLED As Int32 = 74
- Public Const SM_MOUSEWHEELPRESENT As Int32 = 75
- Public Const SM_XVIRTUALSCREEN As Int32 = 76
- Public Const SM_YVIRTUALSCREEN As Int32 = 77
- Public Const SM_CXVIRTUALSCREEN As Int32 = 78
- Public Const SM_CYVIRTUALSCREEN As Int32 = 79
- Public Const SM_CMONITORS As Int32 = 80
- Public Const SM_SAMEDISPLAYFORMAT As Int32 = 81
- Public Const SM_IMMENABLED As Int32 = 82
- Public Const SM_CXFOCUSBORDER As Int32 = 83
- Public Const SM_CYFOCUSBORDER As Int32 = 84
- Public Const SM_TABLETPC As Int32 = 86
- Public Const SM_MEDIACENTER As Int32 = 87
- Public Const SM_STARTER As Int32 = 88
- Public Const SM_SERVERR2 As Int32 = 89
- Public Const SM_MOUSEHORIZONTALWHEELPRESENT As Int32 = 91
- Public Const SM_CXPADDEDBORDER As Int32 = 92
- Public Const SM_DIGITIZER As Int32 = 94
- Public Const SM_MAXIMUMTOUCHES As Int32 = 95
- Public Const SM_CMETRICS As Int32 = 97
- Public Const SM_REMOTESESSION As Int32 = &H1000
- Public Const SM_SHUTTINGDOWN As Int32 = &H2000
- Public Const SM_REMOTECONTROL As Int32 = &H2001
- Public Const SM_CARETBLINKINGENABLED As Int32 = &H2002
- Public Const SM_CONVERTIBLESLATEMODE As Int32 = &H2003
- Public Const SM_SYSTEMDOCKED As Int32 = &H2004
- Public Const WM_MOUSEMOVE As UInt32 = &H200
- Public Const WM_LBUTTONDOWN As UInt32 = &H201
- Public Const WM_LBUTTONUP As UInt32 = &H202
- Public Const WM_LBUTTONDBLCLK As UInt32 = &H203
- Public Const WM_RBUTTONDOWN As UInt32 = &H204
- Public Const WM_RBUTTONUP As UInt32 = &H205
- Public Const WM_RBUTTONDBLCLK As UInt32 = &H206
- Public Const WM_MBUTTONDOWN As UInt32 = &H207
- Public Const WM_MBUTTONUP As UInt32 = &H208
- Public Const WM_MBUTTONDBLCLK As UInt32 = &H209
- Public Const WM_MOUSEWHEEL As UInt32 = &H20A
- Public Const WM_XBUTTONDOWN As UInt32 = &H20B
- Public Const WM_XBUTTONUP As UInt32 = &H20C
- Public Const WM_XBUTTONDBLCLK As UInt32 = &H20D
- Public Const WM_MOUSEHWHEEL As UInt32 = &H20E
- Public Const WM_DPICHANGED As UInt32 = &H2E0
- Public Const WM_DPICHANGED_BEFOREPARENT As UInt32 = &H2E2
- Public Const WM_DPICHANGED_AFTERPARENT As UInt32 = &H2E3
- Public Const WM_GETDPISCALEDSIZE As UInt32 = &H2E4
- Public Const WM_MOVE As UInt32 = &H3
- Public Const WM_SIZE As UInt32 = &H5
- Public Const SIZE_RESTORED As Integer = 0
- Public Const SIZE_MINIMIZED As Integer = 1
- Public Const SIZE_MAXIMIZED As Integer = 2
- Public Const SIZE_MAXSHOW As Integer = 3
- Public Const SIZE_MAXHIDE As Integer = 4
- Public Const SWP_NOZORDER As UInt32 = &H4
- Public Const SWP_NOACTIVATE As UInt32 = &H10
- <StructLayout(LayoutKind.Sequential)> Structure RECT
- Dim left As UInt32
- Dim top As UInt32
- Dim right As UInt32
- Dim bottom As UInt32
- End Structure
- End Module
Reference:What is the difference between JPEG and PNG files




















留言
張貼留言