mirror of
https://github.com/TheUltimateHacker/ShiftOS.git
synced 2025-01-22 09:01:58 -05:00
4caacce50c
ShiftOS is a game about evolving an experimental operating system called "ShiftOS" from a completely black and white text based command line based OS to a fully graphical operating system filled with advanced features and beautiful colours. The level of customization will exceed the levels of real world operating systems
1245 lines
No EOL
50 KiB
VB.net
1245 lines
No EOL
50 KiB
VB.net
Imports System.Runtime.InteropServices
|
|
Public Class API
|
|
'Error handling
|
|
Private Shared LastError As Exception
|
|
<DebuggerStepThrough()> _
|
|
Public Shared Sub HandleError()
|
|
If LastError IsNot Nothing Then
|
|
Throw LastError
|
|
ElseIf Marshal.GetLastWin32Error() <> 0 Then
|
|
Throw New System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error())
|
|
End If
|
|
End Sub
|
|
|
|
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Int32, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
|
|
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Int32, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
|
|
Public Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Integer, ByVal idAttackTo As Integer, ByVal fAttack As Int32) As Boolean
|
|
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Integer
|
|
|
|
Public Class WM
|
|
Public Enum SC 'System Commands
|
|
CLOSE = &HF060
|
|
CONTEXTHELP = &HF180
|
|
CDEFAULT = &HF160
|
|
HOTKEY = &HF150
|
|
HSCROLL = &HF080
|
|
ISSECURE = &H1
|
|
KEYMENU = &HF100
|
|
MAXIMIZE = &HF030
|
|
MINIMIZE = &HF020
|
|
MONITORPOWER = &HF170
|
|
MouseMenu = &HF090
|
|
MOVE = &HF010
|
|
NEXTWINDOW = &HF040
|
|
PREVWINDOW = &HF050
|
|
RESTORE = &HF120
|
|
SCREENSAVE = &HF140
|
|
Size = &HF000
|
|
TASKLIST = &HF130
|
|
VSCROLL = &HF070
|
|
End Enum
|
|
|
|
Public Enum msg As UInteger
|
|
USER = &H400&
|
|
ACTIVATE = &H6
|
|
ACTIVATEAPP = &H1C
|
|
ASKCBFORMATNAME = &H30C
|
|
CANCELJOURNAL = &H4B
|
|
CANCELMODE = &H1F
|
|
CHANGECBCHAIN = &H30D
|
|
Chr = &H102
|
|
CHARTOITEM = &H2F
|
|
CHILDACTIVATE = &H22
|
|
CHOOSEFONT_GETLOGFONT = (USER + 1)
|
|
CHOOSEFONT_SETFLAGS = (USER + 102)
|
|
CHOOSEFONT_SETLOGFONT = (USER + 101)
|
|
CLEAR = &H303
|
|
CLOSE = &H10
|
|
Command = &H111
|
|
COMMNOTIFY = &H44 ' no longer suported
|
|
COMPACTING = &H41
|
|
COMPAREITEM = &H39
|
|
CONVERTREQUESTEX = &H108
|
|
Copy = &H301
|
|
COPYDATA = &H4A
|
|
CREATE = &H1
|
|
CTLCOLORBTN = &H135
|
|
CTLCOLORDLG = &H136
|
|
CTLCOLOREDIT = &H133
|
|
CTLCOLORLISTBOX = &H134
|
|
CTLCOLORMSGBOX = &H132
|
|
CTLCOLORSCROLLBAR = &H137
|
|
CTLCOLORSTATIC = &H138
|
|
CUT = &H300
|
|
DDE_FIRST = &H3E0
|
|
DDE_ACK = (DDE_FIRST + 4)
|
|
DDE_ADVISE = (DDE_FIRST + 2)
|
|
DDE_DATA = (DDE_FIRST + 5)
|
|
DDE_EXECUTE = (DDE_FIRST + 8)
|
|
DDE_INITIATE = (DDE_FIRST)
|
|
DDE_LAST = (DDE_FIRST + 8)
|
|
DDE_POKE = (DDE_FIRST + 7)
|
|
DDE_REQUEST = (DDE_FIRST + 6)
|
|
DDE_TERMINATE = (DDE_FIRST + 1)
|
|
DDE_UNADVISE = (DDE_FIRST + 3)
|
|
DEADCHAR = &H103
|
|
DELETEITEM = &H2D
|
|
DESTROY = &H2
|
|
DESTROYCLIPBOARD = &H307
|
|
DEVMODECHANGE = &H1B
|
|
DRAWCLIPBOARD = &H308
|
|
DRAWITEM = &H2B
|
|
DROPFILES = &H233
|
|
ENABLE = &HA
|
|
ENDSESSION = &H16
|
|
ENTERIDLE = &H121
|
|
ENTERMENULOOP = &H211
|
|
ERASEBKGND = &H14
|
|
EXITMENULOOP = &H212
|
|
FONTCHANGE = &H1D
|
|
GETFONT = &H31
|
|
GETDLGCODE = &H87
|
|
GETHOTKEY = &H33
|
|
GETMINMAXINFO = &H24
|
|
GETTEXT = &HD
|
|
GETTEXTLENGTH = &HE
|
|
HOTKEY = &H312
|
|
HSCROLL = &H114
|
|
HSCROLLCLIPBOARD = &H30E
|
|
ICONERASEBKGND = &H27
|
|
IME_CHAR = &H286
|
|
IME_COMPOSITION = &H10F
|
|
IME_COMPOSITIONFULL = &H284
|
|
IME_CONTROL = &H283
|
|
IME_ENDCOMPOSITION = &H10E
|
|
IME_KEYDOWN = &H290
|
|
IME_KEYLAST = &H10F
|
|
IME_KEYUP = &H291
|
|
IME_NOTIFY = &H282
|
|
IME_SELECT = &H285
|
|
IME_SETCONTEXT = &H281
|
|
IME_STARTCOMPOSITION = &H10D
|
|
INITDIALOG = &H110
|
|
INITMENU = &H116
|
|
INITMENUPOPUP = &H117
|
|
KEYDOWN = &H100
|
|
KEYFIRST = &H100
|
|
KEYLAST = &H108
|
|
KEYUP = &H101
|
|
KILLFOCUS = &H8
|
|
LBUTTONDBLCLK = &H203
|
|
LBUTTONDOWN = &H201
|
|
LBUTTONUP = &H202
|
|
MBUTTONDBLCLK = &H209
|
|
MBUTTONDOWN = &H207
|
|
MBUTTONUP = &H208
|
|
MDIACTIVATE = &H222
|
|
MDICASCADE = &H227
|
|
MDICREATE = &H220
|
|
MDIDESTROY = &H221
|
|
MDIGETACTIVE = &H229
|
|
MDIICONARRANGE = &H228
|
|
MDIMAXIMIZE = &H225
|
|
MDINEXT = &H224
|
|
MDIREFRESHMENU = &H234
|
|
MDIRESTORE = &H223
|
|
MDISETMENU = &H230
|
|
MDITILE = &H226
|
|
MEASUREITEM = &H2C
|
|
MENUCHAR = &H120
|
|
MENUSELECT = &H11F
|
|
MOUSEACTIVATE = &H21
|
|
MOUSEFIRST = &H200
|
|
MOUSELAST = &H209
|
|
MOUSEMOVE = &H200
|
|
MOVE = &H3
|
|
NCACTIVATE = &H86
|
|
NCCALCSIZE = &H83
|
|
NCCREATE = &H81
|
|
NCDESTROY = &H82
|
|
NCHITTEST = &H84
|
|
NCLBUTTONDBLCLK = &HA3
|
|
NCLBUTTONDOWN = &HA1
|
|
NCLBUTTONUP = &HA2
|
|
NCMBUTTONDBLCLK = &HA9
|
|
NCMBUTTONDOWN = &HA7
|
|
NCMBUTTONUP = &HA8
|
|
NCMOUSEMOVE = &HA0
|
|
NCPAINT = &H85
|
|
NCRBUTTONDBLCLK = &HA6
|
|
NCRBUTTONDOWN = &HA4
|
|
NCRBUTTONUP = &HA5
|
|
NEXTDLGCTL = &H28
|
|
NULL = &H0
|
|
PAINT = &HF
|
|
PAINTCLIPBOARD = &H309
|
|
PAINTICON = &H26
|
|
PALETTECHANGED = &H311
|
|
PALETTEISCHANGING = &H310
|
|
PARENTNOTIFY = &H210
|
|
PASTE = &H302
|
|
PENWINFIRST = &H380
|
|
PENWINLAST = &H38F
|
|
POWER = &H48
|
|
Print = &H317
|
|
PSD_ENVSTAMPRECT = (USER + 5)
|
|
PSD_FULLPAGERECT = (USER + 1)
|
|
PSD_GREEKTEXTRECT = (USER + 4)
|
|
PSD_MARGINRECT = (USER + 3)
|
|
PSD_MINMARGINRECT = (USER + 2)
|
|
PSD_PAGESETUPDLG = (USER)
|
|
PSD_YAFULLPAGERECT = (USER + 6)
|
|
QUERYDRAGICON = &H37
|
|
QUERYENDSESSION = &H11
|
|
QUERYNEWPALETTE = &H30F
|
|
QUERYOPEN = &H13
|
|
QUEUESYNC = &H23
|
|
QUIT = &H12
|
|
RBUTTONDBLCLK = &H206
|
|
RBUTTONDOWN = &H204
|
|
RBUTTONUP = &H205
|
|
RENDERALLFORMATS = &H306
|
|
RENDERFORMAT = &H305
|
|
SETCURSOR = &H20
|
|
SETFOCUS = &H7
|
|
SETFONT = &H30
|
|
SETHOTKEY = &H32
|
|
SETREDRAW = &HB
|
|
SETTEXT = &HC
|
|
Size = &H5
|
|
SIZECLIPBOARD = &H30B
|
|
SPOOLERSTATUS = &H2A
|
|
SYSCHAR = &H106
|
|
SYSCOLORCHANGE = &H15
|
|
SYSCOMMAND = &H112
|
|
SYSDEADCHAR = &H107
|
|
SYSKEYDOWN = &H104
|
|
SYSKEYUP = &H105
|
|
SHOWWINDOW = &H18
|
|
Timer = &H113
|
|
TIMECHANGE = &H1E
|
|
UNDO = &H304
|
|
VKEYTOITEM = &H2E
|
|
VSCROLL = &H115
|
|
VSCROLLCLIPBOARD = &H30A
|
|
WINDOWPOSCHANGED = &H47
|
|
WINDOWPOSCHANGING = &H46
|
|
WININICHANGE = &H1A
|
|
End Enum 'Window Messages
|
|
|
|
Public Shared Function GETTEXTLENGTH(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.GETTEXTLENGTH, 0, 0) + 1
|
|
End Function
|
|
Public Shared Property TEXT(ByVal hwnd As IntPtr) As String
|
|
Get
|
|
Dim length As Integer = GETTEXTLENGTH(hwnd)
|
|
Dim Handle As IntPtr = Marshal.AllocHGlobal(length)
|
|
SendMessage(hwnd, 13, length, Handle)
|
|
TEXT = Marshal.PtrToStringAnsi(Handle)
|
|
Marshal.FreeHGlobal(Handle)
|
|
End Get
|
|
Set(ByVal value As String)
|
|
Dim handle As IntPtr = Marshal.StringToHGlobalAnsi(value)
|
|
SendMessage(hwnd, &HC, IntPtr.Zero, handle)
|
|
Marshal.FreeHGlobal(handle)
|
|
End Set
|
|
End Property
|
|
Public Shared Property FONT(ByVal hwnd As IntPtr) As System.Drawing.Font
|
|
Get
|
|
Return System.Drawing.Font.FromHfont(SendMessage(hwnd, msg.GETFONT, 0, 0))
|
|
End Get
|
|
Set(ByVal value As System.Drawing.Font)
|
|
SendMessage(hwnd, msg.SETFONT, value.ToHfont, True)
|
|
End Set
|
|
End Property
|
|
Public Shared Function SETFOCUS(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.SETFOCUS, 0, 0)
|
|
End Function
|
|
Public Shared Function CLOSE(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.CLOSE, 0, 0)
|
|
End Function
|
|
Public Shared Function DESTROY(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.DESTROY, 0, 0)
|
|
End Function
|
|
Public Shared Function CLEAR(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.CLEAR, 0, 0)
|
|
End Function
|
|
Public Shared Function UNDO(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.UNDO, 0, 0)
|
|
End Function
|
|
Public Shared Function Copy(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.Copy, 0, 0)
|
|
End Function
|
|
Public Shared Function PASTE(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.PASTE, 0, 0)
|
|
End Function
|
|
Public Shared Function CUT(ByVal hwnd As IntPtr) As Integer
|
|
Return SendMessage(hwnd, msg.CUT, 0, 0)
|
|
End Function
|
|
Public Shared Function SETREDRAW(ByVal hwnd As IntPtr, Optional ByVal redraw As Boolean = True) As Integer
|
|
Return SendMessage(hwnd, msg.SETREDRAW, redraw, 0)
|
|
End Function
|
|
Public Shared Function KILLFOCUS(ByVal hwnd As IntPtr) As Boolean
|
|
Return SendMessage(hwnd, msg.KILLFOCUS, 0, 0)
|
|
End Function
|
|
|
|
'listview
|
|
Public Shared Function SETICONSPACING(ByVal lview As ListView, ByVal spaceX As Integer, ByVal spaceY As Integer) As Integer
|
|
Return SETICONSPACING(lview.Handle, spaceX, spaceY)
|
|
End Function
|
|
Public Shared Function SETICONSPACING(ByVal hwnd As IntPtr, ByVal spaceX As Integer, ByVal spaceY As Integer) As Integer
|
|
Return SendMessage(hwnd, &H1035, spaceX, spaceY)
|
|
End Function
|
|
|
|
Public Shared Function SYSCOMMAND(ByVal hwnd As IntPtr, ByVal command As SC, Optional ByVal lparam As Integer = 0) As Boolean
|
|
Return SendMessage(hwnd, WM.msg.SYSCOMMAND, command, lparam)
|
|
End Function
|
|
Public Shared Function SYSCOMMAND(ByVal hwnd As IntPtr, ByVal command As SC, ByVal x As Short, ByVal y As Short) As Boolean
|
|
Return SendMessage(hwnd, WM.msg.SYSCOMMAND, command, New DWORD(x, y))
|
|
End Function
|
|
End Class
|
|
|
|
Public Class SPI
|
|
<System.Runtime.InteropServices.DllImport("User32.dll", EntryPoint:="SystemParametersInfo")> _
|
|
Private Shared Function SystemParametersInfoGet(ByVal uAction As SPI.GetActions, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fuWinIni As UInt32) As Boolean
|
|
End Function
|
|
<System.Runtime.InteropServices.DllImport("User32.dll", EntryPoint:="SystemParametersInfo")> _
|
|
Private Shared Function SystemParametersInfoSet(ByVal uAction As SPI.SetActions, ByVal uiParam As UInt32, ByVal pvParam As IntPtr, ByVal fuWinIni As UInt32) As Boolean
|
|
End Function
|
|
|
|
Public Enum GetActions As UInt32
|
|
ICONHORIZONTALSPACING = &HD
|
|
ICONVERTICALSPACING = &H18
|
|
BEEP = &H1
|
|
MOUSE = &H3
|
|
BORDER = &H5
|
|
KEYBOARDSPEED = &HA
|
|
SCREENSAVETIMEOUT = &HE
|
|
SCREENSAVEACTIVE = &H10
|
|
GRIDGRANULARITY = &H12
|
|
KEYBOARDDELAY = &H16
|
|
ICONTITLEWRAP = &H19
|
|
MENUDROPALIGNMENT = &H1B
|
|
ICONTITLELOGFONT = &H1F
|
|
FASTTASKSWITCH = &H23
|
|
DRAGFULLWINDOWS = &H26
|
|
NONCLIENTMETRICS = &H29
|
|
MINIMIZEDMETRICS = &H2B
|
|
ICONMETRICS = &H2D
|
|
WORKAREA = &H30
|
|
HIGHCONTRAST = &H42
|
|
KEYBOARDPREF = &H44
|
|
SCREENREADER = &H46
|
|
ANIMATION = &H48
|
|
FONTSMOOTHING = &H4A
|
|
LOWPOWERTIMEOUT = &H4F
|
|
POWEROFFTIMEOUT = &H50
|
|
LOWPOWERACTIVE = &H53
|
|
POWEROFFACTIVE = &H54
|
|
DEFAULTINPUTLANG = &H59
|
|
WINDOWSEXTENSION = &H5C
|
|
MOUSETRAILS = &H5E
|
|
FILTERKEYS = &H32
|
|
TOGGLEKEYS = &H34
|
|
MOUSEKEYS = &H36
|
|
SHOWSOUNDS = &H38
|
|
STICKYKEYS = &H3A
|
|
ACCESSTIMEOUT = &H3C
|
|
SERIALKEYS = &H3E
|
|
SOUNDSENTRY = &H40
|
|
SNAPTODEFBUTTON = &H5F
|
|
MOUSEHOVERWIDTH = &H62
|
|
MOUSEHOVERHEIGHT = &H64
|
|
MOUSEHOVERTIME = &H66
|
|
WHEELSCROLLLINES = &H68
|
|
MENUSHOWDELAY = &H6A
|
|
WHEELSCROLLCHARS = &H6C
|
|
SCREENSAVERRUNNING = &H72
|
|
MOUSESPEED = &H70
|
|
DESKWALLPAPER = &H73
|
|
AUDIODESCRIPTION = &H74
|
|
SCREENSAVESECURE = &H76
|
|
SHOWIMEUI = &H6E
|
|
ACTIVEWINDOWTRACKING = &H1000
|
|
MENUANIMATION = &H1002
|
|
COMBOBOXANIMATION = &H1004
|
|
LISTBOXSMOOTHSCROLLING = &H1006
|
|
GRADIENTCAPTIONS = &H1008
|
|
KEYBOARDCUES = &H100A
|
|
MENUUNDERLINES = KEYBOARDCUES
|
|
ACTIVEWNDTRKZORDER = &H100C
|
|
HOTTRACKING = &H100E
|
|
MENUFADE = &H1012
|
|
SELECTIONFADE = &H1014
|
|
TOOLTIPANIMATION = &H1016
|
|
TOOLTIPFADE = &H1018
|
|
CURSORSHADOW = &H101A
|
|
MOUSESONAR = &H101C
|
|
MOUSECLICKLOCK = &H101E
|
|
MOUSEVANISH = &H1020
|
|
FLATMENU = &H1022
|
|
DROPSHADOW = &H1024
|
|
BLOCKSENDINPUTRESETS = &H1026
|
|
UIEFFECTS = &H103E
|
|
DISABLEOVERLAPPEDCONTENT = &H1040
|
|
CLIENTAREAANIMATION = &H1042
|
|
CLEARTYPE = &H1048
|
|
SPEECHRECOGNITION = &H104A
|
|
FOREGROUNDLOCKTIMEOUT = &H2000
|
|
ACTIVEWNDTRKTIMEOUT = &H2002
|
|
FOREGROUNDFLASHCOUNT = &H2004
|
|
CARETWIDTH = &H2006
|
|
MOUSECLICKLOCKTIME = &H2008
|
|
FONTSMOOTHINGTYPE = &H200A
|
|
FONTSMOOTHINGCONTRAST = &H200C
|
|
FOCUSBORDERWIDTH = &H200E
|
|
FOCUSBORDERHEIGHT = &H2010
|
|
FONTSMOOTHINGORIENTATION = &H2012
|
|
MINIMUMHITRADIUS = &H2014
|
|
MESSAGEDURATION = &H2016
|
|
End Enum
|
|
Public Enum SetActions As UInt32
|
|
BEEP = &H2
|
|
MOUSE = &H4
|
|
BORDER = &H6
|
|
KEYBOARDSPEED = &HB
|
|
SCREENSAVETIMEOUT = &HF
|
|
SCREENSAVEACTIVE = &H11
|
|
GRIDGRANULARITY = &H13
|
|
DESKWALLPAPER = &H14
|
|
DESKPATTERN = &H15
|
|
KEYBOARDDELAY = &H17
|
|
ICONTITLEWRAP = &H1A
|
|
MENUDROPALIGNMENT = &H1C
|
|
DOUBLECLKWIDTH = &H1D
|
|
DOUBLECLKHEIGHT = &H1E
|
|
DOUBLECLICKTIME = &H20
|
|
MOUSEBUTTONSWAP = &H21
|
|
ICONTITLELOGFONT = &H22
|
|
FASTTASKSWITCH = &H24
|
|
DRAGFULLWINDOWS = &H25
|
|
NONCLIENTMETRICS = &H2A
|
|
MINIMIZEDMETRICS = &H2C
|
|
ICONMETRICS = &H2E
|
|
WORKAREA = &H2F
|
|
PENWINDOWS = &H31
|
|
HIGHCONTRAST = &H43
|
|
KEYBOARDPREF = &H45
|
|
SCREENREADER = &H47
|
|
ANIMATION = &H49
|
|
FONTSMOOTHING = &H4B
|
|
DRAGWIDTH = &H4C
|
|
DRAGHEIGHT = &H4D
|
|
HANDHELD = &H4E
|
|
LOWPOWERTIMEOUT = &H51
|
|
POWEROFFTIMEOUT = &H52
|
|
LOWPOWERACTIVE = &H55
|
|
POWEROFFACTIVE = &H56
|
|
CURSORS = &H57
|
|
ICONS = &H58
|
|
DEFAULTINPUTLANG = &H5A
|
|
LANGTOGGLE = &H5B
|
|
MOUSETRAILS = &H5D
|
|
SCREENSAVERRUNNING = &H61
|
|
FILTERKEYS = &H33
|
|
TOGGLEKEYS = &H35
|
|
MOUSEKEYS = &H37
|
|
SHOWSOUNDS = &H39
|
|
STICKYKEYS = &H3B
|
|
ACCESSTIMEOUT = &H3D
|
|
SERIALKEYS = &H3F
|
|
SOUNDSENTRY = &H41
|
|
SNAPTODEFBUTTON = &H60
|
|
MOUSEHOVERWIDTH = &H63
|
|
MOUSEHOVERHEIGHT = &H65
|
|
MOUSEHOVERTIME = &H67
|
|
WHEELSCROLLLINES = &H69
|
|
MENUSHOWDELAY = &H6B
|
|
WHEELSCROLLCHARS = &H6D
|
|
SHOWIMEUI = &H6F
|
|
MOUSESPEED = &H71
|
|
AUDIODESCRIPTION = &H75
|
|
SCREENSAVESECURE = &H77
|
|
ACTIVEWINDOWTRACKING = &H1001
|
|
MENUANIMATION = &H1003
|
|
COMBOBOXANIMATION = &H1005
|
|
LISTBOXSMOOTHSCROLLING = &H1007
|
|
GRADIENTCAPTIONS = &H1009
|
|
KEYBOARDCUES = &H100B
|
|
MENUUNDERLINES = KEYBOARDCUES
|
|
ACTIVEWNDTRKZORDER = &H100D
|
|
HOTTRACKING = &H100F
|
|
MENUFADE = &H1013
|
|
SELECTIONFADE = &H1015
|
|
TOOLTIPANIMATION = &H1017
|
|
TOOLTIPFADE = &H1019
|
|
CURSORSHADOW = &H101B
|
|
MOUSESONAR = &H101D
|
|
MOUSECLICKLOCK = &H101F
|
|
MOUSEVANISH = &H1021
|
|
FLATMENU = &H1023
|
|
DROPSHADOW = &H1025
|
|
BLOCKSENDINPUTRESETS = &H1027
|
|
UIEFFECTS = &H103F
|
|
DISABLEOVERLAPPEDCONTENT = &H1041
|
|
CLIENTAREAANIMATION = &H1043
|
|
CLEARTYPE = &H1049
|
|
SPEECHRECOGNITION = &H104B
|
|
FOREGROUNDLOCKTIMEOUT = &H2001
|
|
ACTIVEWNDTRKTIMEOUT = &H2003
|
|
FOREGROUNDFLASHCOUNT = &H2005
|
|
CARETWIDTH = &H2007
|
|
MOUSECLICKLOCKTIME = &H2009
|
|
FONTSMOOTHINGTYPE = &H200B
|
|
FONTSMOOTHINGCONTRAST = &H200D
|
|
FOCUSBORDERWIDTH = &H200F
|
|
FOCUSBORDERHEIGHT = &H2011
|
|
FONTSMOOTHINGORIENTATION = &H2013
|
|
MINIMUMHITRADIUS = &H2015
|
|
MESSAGEDURATION = &H2017
|
|
End Enum
|
|
Public Enum FontSmoothing As Int32
|
|
STANDARD = &H1
|
|
CLEARTYPE = &H2
|
|
DOCKING = &H8000
|
|
End Enum
|
|
Public Enum FontSmoothingOrientation As Int32
|
|
BGR = &H0
|
|
RGB = &H1
|
|
End Enum
|
|
|
|
Public Shared Function SetParameter(ByVal parameter As SetActions, ByVal uparam As UInteger, ByVal pvParam As IntPtr) As Boolean
|
|
Return SystemParametersInfoSet(parameter, uparam, pvParam, 1)
|
|
End Function
|
|
Public Shared Function SetParameter(ByVal parameter As SetActions, ByVal pvParam As IntPtr) As Boolean
|
|
Return SetParameter(parameter, 0, pvParam)
|
|
End Function
|
|
Public Shared Function GetParameter(ByVal parameter As GetActions) As IntPtr
|
|
SystemParametersInfoGet(parameter, 0, GetParameter, 0)
|
|
End Function
|
|
End Class
|
|
|
|
Public Class DC
|
|
Implements System.IDisposable
|
|
|
|
Private Declare Function BitBlt Lib "gdi32" (ByVal hdc As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As UInteger) As Boolean
|
|
Private Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As IntPtr, ByVal X As Int32, ByVal Y As Int32) As Int32
|
|
Private Declare Function SetPixel Lib "gdi32" Alias "SetPixel" (ByVal hdc As IntPtr, ByVal X As Int32, ByVal Y As Int32, ByVal crColor As UInt32) As UInt32
|
|
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As IntPtr, ByVal hDC As IntPtr) As Boolean
|
|
Private Declare Function GetClipBox Lib "gdi32" (ByVal hdc As IntPtr, ByRef lprc As WRECT) As Integer
|
|
Private Declare Function GetClipRgn Lib "gdi32" (ByVal hdc As IntPtr, ByRef hrgn As Region) As Integer
|
|
Private Declare Function GetRandomRgn Lib "gdi32" (ByVal hdc As IntPtr, ByRef hrgn As Region, ByVal inum As Integer) As Integer
|
|
|
|
Private managedtype As DCSource
|
|
Private managedobject As Object
|
|
Private managedgraphics As Graphics
|
|
Private hdc As IntPtr
|
|
Private _disposed As Boolean
|
|
Public Enum DCSource
|
|
None
|
|
Handle
|
|
Graphics
|
|
End Enum
|
|
Sub New(ByVal g As Graphics)
|
|
Me.managedobject = g
|
|
Me.managedtype = DCSource.Graphics
|
|
Me.hdc = g.GetHdc
|
|
End Sub
|
|
Sub New(ByVal hwnd As IntPtr, ByVal hdc As IntPtr)
|
|
Me.managedobject = hwnd
|
|
Me.managedtype = DCSource.Handle
|
|
Me.hdc = hdc
|
|
End Sub
|
|
Sub New()
|
|
Me.managedobject = Nothing
|
|
Me.managedtype = DCSource.None
|
|
End Sub
|
|
Public ReadOnly Property Source() As DCSource
|
|
Get
|
|
Return Me.managedtype
|
|
End Get
|
|
End Property
|
|
Public Sub SetPixel(ByVal X As Integer, ByVal Y As Integer, ByVal C As Color)
|
|
SetPixel(Me.hdc, X, Y, C.ToArgb)
|
|
End Sub
|
|
Public Function GetPixel(ByVal X As Integer, ByVal Y As Integer) As Color
|
|
Return ColorTranslator.FromOle(GetPixel(Me.hdc, X, Y))
|
|
End Function
|
|
Public Property Pixel(ByVal X As Integer, ByVal Y As Integer) As Color
|
|
Get
|
|
Return GetPixel(X, Y)
|
|
End Get
|
|
Set(ByVal value As Color)
|
|
SetPixel(X, Y, value)
|
|
End Set
|
|
End Property
|
|
Public Enum RasterOperation As UInteger
|
|
''' <summary>default operation</summary>
|
|
NORMAL = RasterOperation.SRCCOPY Or RasterOperation.CAPTUREBLT
|
|
''' <summary>dest = source</summary>
|
|
SRCCOPY = &HCC0020
|
|
''' <summary>dest = source OR dest</summary>
|
|
SRCPAINT = &HEE0086
|
|
''' <summary>dest = source AND dest</summary>
|
|
SRCAND = &H8800C6
|
|
''' <summary>dest = source XOR dest</summary>
|
|
SRCINVERT = &H660046
|
|
''' <summary>dest = source AND (NOT dest)</summary>
|
|
SRCERASE = &H440328
|
|
''' <summary>dest = (NOT source)</summary>
|
|
NOTSRCCOPY = &H330008
|
|
''' <summary>dest = (NOT src) AND (NOT dest)</summary>
|
|
NOTSRCERASE = &H1100A6
|
|
''' <summary>dest = (source AND pattern)</summary>
|
|
MERGECOPY = &HC000CA
|
|
''' <summary>dest = (NOT source) OR dest</summary>
|
|
MERGEPAINT = &HBB0226
|
|
''' <summary>dest = pattern</summary>
|
|
PATCOPY = &HF00021
|
|
''' <summary>dest = DPSnoo</summary>
|
|
PATPAINT = &HFB0A09
|
|
''' <summary>dest = pattern XOR dest</summary>
|
|
PATINVERT = &H5A0049
|
|
''' <summary>dest = (NOT dest)</summary>
|
|
DSTINVERT = &H550009
|
|
''' <summary>dest = BLACK</summary>
|
|
BLACKNESS = &H42
|
|
''' <summary>dest = WHITE</summary>
|
|
WHITENESS = &HFF0062
|
|
''' <summary>
|
|
''' Capture window as seen on screen. This includes layered windows
|
|
''' such as WPF windows with AllowsTransparency="true"
|
|
''' </summary>
|
|
CAPTUREBLT = &H40000000
|
|
End Enum
|
|
|
|
Public ReadOnly Property ClipBox() As Rectangle
|
|
Get
|
|
Dim w As WRECT
|
|
GetClipBox(Me.hdc, w)
|
|
Return w.Value
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property ClipSize() As Size
|
|
Get
|
|
Return Me.ClipBox.Size
|
|
End Get
|
|
End Property
|
|
|
|
Public Property Handle() As IntPtr
|
|
Get
|
|
Return Me.hdc
|
|
End Get
|
|
Set(ByVal value As IntPtr)
|
|
Me.hdc = value
|
|
End Set
|
|
End Property
|
|
|
|
Public ReadOnly Property Disposed() As Boolean
|
|
Get
|
|
Return Me._disposed
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub Draw(ByVal source As Graphics, ByVal destrect As Rectangle, ByVal sourceoffset As Point, ByVal operation As RasterOperation)
|
|
Dim hdc As IntPtr = source.GetHdc
|
|
Draw(hdc, destrect, sourceoffset, operation)
|
|
source.ReleaseHdc(hdc)
|
|
End Sub
|
|
Public Sub Draw(ByVal source As DC, ByVal destrect As Rectangle, ByVal sourceoffset As Point, ByVal operation As RasterOperation)
|
|
Draw(source.hdc, destrect, sourceoffset, operation)
|
|
End Sub
|
|
Public Sub Draw(ByVal sourcehdc As IntPtr, ByVal destrect As Rectangle, ByVal sourceoffset As Point, ByVal operation As RasterOperation)
|
|
BitBlt(Me.hdc, destrect.X, destrect.Y, destrect.Width, destrect.Height, sourcehdc, sourceoffset.X, sourceoffset.Y, operation)
|
|
End Sub
|
|
|
|
Public Sub CopyTo(ByVal destination As Graphics, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
CopyTo(destination, Me.ClipBox, operation)
|
|
End Sub
|
|
Public Sub CopyTo(ByVal destination As Graphics, ByVal destrect As Rectangle, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
CopyTo(destination, destrect, New Point(0, 0), operation)
|
|
End Sub
|
|
Public Sub CopyTo(ByVal destination As Graphics, ByVal destrect As Rectangle, ByVal sourceoffset As Point, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
Dim hdc As IntPtr = destination.GetHdc
|
|
CopyTo(hdc, destrect, sourceoffset, operation)
|
|
destination.ReleaseHdc(hdc)
|
|
End Sub
|
|
Public Sub CopyTo(ByVal destination As DC, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
CopyTo(destination.hdc, Me.ClipBox, New Point(0, 0), operation)
|
|
End Sub
|
|
Public Sub CopyTo(ByVal destination As DC, ByVal destrect As Rectangle, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
CopyTo(destination.hdc, destrect, New Point(0, 0), operation)
|
|
End Sub
|
|
Public Sub CopyTo(ByVal destination As DC, ByVal destrect As Rectangle, ByVal sourceoffset As Point, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
CopyTo(destination.hdc, destrect, sourceoffset, operation)
|
|
End Sub
|
|
Public Sub CopyTo(ByVal desthdc As IntPtr, ByVal destrect As Rectangle, ByVal sourceoffset As Point, Optional ByVal operation As RasterOperation = RasterOperation.NORMAL)
|
|
BitBlt(desthdc, destrect.X, destrect.Y, destrect.Width, destrect.Height, Me.hdc, sourceoffset.X, sourceoffset.Y, operation)
|
|
End Sub
|
|
|
|
Public Function ToBitmap(Optional ByVal operation As RasterOperation = RasterOperation.NORMAL) As Bitmap
|
|
Return ToBitmap(Me.ClipSize, operation)
|
|
End Function
|
|
Public Function ToBitmap(ByVal Resolution As Size, Optional ByVal operation As RasterOperation = RasterOperation.SRCCOPY Or RasterOperation.CAPTUREBLT) As Bitmap
|
|
ToBitmap = New Bitmap(Resolution.Width, Resolution.Height)
|
|
Dim g As Graphics = Graphics.FromImage(ToBitmap)
|
|
Dim ghdc As IntPtr = g.GetHdc
|
|
BitBlt(ghdc, 0, 0, Resolution.Width, Resolution.Height, Me.hdc, 0, 0, operation)
|
|
g.ReleaseHdc(ghdc)
|
|
g.Dispose()
|
|
End Function
|
|
|
|
Public ReadOnly Property Graphics() As Graphics
|
|
Get
|
|
If Me.managedgraphics Is Nothing Then Me.managedgraphics = Graphics.FromHdc(Me.hdc)
|
|
Return Me.managedgraphics
|
|
End Get
|
|
End Property
|
|
Public Shared Function FromHandle(ByVal handle As IntPtr) As DC
|
|
FromHandle = New DC()
|
|
FromHandle.hdc = handle
|
|
End Function
|
|
|
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
|
If Me._disposed = False Then
|
|
Select Case managedtype
|
|
Case DCSource.Handle
|
|
ReleaseDC(CType(Me.managedobject, IntPtr), Me.hdc)
|
|
Case DCSource.Graphics
|
|
CType(Me.managedobject, Graphics).ReleaseHdc(Me.hdc)
|
|
End Select
|
|
If managedgraphics IsNot Nothing Then managedgraphics.Dispose()
|
|
Me.managedgraphics = Nothing
|
|
Me.managedobject = Nothing
|
|
Me.managedtype = Nothing
|
|
Me.hdc = Nothing
|
|
Me._disposed = True
|
|
End If
|
|
End Sub
|
|
Public Overloads Sub Dispose() Implements IDisposable.Dispose
|
|
Dispose(True)
|
|
GC.SuppressFinalize(Me)
|
|
End Sub
|
|
End Class
|
|
|
|
Public Structure ShellExecuteInfo
|
|
Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (ByRef lpExecInfo As ShellExecuteInfo) As Boolean
|
|
Sub New(ByVal Verb As Verb)
|
|
Me.lpVerb = Verb.ToString()
|
|
End Sub
|
|
Private cbSize As Integer
|
|
Public fMask As Mask
|
|
Public hwnd As IntPtr
|
|
Public lpVerb As String
|
|
Public lpFile As String
|
|
Public lpParameters As String
|
|
Public lpDirectory As String
|
|
Public nShow As SW
|
|
Public hInstApp As IntPtr
|
|
Public lpIDList As IntPtr
|
|
Public lpClass As String
|
|
Public hkeyClass As IntPtr
|
|
Public dwHotKey As Integer
|
|
Public hIcon As IntPtr
|
|
Public hProcess As IntPtr
|
|
Public Property hMonitor() As IntPtr
|
|
Get
|
|
Return Me.hIcon
|
|
End Get
|
|
Set(ByVal value As IntPtr)
|
|
Me.hIcon = value
|
|
End Set
|
|
End Property
|
|
|
|
Public Enum Mask As Integer
|
|
NONE = &H0
|
|
CLASSNAME = &H1
|
|
CLASSKEY = &H3
|
|
IDLIST = &H4
|
|
INVOKEIDLIST = &HC
|
|
ICON = &H10
|
|
HOTKEY = &H20
|
|
NOCLOSEPROCESS = &H40
|
|
CONNECTNETDRV = &H80
|
|
NOASYNC = &H100
|
|
DOENVSUBST = &H200
|
|
FLAG_NO_UI = &H400
|
|
UNICODE = &H4000
|
|
NO_CONSOLE = &H8000
|
|
ASYNCOK = &H100000
|
|
NOQUERYCLASSSTORE = &H1000000
|
|
HMONITOR = &H200000
|
|
NOZONECHECKS = &H800000
|
|
WAITFORINPUTIDLE = &H2000000
|
|
FLAG_LOG_USAGE = &H4000000
|
|
End Enum
|
|
Public Enum SW As Integer
|
|
''' <summary>
|
|
''' No SW command, default value.
|
|
''' </summary>
|
|
NONE
|
|
''' <summary>
|
|
''' Hides the window and activates another window.
|
|
''' </summary>
|
|
HIDE
|
|
''' <summary>
|
|
''' Maximizes the specified window.
|
|
''' </summary>
|
|
MAXIMIZE
|
|
''' <summary>
|
|
''' Minimizes the specified window and activates the next top-level window in the z-order.
|
|
''' </summary>
|
|
MINIMIZE
|
|
''' <summary>
|
|
''' Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.
|
|
''' An application should specify this flag when restoring a minimized window.
|
|
''' </summary>
|
|
RESTORE
|
|
''' <summary>
|
|
''' Activates the window and displays it in its current size and position.
|
|
''' </summary>
|
|
SHOW
|
|
''' <summary>
|
|
''' Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.
|
|
''' An application should call ShowWindow with this flag to set the initial show state of its main window.
|
|
''' </summary>
|
|
SHOWDEFAULT
|
|
''' <summary>
|
|
''' Activates the window and displays it as a maximized window.
|
|
''' </summary>
|
|
SHOWMAXIMIZED
|
|
''' <summary>
|
|
''' Activates the window and displays it as a minimized window.
|
|
''' </summary>
|
|
SHOWMINIMIZED
|
|
''' <summary>
|
|
''' Displays the window as a minimized window. The active window remains active.
|
|
''' </summary>
|
|
SHOWMINNOACTIVE
|
|
''' <summary>
|
|
''' Displays the window in its current state. The active window remains active.
|
|
''' </summary>
|
|
SHOWNA
|
|
''' <summary>
|
|
''' Displays a window in its most recent size and position. The active window remains active.
|
|
''' </summary>
|
|
SHOWNOACTIVATE
|
|
''' <summary>
|
|
''' Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position.
|
|
''' An application should specify this flag when displaying the window for the first time.
|
|
''' </summary>
|
|
SHOWNORMAL
|
|
End Enum
|
|
Public Enum Verb
|
|
none
|
|
edit
|
|
explore
|
|
find
|
|
open
|
|
print
|
|
properties
|
|
End Enum
|
|
|
|
Public Function Execute() As Boolean
|
|
Me.cbSize = Marshal.SizeOf(Me)
|
|
Return ShellExecuteEx(Me)
|
|
End Function
|
|
End Structure
|
|
|
|
Public Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal ch As Char) As Short
|
|
Public Declare Function MapVirtualKey Lib "User32.dll" Alias "MapVirtualKeyA" (ByVal uCode As UInt32, ByVal uMapType As MAPVK) As UInt32
|
|
Public Enum MAPVK As UInt32
|
|
''' <summary>uCode is a virtual-key code and is translated into a scan code.
|
|
''' If it is a virtual-key code that does not distinguish between left- and
|
|
''' right-hand keys, the left-hand scan code is returned.
|
|
''' If there is no translation, the function returns 0.
|
|
''' </summary>
|
|
''' <remarks></remarks>
|
|
VK_TO_VSC = 0
|
|
''' <summary>uCode is a scan code and is translated into a virtual-key code that
|
|
''' does not distinguish between left- and right-hand keys. If there is no
|
|
''' translation, the function returns 0.
|
|
''' </summary>
|
|
''' <remarks></remarks>
|
|
VSC_TO_VK = 1
|
|
''' <summary>uCode is a virtual-key code and is translated into an unshifted
|
|
''' character value in the low-order word of the return value. Dead keys (diacritics)
|
|
''' are indicated by setting the top bit of the return value. If there is no
|
|
''' translation, the function returns 0.
|
|
''' </summary>
|
|
''' <remarks></remarks>
|
|
VK_TO_CHAR = 2
|
|
''' <summary>Windows NT/2000/XP: uCode is a scan code and is translated into a
|
|
''' virtual-key code that distinguishes between left- and right-hand keys. If
|
|
''' there is no translation, the function returns 0.
|
|
''' </summary>
|
|
''' <remarks></remarks>
|
|
VSC_TO_VK_EX = 3
|
|
End Enum
|
|
<StructLayout(LayoutKind.Explicit)> Public Structure Input
|
|
Sub New(ByVal dx As Integer, ByVal dy As Integer, ByVal flags As MouseEvent, Optional ByVal data As MouseData = 0)
|
|
If (flags And MouseEvent.MoveScreen) = MouseEvent.MoveScreen Then
|
|
'convert to screen absolute
|
|
dx = dx / My.Computer.Screen.Bounds.Width * UShort.MaxValue
|
|
dy = dy / My.Computer.Screen.Bounds.Height * UShort.MaxValue
|
|
flags -= MouseEvent.MoveScreen
|
|
If Not (flags And MouseEvent.MoveAbsolute) = MouseEvent.MoveAbsolute Then
|
|
flags += MouseEvent.MoveAbsolute
|
|
End If
|
|
End If
|
|
Me.type = dwType.MOUSE
|
|
With Me.mi
|
|
.dx = dx
|
|
.dy = dy
|
|
.time = 0
|
|
.dwExtraInfo = 0
|
|
.mouseData = data
|
|
.dwFlags = flags
|
|
End With
|
|
End Sub
|
|
Sub New(ByVal key As Keys, ByVal keyevent As KeyEvent)
|
|
Me.type = dwType.KEYBOARD
|
|
Dim extended As Boolean = False
|
|
If key = Keys.Shift Then key = &H10
|
|
If key = Keys.Control Then key = &H11
|
|
If key = Keys.Menu Then key = &H12
|
|
If key = Keys.LControlKey Or key = Keys.RControlKey Then extended = True
|
|
If key = Keys.LMenu Or key = Keys.RMenu Then extended = True
|
|
If key = Keys.LShiftKey Or key = Keys.RShiftKey Then extended = True
|
|
With Me.ki
|
|
.wVk = key
|
|
.dwFlags = keyevent
|
|
If extended Then .dwFlags += KEYBDINPUT.KEYEVENTF.EXTENDEDKEY
|
|
.time = 0
|
|
.dwExtraInfo = 0
|
|
End With
|
|
End Sub
|
|
Sub New(ByVal msg As Integer, ByVal ParamL As Short, ByVal ParamH As Short)
|
|
Me.type = dwType.HARDWARE
|
|
With Me.hi
|
|
.uMsg = msg
|
|
.wParamL = ParamL
|
|
.wParamH = ParamH
|
|
End With
|
|
End Sub
|
|
|
|
<FieldOffset(0)> Private type As dwType
|
|
<FieldOffset(4)> Private mi As MOUSEINPUT
|
|
<FieldOffset(4)> Private ki As KEYBDINPUT
|
|
<FieldOffset(4)> Private hi As HARDWAREINPUT
|
|
|
|
Private Structure MOUSEINPUT
|
|
Public dx As Integer
|
|
Public dy As Integer
|
|
Public mouseData As Integer
|
|
Public dwFlags As MOUSEEVENTF
|
|
Public time As Integer
|
|
Public dwExtraInfo As IntPtr
|
|
Public Enum MOUSEEVENTF As Integer
|
|
MOVE = &H1
|
|
LEFTDOWN = &H2
|
|
LEFTUP = &H4
|
|
RIGHTDOWN = &H8
|
|
RIGHTUP = &H10
|
|
MIDDLEDOWN = &H20
|
|
MIDDLEUP = &H40
|
|
XDOWN = &H80
|
|
XUP = &H100
|
|
WHEEL = &H800
|
|
VIRTUALDESK = &H4000
|
|
ABSOLUTE = &H8000
|
|
End Enum
|
|
End Structure
|
|
Private Structure KEYBDINPUT
|
|
Public wVk As Short
|
|
Public wScan As Short
|
|
Public dwFlags As KEYEVENTF
|
|
Public time As Integer
|
|
Public dwExtraInfo As IntPtr
|
|
Public Enum KEYEVENTF As Integer
|
|
KEYDOWN = 0
|
|
EXTENDEDKEY = 1
|
|
KEYUP = 2
|
|
UNICODE = 4
|
|
SCANCODE = 8
|
|
End Enum
|
|
End Structure
|
|
Private Structure HARDWAREINPUT
|
|
Public uMsg As Integer
|
|
Public wParamL As Short
|
|
Public wParamH As Short
|
|
End Structure
|
|
Private Enum dwType As Integer
|
|
MOUSE = 0
|
|
KEYBOARD = 1
|
|
HARDWARE = 2
|
|
End Enum
|
|
|
|
Public Enum MouseEvent
|
|
''' <summary>
|
|
''' Moves the cursor with the offset dx and dy
|
|
''' </summary>
|
|
Move = &H1
|
|
''' <summary>
|
|
''' Places the cursor at the screen coordinates dx and dy
|
|
''' </summary>
|
|
MoveScreen = &H1000
|
|
''' <summary>
|
|
''' Places the cursor at the screen using dx and dy ranging from 0 (left/top) to 65535 (right/bottom)
|
|
''' </summary>
|
|
MoveAbsolute = Move Or &H8000
|
|
''' <summary>
|
|
''' Places the cursor at the desktop using dx and dy ranging from 0 (left/top) to 65535 (right/bottom)
|
|
''' </summary>
|
|
MoveVirtualDesktop = MoveAbsolute Or &H4000
|
|
''' <summary>
|
|
''' Press the left mouse button
|
|
''' </summary>
|
|
LeftDown = &H2
|
|
''' <summary>
|
|
''' Release the left mouse button
|
|
''' </summary>
|
|
LeftUp = &H4
|
|
''' <summary>
|
|
''' Press the right mouse button
|
|
''' </summary>
|
|
RightDown = &H8
|
|
''' <summary>
|
|
''' Release the right mouse button
|
|
''' </summary>
|
|
RightUp = &H10
|
|
''' <summary>
|
|
''' Press the middle mouse button
|
|
''' </summary>
|
|
MiddleDown = &H30
|
|
''' <summary>
|
|
''' Release the middle mouse button
|
|
''' </summary>
|
|
MiddleUp = &H40
|
|
''' <summary>
|
|
''' Press the XButton specified in the data member
|
|
''' </summary>
|
|
XDown = &H80
|
|
''' <summary>
|
|
''' Release the XButton specified in the data member
|
|
''' </summary>
|
|
XUp = &H100
|
|
''' <summary>
|
|
''' Scroll the vertical mousewheel with the delta count of the data member
|
|
''' </summary>
|
|
MouseVWheel = &H800
|
|
''' <summary>
|
|
''' Scroll the horizontal mousewheel with the delta count of the data member
|
|
''' </summary>
|
|
MouseHWheel = &H20E
|
|
End Enum
|
|
Public Enum MouseData As Integer
|
|
XButton1 = 1
|
|
XButton2 = 2
|
|
Wheel_Delta_Backward = -120
|
|
Wheel_Delta_Forward = 120
|
|
Wheel_Delta_Left = -120
|
|
Wheel_Delta_Right = 120
|
|
End Enum
|
|
Public Enum KeyEvent
|
|
Down = 0
|
|
Up = 2
|
|
End Enum
|
|
|
|
Private Declare Function SendInput Lib "user32.dll" (ByVal cInputs As Integer, ByVal pInputs() As Input, ByVal cbSize As Integer) As Integer
|
|
Public Shared Function Send(ByVal ParamArray inputs() As Input) As Boolean
|
|
Return SendInput(inputs.Count, inputs, Marshal.SizeOf(GetType(Input)))
|
|
End Function
|
|
Public Function Send() As Boolean
|
|
Return Send(Me)
|
|
End Function
|
|
End Structure
|
|
|
|
<StructLayout(LayoutKind.Explicit)> Public Structure WORD
|
|
Sub New(ByVal value As Short)
|
|
Me.Short1 = value
|
|
End Sub
|
|
Shared Widening Operator CType(ByVal w As WORD) As Short
|
|
Return w.Short1
|
|
End Operator
|
|
<FieldOffset(0)> Public Short1 As Short
|
|
<FieldOffset(0)> Public UShort1 As UShort
|
|
<FieldOffset(0)> Public Byte1 As Byte
|
|
<FieldOffset(1)> Public Byte2 As Byte
|
|
Public Shared Function FromBB(ByVal Byte1 As Byte, ByVal Byte2 As Byte) As WORD
|
|
FromBB = New WORD
|
|
FromBB.Byte1 = Byte1
|
|
FromBB.Byte2 = Byte2
|
|
End Function
|
|
End Structure
|
|
<StructLayout(LayoutKind.Explicit)> Public Structure DWORD
|
|
Sub New(ByVal value As Integer)
|
|
Me.Integer1 = value
|
|
End Sub
|
|
Sub New(ByVal Short1 As Short, ByVal Short2 As Short)
|
|
Me.Short1 = Short1
|
|
Me.Short2 = Short2
|
|
End Sub
|
|
Shared Widening Operator CType(ByVal w As DWORD) As Integer
|
|
Return w.Integer1
|
|
End Operator
|
|
Shared Widening Operator CType(ByVal w As DWORD) As IntPtr
|
|
Return w.Integer1
|
|
End Operator
|
|
<FieldOffset(0)> Public Integer1 As Integer
|
|
<FieldOffset(0)> Public UInteger1 As UInteger
|
|
<FieldOffset(0)> Public Short1 As Short
|
|
<FieldOffset(0)> Public UShort1 As UShort
|
|
<FieldOffset(2)> Public Short2 As Short
|
|
<FieldOffset(2)> Public UShort2 As UShort
|
|
<FieldOffset(0)> Public Byte1 As Byte
|
|
<FieldOffset(1)> Public Byte2 As Byte
|
|
<FieldOffset(2)> Public Byte3 As Byte
|
|
<FieldOffset(3)> Public Byte4 As Byte
|
|
Public Shared Function FromUsBB(ByVal UShort1 As UShort, ByVal Byte1 As Byte, ByVal Byte2 As Byte) As DWORD
|
|
FromUsBB = New DWORD
|
|
FromUsBB.UShort1 = UShort1
|
|
FromUsBB.Byte3 = Byte1
|
|
FromUsBB.Byte4 = Byte2
|
|
End Function
|
|
Public Shared Function FromSBB(ByVal Short1 As Short, ByVal Byte1 As Byte, ByVal Byte2 As Byte) As DWORD
|
|
FromSBB = New DWORD
|
|
FromSBB.Short1 = Short1
|
|
FromSBB.Byte3 = Byte1
|
|
FromSBB.Byte4 = Byte2
|
|
End Function
|
|
Public Shared Function FromBBBB(ByVal Byte1 As Byte, ByVal Byte2 As Byte, ByVal Byte3 As Byte, ByVal Byte4 As Byte) As DWORD
|
|
FromBBBB = New DWORD
|
|
FromBBBB.Byte1 = Byte1
|
|
FromBBBB.Byte2 = Byte2
|
|
FromBBBB.Byte3 = Byte3
|
|
FromBBBB.Byte4 = Byte4
|
|
End Function
|
|
End Structure
|
|
<StructLayout(LayoutKind.Explicit)> Public Structure QWORD
|
|
Sub New(ByVal value As Long)
|
|
Me.Long1 = value
|
|
End Sub
|
|
Shared Widening Operator CType(ByVal w As QWORD) As Long
|
|
Return w.Long1
|
|
End Operator
|
|
<FieldOffset(0)> Public Long1 As Long
|
|
<FieldOffset(0)> Public ULong1 As ULong
|
|
<FieldOffset(0)> Public Integer1 As Integer
|
|
<FieldOffset(0)> Public UInteger1 As UInteger
|
|
<FieldOffset(4)> Public Integer2 As Integer
|
|
<FieldOffset(4)> Public UInteger2 As UInteger
|
|
<FieldOffset(0)> Public Short1 As Short
|
|
<FieldOffset(0)> Public UShort1 As UShort
|
|
<FieldOffset(2)> Public Short2 As Short
|
|
<FieldOffset(2)> Public UShort2 As UShort
|
|
<FieldOffset(4)> Public Short3 As Short
|
|
<FieldOffset(4)> Public UShort3 As UShort
|
|
<FieldOffset(6)> Public Short4 As Short
|
|
<FieldOffset(6)> Public UShort4 As UShort
|
|
<FieldOffset(0)> Public Byte1 As Byte
|
|
<FieldOffset(1)> Public Byte2 As Byte
|
|
<FieldOffset(2)> Public Byte3 As Byte
|
|
<FieldOffset(3)> Public Byte4 As Byte
|
|
<FieldOffset(4)> Public Byte5 As Byte
|
|
<FieldOffset(5)> Public Byte6 As Byte
|
|
<FieldOffset(6)> Public Byte7 As Byte
|
|
<FieldOffset(7)> Public Byte8 As Byte
|
|
End Structure
|
|
|
|
Public Structure WPOINT
|
|
Public X As Integer
|
|
Public Y As Integer
|
|
Sub New(ByVal X As Integer, ByVal Y As Integer)
|
|
Me.X = X
|
|
Me.Y = Y
|
|
End Sub
|
|
Sub New(ByVal p As Point)
|
|
Me.X = p.X
|
|
Me.Y = p.Y
|
|
End Sub
|
|
Public Property Value() As Point
|
|
Get
|
|
Return New Point(Me.X, Me.Y)
|
|
End Get
|
|
Set(ByVal value As Point)
|
|
Me.X = value.X
|
|
Me.Y = value.Y
|
|
End Set
|
|
End Property
|
|
End Structure
|
|
Public Structure WRECT
|
|
Public Left As Integer, Top As Integer, Right As Integer, Bottom As Integer
|
|
Sub New(ByVal r As Rectangle)
|
|
Me.Value = r
|
|
End Sub
|
|
Public Property Value() As Rectangle
|
|
Get
|
|
Return New Rectangle(Left, Top, Right - Left, Bottom - Top)
|
|
End Get
|
|
Set(ByVal value As Rectangle)
|
|
Me.Left = value.Left
|
|
Me.Right = value.Right
|
|
Me.Top = value.Top
|
|
Me.Bottom = value.Bottom
|
|
End Set
|
|
End Property
|
|
End Structure
|
|
|
|
Public Class MCI
|
|
<DllImport("winmm.dll")> _
|
|
Private Shared Function mciGetErrorString(ByVal fdwError As Integer, ByVal lpszErrorText As System.Text.StringBuilder, ByVal cchErrorText As UInt32) As Boolean
|
|
End Function
|
|
<DllImport("winmm.dll")> _
|
|
Private Shared Function mciSendString(ByVal strCommand As String, ByVal strReturn As System.Text.StringBuilder, ByVal iReturnLength As Integer, ByVal hwndCallback As IntPtr) As Long
|
|
End Function
|
|
<DllImport("winmm.dll")> _
|
|
Private Shared Function mciSendCommand(ByVal IDDevice As Integer, ByVal uMsg As UInt32, ByVal fdwCommand As Integer, ByVal dwParam As Integer) As Long
|
|
End Function
|
|
|
|
Private Shared Function GetErrorString(ByVal ErrorCode As Long) As String
|
|
With New QWORD(ErrorCode)
|
|
GetErrorString = "Device: " & .Integer2 & " - "
|
|
Dim buff As New System.Text.StringBuilder(128)
|
|
If mciGetErrorString(.Integer1, buff, buff.Capacity) Then
|
|
GetErrorString &= buff.ToString
|
|
Else
|
|
GetErrorString &= "Error code: " & .Integer1
|
|
End If
|
|
End With
|
|
End Function
|
|
<DebuggerStepThrough()> _
|
|
Public Shared Function SendString(ByVal command As String, ByVal callback As IntPtr, ByVal returnlength As Integer) As String
|
|
Dim buff As System.Text.StringBuilder = Nothing
|
|
If returnlength > 0 Then buff = New System.Text.StringBuilder(returnlength)
|
|
Dim err As Long = mciSendString(command, buff, returnlength, callback)
|
|
If err <> 0 Then
|
|
LastError = New Exception(GetErrorString(err))
|
|
Throw LastError
|
|
Return "ERROR"
|
|
End If
|
|
If returnlength = 0 Then Return Nothing Else Return buff.ToString
|
|
End Function
|
|
<DebuggerStepThrough()> _
|
|
Public Shared Sub SendString(ByVal command As String, ByVal callback As IntPtr)
|
|
SendString(command, callback, 0)
|
|
End Sub
|
|
<DebuggerStepThrough()> _
|
|
Public Shared Sub SendCommand(ByVal DeviceID As Integer, ByVal Message As UInt32, ByVal Command As IntPtr, ByVal Parameter As Integer)
|
|
Dim err As Long = mciSendCommand(DeviceID, Message, Command, Parameter)
|
|
If err <> 0 Then
|
|
LastError = New Exception(GetErrorString(err))
|
|
Throw LastError
|
|
End If
|
|
End Sub
|
|
End Class
|
|
|
|
Public Class DESKTOP
|
|
Public Declare Auto Function GetThreadDesktop Lib "user32.dll" (ByVal threadId As Integer) As IntPtr
|
|
Public Declare Auto Function OpenInputDesktop Lib "user32.dll" (ByVal flags As Integer, <MarshalAs(UnmanagedType.Bool)> ByVal inherit As Boolean, ByVal desiredAccess As Integer) As IntPtr
|
|
Public Declare Auto Function CreateDesktop Lib "user32.dll" (ByVal desktop As String, ByVal device As String, ByVal devmode As IntPtr, ByVal flags As Integer, ByVal desiredAccess As Integer, ByVal lpsa As IntPtr) As IntPtr
|
|
Public Declare Auto Function SetThreadDesktop Lib "user32.dll" (ByVal desktop As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
|
|
Public Declare Auto Function SwitchDesktop Lib "user32.dll" (ByVal desktop As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
|
|
Public Declare Auto Function CloseDesktop Lib "user32.dll" (ByVal desktop As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
|
|
End Class
|
|
End Class |