diff options
| author | IBMPCDOS5 <[email protected]> | 2017-09-24 13:34:14 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-09-24 13:34:14 -0500 |
| commit | 061ce54709db3157ae3366607420639d34942c7e (patch) | |
| tree | c6a440b7ed182df8f8d1e5d0fdf55e28cf74055f /ShiftOS/Window.vb | |
| parent | 2992686ec723fa4c854b6de27007a284b484a92e (diff) | |
| parent | 9107510c4985ceb781640163bbb82ab6de2fa35e (diff) | |
| download | shiftos-rewind-061ce54709db3157ae3366607420639d34942c7e.tar.gz shiftos-rewind-061ce54709db3157ae3366607420639d34942c7e.tar.bz2 shiftos-rewind-061ce54709db3157ae3366607420639d34942c7e.zip | |
Merge pull request #4 from AShifter/master
Add proper WM and Remove old source
Diffstat (limited to 'ShiftOS/Window.vb')
| -rw-r--r-- | ShiftOS/Window.vb | 1127 |
1 files changed, 0 insertions, 1127 deletions
diff --git a/ShiftOS/Window.vb b/ShiftOS/Window.vb deleted file mode 100644 index 641034f..0000000 --- a/ShiftOS/Window.vb +++ /dev/null @@ -1,1127 +0,0 @@ -Public Class Window - -#Region "NATIVE" - Private Enum GW - NONE = -1 - HWNDFIRST = 0 - HWNDLAST = 1 - HWNDNEXT = 2 - HWNDPREV = 3 - OWNER = 4 - CHILD = 5 - ENABLEDPOPUP = 6 - End Enum - Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal uCmd As GW) As IntPtr - Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As IntPtr) As Integer - Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As IntPtr, ByVal lpString As System.Text.StringBuilder, ByVal cch As Integer) As Integer - Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean - Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Integer, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer) As Integer - Private Declare Function GetParent Lib "user32" (ByVal hWnd As IntPtr) As IntPtr - Private Declare Function SetParent Lib "user32" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer - Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As System.Runtime.InteropServices.HandleRef, ByRef lpRect As API.WRECT) As Boolean - Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As System.Runtime.InteropServices.HandleRef, ByRef lpRect As API.WRECT) As Boolean - Private Enum SWP As UInteger - ''' <summary>If the calling thread and the thread that owns the window are attached to different input queues, - ''' the system posts the request to the thread that owns the window. This prevents the calling thread from - ''' blocking its execution while other threads process the request.</summary> - ''' <remarks>SWP_ASYNCWINDOWPOS</remarks> - SynchronousWindowPosition = &H4000 - ''' <summary>Prevents generation of the WM_SYNCPAINT message.</summary> - ''' <remarks>SWP_DEFERERASE</remarks> - DeferErase = &H2000 - ''' <summary>Draws a frame (defined in the window's class description) around the window.</summary> - ''' <remarks>SWP_DRAWFRAME</remarks> - DrawFrame = &H20 - ''' <summary>Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to - ''' the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE - ''' is sent only when the window's size is being changed.</summary> - ''' <remarks>SWP_FRAMECHANGED</remarks> - FrameChanged = &H20 - ''' <summary>Hides the window.</summary> - ''' <remarks>SWP_HIDEWINDOW</remarks> - HideWindow = &H80 - ''' <summary>Does not activate the window. If this flag is not set, the window is activated and moved to the - ''' top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter - ''' parameter).</summary> - ''' <remarks>SWP_NOACTIVATE</remarks> - DoNotActivate = &H10 - ''' <summary>Discards the entire contents of the client area. If this flag is not specified, the valid - ''' contents of the client area are saved and copied back into the client area after the window is sized or - ''' repositioned.</summary> - ''' <remarks>SWP_NOCOPYBITS</remarks> - DoNotCopyBits = &H100 - ''' <summary>Retains the current position (ignores X and Y parameters).</summary> - ''' <remarks>SWP_NOMOVE</remarks> - IgnoreMove = &H2 - ''' <summary>Does not change the owner window's position in the Z order.</summary> - ''' <remarks>SWP_NOOWNERZORDER</remarks> - DoNotChangeOwnerZOrder = &H200 - ''' <summary>Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to - ''' the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent - ''' window uncovered as a result of the window being moved. When this flag is set, the application must - ''' explicitly invalidate or redraw any parts of the window and parent window that need redrawing.</summary> - ''' <remarks>SWP_NOREDRAW</remarks> - DoNotRedraw = &H8 - ''' <summary>Same as the SWP_NOOWNERZORDER flag.</summary> - ''' <remarks>SWP_NOREPOSITION</remarks> - DoNotReposition = &H200 - ''' <summary>Prevents the window from receiving the WM_WINDOWPOSCHANGING message.</summary> - ''' <remarks>SWP_NOSENDCHANGING</remarks> - DoNotSendChangingEvent = &H400 - ''' <summary>Retains the current size (ignores the cx and cy parameters).</summary> - ''' <remarks>SWP_NOSIZE</remarks> - IgnoreResize = &H1 - ''' <summary>Retains the current Z order (ignores the hWndInsertAfter parameter).</summary> - ''' <remarks>SWP_NOZORDER</remarks> - IgnoreZOrder = &H4 - ''' <summary>Displays the window.</summary> - ''' <remarks>SWP_SHOWWINDOW</remarks> - ShowWindow = &H40 - End Enum - Private Enum HWNDafter As Integer - BOTTOM = 1 - NOTOPMOST = -2 - TOP = 0 - TOPMOST = -1 - End Enum - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As IntPtr, ByVal hWndInsertAfter As HWNDafter, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As SWP) As Boolean - - Private Declare Function IsWindow Lib "user32" (ByVal hWnd As IntPtr) As Boolean - Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As IntPtr) As Boolean - Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal time As Integer, ByVal flags As AnimateFlags) As Boolean - Private Declare Function RedrawWindow Lib "user32" (ByVal hWnd As IntPtr, ByVal lprcUpdate As IntPtr, ByVal hrgnUpdate As IntPtr, ByVal flags As RedrawFlags) As Boolean - Private Declare Function FlashWindow Lib "user32" (ByVal hWnd As IntPtr, ByVal bInvert As Boolean) As Boolean - Private Declare Function PrintWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal hDC As IntPtr, ByVal nFlags As UInteger) As Boolean - Private Declare Function GetDC Lib "user32" (ByVal hwnd As IntPtr) As IntPtr - Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As IntPtr) As IntPtr - Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As IntPtr, ByRef lpPoint As Point) As Boolean - Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As IntPtr, ByRef lpPoint As Point) As Boolean - Private Declare Function SetCapture Lib "user32" (ByVal hwnd As IntPtr) As IntPtr - Private Declare Function ReleaseCapture Lib "user32" () As IntPtr - Private Declare Function GetCapture Lib "user32" () As IntPtr - - Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr - Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal className As String, ByVal windowTitle As IntPtr) As IntPtr - Private Declare Function WindowFromPoint Lib "user32" (ByVal Point As API.WPOINT) As IntPtr - Private Declare Function ChildWindowFromPoint Lib "user32" (ByVal hWndParent As IntPtr, ByVal point As API.WPOINT) As IntPtr - Private Declare Function GetForegroundWindow Lib "user32" () As IntPtr - Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As IntPtr) As Boolean - Private Declare Function GetDesktopWindow Lib "user32" () As IntPtr - Private Declare Function GetTopWindow Lib "user32" (ByVal hwnd As IntPtr) As IntPtr - Private Declare Function GetFocus Lib "user32" () As IntPtr - Private Declare Function GetActiveWindow Lib "user32.dll" () As IntPtr - Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer - - Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr - Private Declare Function GetMenu Lib "user32" (ByVal hWnd As IntPtr) As IntPtr - Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As IntPtr, ByVal nPos As Integer) As IntPtr - - Private Enum GWL As Integer - WNDPROC = -4 - HINSTANCE = -6 - HWNDPARENT = -8 - STYLE = -16 - EXSTYLE = -20 - USERDATA = -21 - ID = -12 - End Enum - Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As IntPtr, ByVal nIndex As GWL, ByVal dwNewLong As Long) As Integer - <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetWindowLong")> _ - Private Shared Function GetWindowLongPtr32(ByVal hWnd As Runtime.InteropServices.HandleRef, ByVal nIndex As Integer) As Long - End Function - <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetWindowLongPtr")> _ - Private Shared Function GetWindowLongPtr64(ByVal hWnd As Runtime.InteropServices.HandleRef, ByVal nIndex As Integer) As Long - End Function - Private Shared Function GetWindowLong(ByVal hwnd As Runtime.InteropServices.HandleRef, ByVal nIndex As GWL) As Long - If IntPtr.Size = 8 Then - Return GetWindowLongPtr64(hwnd, nIndex) - Else - Return GetWindowLongPtr32(hwnd, nIndex) - End If - End Function - - Private Structure LayeredWindowAttributes - Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As IntPtr, ByVal crKey As Integer, ByVal alpha As Byte, ByVal dwFlags As LWA) As Boolean - Private Declare Function GetLayeredWindowAttributes Lib "user32" (ByVal hWnd As IntPtr, ByRef crKey As Integer, ByRef alpha As Byte, ByRef dwFlags As LWA) As Boolean - Public Sub New(ByVal hwnd As IntPtr) - Me.hwnd = hwnd - GetLayeredWindowAttributes(Me.hwnd, Me.crKey, Me.alpha, Me.dwFlags) - End Sub - Private hwnd As IntPtr - Public crKey As Integer - Public alpha As Byte - Private dwFlags As LWA - Private Enum LWA As Integer - ColorKey = &H1 - Alpha = &H2 - End Enum - Public Property UseColorKey() As Boolean - Get - Return (Me.dwFlags And LWA.ColorKey) = LWA.ColorKey - End Get - Set(ByVal value As Boolean) - If (Me.dwFlags And LWA.ColorKey) = LWA.ColorKey <> value Then - If value = True Then Me.dwFlags += LWA.ColorKey Else Me.dwFlags -= LWA.ColorKey - End If - End Set - End Property - Public Property UseAlpha() As Boolean - Get - Return (Me.dwFlags And LWA.Alpha) = LWA.Alpha - End Get - Set(ByVal value As Boolean) - If (Me.dwFlags And LWA.Alpha) = LWA.Alpha <> value Then - If value = True Then Me.dwFlags += LWA.Alpha Else Me.dwFlags -= LWA.Alpha - End If - End Set - End Property - Public Function Apply() As Boolean - Return SetLayeredWindowAttributes(Me.hwnd, Me.crKey, Me.alpha, Me.dwFlags) - End Function - End Structure - - Private Structure WindowPlacement - Private Declare Function SetWindowPlacement Lib "user32" (ByVal hWnd As IntPtr, ByRef lpwndpl As WindowPlacement) As Boolean - Private Declare Function GetWindowPlacement Lib "user32" (ByVal hWnd As IntPtr, ByRef lpwndpl As WindowPlacement) As Boolean - Sub New(ByVal hWnd As IntPtr) - Me.length = System.Runtime.InteropServices.Marshal.SizeOf(Me) - GetWindowPlacement(hWnd, Me) - End Sub - Public Function Send(ByVal hWnd As IntPtr) As Boolean - Return SetWindowPlacement(hWnd, Me) - End Function - Public length As Integer - Public flags As WPF - Public showCmd As State - Public minimizedPosition As API.WPOINT - Public maximizedPosition As API.WPOINT - Public normalPosition As API.WRECT - Public Enum WPF As Integer - ASyncWindowPlacement = 4 - RestoreToMaximized = 2 - SetMinimizedPosition = 1 - End Enum - End Structure - Private Class Enumerator - Private Delegate Function EnumCallBackDelegate(ByVal hwnd As Integer, ByVal lParam As Integer) As Integer - Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As EnumCallBackDelegate, ByVal lParam As Integer) As Integer - Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Integer, ByVal lpEnumFunc As EnumCallBackDelegate, ByVal lParam As Integer) As Integer - Private Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As UInteger, ByVal lpfn As EnumCallBackDelegate, ByVal lParam As Integer) As Boolean - Private Declare Function EnumDesktopWindows Lib "user32" (ByVal hDesktop As IntPtr, ByVal lpfn As EnumCallBackDelegate, ByVal lparam As Integer) As Boolean - - Private Function EnumProc(ByVal hwnd As Int32, ByVal lParam As Int32) As Int32 - If lParam = 1 AndAlso GetParent(hwnd) = 0 AndAlso IsWindowVisible(hwnd) Then _list.Add(hwnd) 'toplevel - If lParam = 2 Then _list.Add(hwnd) 'childwindows - If lParam = 3 Then _list.Add(hwnd) 'threadwindows - If lParam = 4 Then _list.Add(hwnd) 'desktopwindows - Return 1 - End Function - - Private _list As List(Of IntPtr) - Public Function GetTopLevelWindows() As List(Of IntPtr) - _list = New List(Of IntPtr) - EnumWindows(AddressOf EnumProc, 1) - Return _list - End Function - Public Function GetChildWindows(ByVal hwnd As Int32) As List(Of IntPtr) - _list = New List(Of IntPtr) - EnumChildWindows(hwnd, AddressOf EnumProc, 2) - Return _list - End Function - Public Function GetThreadWindows(ByVal threadID As Integer) As List(Of IntPtr) - _list = New List(Of IntPtr) - EnumThreadWindows(threadID, AddressOf EnumProc, 3) - Return _list - End Function - Public Function GetDesktopWindows(ByVal desktop As IntPtr) As List(Of IntPtr) - _list = New List(Of IntPtr) - EnumDesktopWindows(desktop, AddressOf EnumProc, 4) - Return _list - End Function - End Class - - Public Structure KeyCommand - Sub New(ByVal Key As Keys, ByVal EventType As KeyEvent) - Dim Up As Boolean = EventType = KeyEvent.Up - Dim Alt As Boolean = (Key And Keys.Alt) = Keys.Alt - Dim F10 As Boolean = (Key And Keys.F10) = Keys.F10 - If Alt Or F10 Then EventType += 4 'offset to sys_ - - Me.Key = Key - Me.EventType = EventType - Me.Flags = EventFlag.None - If Up Then Me.Flags = EventFlag.PrevWasDown - If Up And Not Alt And Not F10 Then Me.Flags += EventFlag.Transition - If Alt And Not Up Then Me.Flags += EventFlag.AltKeyDown - - Dim extended As Boolean = False - If Key = Keys.LControlKey Or Key = Keys.RControlKey Then extended = True - If Key = Keys.LShiftKey Or Key = Keys.RShiftKey Then extended = True - If Key = Keys.LMenu Or Key = Keys.RMenu Then extended = True - If extended Then Me.Flags += EventFlag.ExtendedKey - Me.RepeatCount = 0 - Me.scancode = 0 - End Sub - Sub New(ByVal Character As Char) - Me.Key = Asc(Character) - Me.EventType = KeyEvent.CharPress - Me.Flags = EventFlag.None - End Sub - Public EventType As KeyEvent - Public Key As Keys - Public RepeatCount As UShort - Public scancode As Byte - Public Flags As Byte - Public Enum EventFlag As Byte - None = 0 - ExtendedKey = 1 - AltKeyDown = 32 - PrevWasDown = 64 - Transition = 128 - End Enum - Public Function Post(ByVal hwnd As IntPtr) As Boolean - Return API.PostMessage(hwnd, EventType, Key, API.DWORD.FromSBB(Me.RepeatCount, Me.scancode, Me.Flags)) - End Function - End Structure - Public Structure MouseCommand - Sub New(ByVal X As UShort, ByVal Y As UShort, Optional ByVal Button As MouseButtons = MouseButtons.None, Optional ByVal EventType As MouseEvent = MouseEvent.Move) - Me.EventType = EventType - Me.Button = Button - Me.Modifier = MK.NONE - Me.x = X - Me.y = Y - End Sub - Sub New(ByVal Location As Point, Optional ByVal Button As MouseButtons = MouseButtons.None, Optional ByVal EventType As MouseEvent = MouseEvent.Move) - Me.EventType = EventType - Me.Button = Button - Me.Modifier = MK.NONE - Me.x = Location.X - Me.y = Location.Y - End Sub - Public EventType As MouseEvent - Public Button As MouseButtons - Public x As UShort - Public y As UShort - Public Modifier As MK - Public Function Post(ByVal hwnd As IntPtr) As Boolean - Dim msg1 As msg = 0 - Dim msg2 As msg = 0 - Dim add As Boolean = EventType >= 0 And EventType <= 2 - Select Case Button - Case MouseButtons.Left - msg1 = msg.LBUTTONDOWN - Case MouseButtons.Middle - msg1 = msg.MBUTTONDOWN - Case MouseButtons.Right - msg1 = msg.RBUTTONDOWN - Case Else - add = False - msg1 = msg.MOUSEMOVE - End Select - If EventType = MouseEvent.DoubleClick Then - msg2 = msg1 + MouseEvent.Up - msg1 = msg1 + MouseEvent.DoubleClick - ElseIf EventType = MouseEvent.Click Then - msg2 = msg1 + MouseEvent.Up - msg1 = msg1 + MouseEvent.Down - ElseIf add Then - msg1 += EventType - End If - - Dim success As Boolean = True - If msg1 <> 0 AndAlso Not API.PostMessage(hwnd, msg1, Modifier, New API.DWORD(Me.x, Me.y)) Then success = False - If msg2 <> 0 AndAlso Not API.PostMessage(hwnd, msg2, Modifier, New API.DWORD(Me.x, Me.y)) Then success = False - Return success - End Function - Public Enum MK As Integer - 'No keys are down - NONE = &H0 - 'The CTRL key is down. - CONTROL = &H8 - 'The left mouse button is down. - LBUTTON = &H1 - 'The middle mouse button is down. - MBUTTON = &H10 - 'The right mouse button is down. - RBUTTON = &H2 - 'The SHIFT key is down. - SHIFT = &H4 - 'The first X button is down. - XBUTTON1 = &H20 - 'The second X button is down. - XBUTTON2 = &H40 - End Enum - - Private Enum msg As UInteger - MOUSEACTIVATE = &H21 - MOUSEMOVE = &H200 - LBUTTONDOWN = 513 - LBUTTONUP = 514 - LBUTTONDBLCLK = 515 - RBUTTONDOWN = 516 - RBUTTONUP = 517 - RBUTTONDBLCLK = 518 - MBUTTONDOWN = 519 - MBUTTONUP = 520 - MBUTTONDBLCLK = 521 - End Enum - End Structure -#End Region - - Public Enum KeyEvent - Down = &H100 - Up = &H101 - CharPress = &H102 - End Enum - Public Enum MouseEvent - Down = 0 - Up = 1 - DoubleClick = 2 - Click = 3 - Move = 4 - End Enum - Public Enum RedrawFlags As UInteger - ''' <summary> - ''' Invalidates the rectangle or region that you specify in lprcUpdate or hrgnUpdate. - ''' You can set only one of these parameters to a non-NULL value. If both are NULL, RDW_INVALIDATE invalidates the entire window. - ''' </summary> - Invalidate = &H1 - ''' <summary>Causes the OS to post a WM_PAINT message to the window regardless of whether a portion of the window is invalid.</summary> - InternalPaint = &H2 - ''' <summary> - ''' Causes the window to receive a WM_ERASEBKGND message when the window is repainted. - ''' Specify this value in combination with the RDW_INVALIDATE value; otherwise, RDW_ERASE has no effect. - ''' </summary> - [Erase] = &H4 - ''' <summary> - ''' Validates the rectangle or region that you specify in lprcUpdate or hrgnUpdate. - ''' You can set only one of these parameters to a non-NULL value. If both are NULL, RDW_VALIDATE validates the entire window. - ''' This value does not affect internal WM_PAINT messages. - ''' </summary> - Validate = &H8 - NoInternalPaint = &H10 - ''' <summary>Suppresses any pending WM_ERASEBKGND messages.</summary> - NoErase = &H20 - ''' <summary>Excludes child windows, if any, from the repainting operation.</summary> - NoChildren = &H40 - ''' <summary>Includes child windows, if any, in the repainting operation.</summary> - AllChildren = &H80 - ''' <summary>Causes the affected windows, which you specify by setting the RDW_ALLCHILDREN and RDW_NOCHILDREN values, to receive WM_ERASEBKGND and WM_PAINT messages before the RedrawWindow returns, if necessary.</summary> - UpdateNow = &H100 - ''' <summary> - ''' Causes the affected windows, which you specify by setting the RDW_ALLCHILDREN and RDW_NOCHILDREN values, to receive WM_ERASEBKGND messages before RedrawWindow returns, if necessary. - ''' The affected windows receive WM_PAINT messages at the ordinary time. - ''' </summary> - EraseNow = &H200 - Frame = &H400 - NoFrame = &H800 - End Enum - Public Enum AnimateFlags - HOR_POSITIVE = &H1 - HOR_NEGATIVE = &H2 - VER_POSITIVE = &H4 - VER_NEGATIVE = &H8 - CENTER = &H10 - HIDE = &H10000 - ACTIVATE = &H20000 - SLIDE = &H40000 - BLEND = &H80000 - End Enum - Public Enum State - Hidden = 0 - Normal = 1 - Minimized = 2 - Maximized = 3 - Shown = 5 - End Enum - Public Enum Styles As Long - ControlBox = &H80000L - MinimizeBox = &H20000L - MaximizeBox = &H10000L - Sizable = ThickFrame - Border = &H800000L - Caption = &HC00000L - Visible = &H10000000L - Disabled = &H8000000L - Child = &H40000000L - VScrollBar = &H200000L - HScrollBar = &H100000L - TabStop = &H10000L - Group = &H20000L - ClipSiblings = &H4000000L - ClipChildren = &H2000000L - ThickFrame = &H40000L - DialogFrame = &H400000L - - 'initial start state - Minimize = &H20000000L - Maximize = &H1000000L - - Overlapped = &H0L - Tiled = Overlapped - OverlappedWindow = (Overlapped Or Caption Or Styles.ControlBox Or ThickFrame Or MinimizeBox Or MaximizeBox) - TiledWindow = OverlappedWindow - - PopUp = &H80000000L - PopUpWindow = (PopUp Or Border Or Styles.ControlBox) - End Enum - Public Enum ExStyles As Long - AllowDrop = &H10L - TopMost = &H8L - Layered = &H80000 - Composited = &H2000000L - NoActivate = &H8000000L - NoInheritLayout = &H100000L - NoParentNotify = &H4L - ToolWindow = &H80L - MDIChild = &H40L - Transparent = &H20L - WindowEdge = &H100L - ClientEdge = &H200L - HelpButton = &H400L - RightToLeft = &H400000L - DialogModalFrame = &H1L - End Enum - - Public Enum CMD - Close = 0 - Destroy = 1 - BringToFront = 2 - SendToBack = 3 - Show = 4 - Hide = 5 - Flash = 6 - Focus = 7 - Clear = 8 - Undo = 9 - Copy = 10 - Paste = 11 - Cut = 12 - End Enum - - Private hwnd As IntPtr - Sub New() - Me.hwnd = IntPtr.Zero - End Sub - Sub New(ByVal hWnd As IntPtr) - Me.hwnd = hWnd - End Sub - Sub New(ByVal c As Control) - Me.hwnd = c.Handle - End Sub - Sub New(ByVal WindowName As String, Optional ByVal ClassName As String = Nothing) - Me.hwnd = FindWindow(ClassName, WindowName) - End Sub - Sub New(ByVal p As Process, Optional ByVal UseMainHandle As Boolean = True) - If UseMainHandle Then Me.hwnd = p.MainWindowHandle Else Me.hwnd = p.Handle - End Sub - - Public Property Handle() As IntPtr - Get - Return Me.hwnd - End Get - Set(ByVal value As IntPtr) - Me.hwnd = value - End Set - End Property - Public Property HandleRef() As Runtime.InteropServices.HandleRef - Get - Return New Runtime.InteropServices.HandleRef(Me, Me.hwnd) - End Get - Set(ByVal value As Runtime.InteropServices.HandleRef) - Me.hwnd = value.Handle - End Set - End Property - - Public Function GetDC() As API.DC - Return New API.DC(Me.hwnd, GetDC(Me.hwnd)) - End Function - Public Function GetWindowDC() As API.DC - Return New API.DC(Me.hwnd, GetWindowDC(Me.hwnd)) - End Function - - Public Property Text() As String - Get - Return API.WM.TEXT(Me.hwnd) - End Get - Set(ByVal value As String) - API.WM.TEXT(Me.hwnd) = value - End Set - End Property - Public Property Name() As String - Get - Dim length As Integer = GetWindowTextLength(Me.hwnd) + 1 - Dim s As New System.Text.StringBuilder(length) - GetWindowText(Me.hwnd, s, s.Capacity) - Return s.ToString - End Get - Set(ByVal value As String) - SetWindowText(Me.hwnd, value) - End Set - End Property - Public Property Bounds() As Rectangle - Get - Dim r As API.WRECT - If (GetWindowRect(Me.HandleRef, r)) Then - Return r.Value - Else - Return Nothing - End If - End Get - Set(ByVal value As Rectangle) - SetWindowPos(Me.hwnd, -2, value.X, value.Y, value.Width, value.Height, SWP.IgnoreZOrder) - End Set - End Property - Public ReadOnly Property ClientSize() As Size - Get - Dim r As API.WRECT - GetClientRect(Me.HandleRef, r) - Return r.Value.Size - End Get - End Property - Public ReadOnly Property ClientRectangle() As Rectangle - Get - Return New Rectangle(ClientToScreen(New Point(0, 0)), ClientSize) - End Get - End Property - Public Property Location() As Point - Get - Return Bounds.Location - End Get - Set(ByVal value As Point) - SetWindowPos(Me.hwnd, -2, value.X, value.Y, 0, 0, SWP.IgnoreResize Or SWP.IgnoreZOrder) - End Set - End Property - Public Property Size() As Size - Get - Return Bounds.Size - End Get - Set(ByVal value As Size) - SetWindowPos(Me.hwnd, -2, 0, 0, value.Width, value.Height, SWP.IgnoreMove Or SWP.IgnoreZOrder) - End Set - End Property - Public Property WindowState() As State - Get - Return New WindowPlacement(Me.hwnd).showCmd - End Get - Set(ByVal value As State) - Dim d As New WindowPlacement(Me.hwnd) - d.showCmd = value - d.Send(Me.hwnd) - End Set - End Property - Public ReadOnly Property Exists() - Get - Return IsWindow(Me.hwnd) - End Get - End Property - Public Property Visible() As Boolean - Get - Return IsWindowVisible(Me.hwnd) - End Get - Set(ByVal value As Boolean) - If value = False Then Command(CMD.Hide) - If value = True Then Command(CMD.Show) - End Set - End Property - Public Property Font() As Font - Get - Return API.WM.FONT(Me.hwnd) - End Get - Set(ByVal value As Font) - API.WM.FONT(Me.hwnd) = value - End Set - End Property - Public Property Enabled() As Boolean - Get - Return Me.Style(Styles.Disabled) = False - End Get - Set(ByVal value As Boolean) - Me.Style(Styles.Disabled) = value = False - End Set - End Property - Public Property Focused() As Boolean - Get - Return GetFocus = Me.hwnd - End Get - Set(ByVal value As Boolean) - If value Then - API.WM.SETFOCUS(Me.hwnd) - Else - API.WM.KILLFOCUS(Me.hwnd) - End If - End Set - End Property - Public Property Captured() As Boolean - Get - Return GetCapture() = Me.hwnd - End Get - Set(ByVal value As Boolean) - If value Then - SetCapture(Me.hwnd) - ElseIf Me.Captured Then - ReleaseCapture() - End If - End Set - End Property - - Public Function ScreenToClient(ByVal p As Point) As Point - ScreenToClient(Me.hwnd, p) - Return p - End Function - Public Function ScreenToClient(ByVal r As Rectangle) As Rectangle - Return New Rectangle(ScreenToClient(r.Location), r.Size) - End Function - Public Function ClientToScreen(ByVal p As Point) As Point - ClientToScreen(Me.hwnd, p) - Return p - End Function - Public Function ClientToScreen(ByVal r As Rectangle) As Rectangle - Return New Rectangle(ClientToScreen(r.Location), r.Size) - End Function - - Public Sub Animate(ByVal flags As AnimateFlags, Optional ByVal Time As Integer = 1000) - AnimateWindow(Me.hwnd, Time, flags) - End Sub - Public Sub Invalidate() - Redraw(RedrawFlags.Invalidate Or RedrawFlags.UpdateNow) - End Sub - Public Sub Redraw(ByVal flags As RedrawFlags) - RedrawWindow(Me.hwnd, Nothing, Nothing, flags) - End Sub - Public Function CreateGraphics() As Graphics - Return Graphics.FromHwnd(Me.hwnd) - End Function - - Public Sub CaptureClient(ByVal g As Graphics, ByVal srcrect As Rectangle, Optional ByVal DestX As Integer = 0, Optional ByVal DestY As Integer = 0) - Dim gdc As New API.DC(g) - Dim hdc As API.DC = Me.GetDC - hdc.CopyTo(gdc) - gdc.Dispose() - hdc.Dispose() - End Sub - Public Function CaptureClient() As Image - Return CaptureClient(New Rectangle(New Point(), Me.ClientSize)) - End Function - Public Function CaptureClient(ByVal rect As Rectangle) As Image - If rect.Width < 1 Or rect.Height < 1 Then Return Nothing - Dim img As New Bitmap(rect.Width, rect.Height) - Dim g As Graphics = Graphics.FromImage(img) - CaptureClient(g, rect) - g.Dispose() - Return img - End Function - Public Sub CaptureWindow(ByVal g As Graphics) - 'Dim Hdc As IntPtr = g.GetHdc() - 'PrintWindow(Me.hwnd, Hdc, 0) - 'g.ReleaseHdc(Hdc) - - Dim gdc As New API.DC(g) - Dim hdc As API.DC = Me.GetWindowDC - hdc.CopyTo(gdc) - gdc.Dispose() - hdc.Dispose() - End Sub - Public Function CaptureWindow() As Image - Dim s As Size = Me.Size - If s.Width < 1 Or s.Height < 1 Then Return Nothing - Dim img As New Bitmap(s.Width, s.Height) - Dim g As Graphics = Graphics.FromImage(img) - CaptureWindow(g) - g.Dispose() - Return img - End Function - - Public Property Opacity(Optional ByVal SetLayered As Boolean = True) As Byte - Get - If SetLayered Then Me.ExStyle(ExStyles.Layered) = True - Dim lwa As New LayeredWindowAttributes(Me.hwnd) - If lwa.UseAlpha = False Then Return 255 - Return lwa.alpha - End Get - Set(ByVal value As Byte) - If SetLayered Then Me.ExStyle(ExStyles.Layered) = True - Dim lwa As New LayeredWindowAttributes(Me.hwnd) - If value = 255 Then - lwa.UseAlpha = False - Else - lwa.UseAlpha = True - lwa.alpha = value - End If - lwa.Apply() - End Set - End Property - Public Property TransparencyKey(Optional ByVal SetLayered As Boolean = True) As Color - Get - If SetLayered Then Me.ExStyle(ExStyles.Layered) = True - Return ColorTranslator.FromOle(New LayeredWindowAttributes(Me.hwnd).crKey) - End Get - Set(ByVal value As Color) - If SetLayered Then Me.ExStyle(ExStyles.Layered) = True - Dim lwa As New LayeredWindowAttributes(Me.hwnd) - If IsNothing(value) Then - lwa.UseColorKey = False - Else - lwa.UseColorKey = True - lwa.crKey = value.ToArgb - End If - lwa.Apply() - End Set - End Property - - Public Property ExStyle(ByVal ex As ExStyles) As Boolean - Get - Return (Me.ExStyle And ex) = ex - End Get - Set(ByVal value As Boolean) - Dim exs As ExStyles = Me.ExStyle - If (exs And ex) = ex <> value Then - If value = True Then exs += ex Else exs -= ex - Me.ExStyle = exs - End If - End Set - End Property - Public Property ExStyle() As ExStyles - Get - Return GetWindowLong(Me.HandleRef, GWL.EXSTYLE) - End Get - Set(ByVal value As ExStyles) - SetWindowLong(Me.hwnd, GWL.EXSTYLE, value) - End Set - End Property - Public Property Style(ByVal st As Styles) As Boolean - Get - Return (Me.Style And st) = st - End Get - Set(ByVal value As Boolean) - Dim sty As Styles = Me.Style - If (sty And st) = st <> value Then - If value = True Then sty += st Else sty -= st - Me.Style = sty - End If - End Set - End Property - - Public Property Style() As Styles - Get - Return GetWindowLong(Me.HandleRef, GWL.STYLE) - End Get - Set(ByVal value As Styles) - Try - SetWindowLong(Me.hwnd, GWL.STYLE, value) - Catch ex As Exception - End Try - End Set - End Property - - Public Property AllowDrop() As Boolean - Get - Return ExStyle(ExStyles.AllowDrop) - End Get - Set(ByVal value As Boolean) - ExStyle(ExStyles.AllowDrop) = value - End Set - End Property - Public Property TopMost() As Boolean - Get - Return ExStyle(ExStyles.TopMost) - End Get - Set(ByVal value As Boolean) - ExStyle(ExStyles.TopMost) = value - End Set - End Property - Public Property TabStop() As Boolean - Get - Return Style(Styles.TabStop) - End Get - Set(ByVal value As Boolean) - Style(Styles.TabStop) = value - End Set - End Property - - Public Function SendKey(ByVal Key As Keys, ByVal EventType As KeyEvent) - Dim k As New KeyCommand(Key, EventType) - k.RepeatCount = 0 - Return SendKey(k) - End Function - Public Function SendPressedKey(ByVal key As Keys, Optional ByVal SendCount As Integer = 1) - Dim success As Boolean = True - Dim k_down As New KeyCommand(key, KeyEvent.Down) - Dim k_up As New KeyCommand(key, KeyEvent.Up) - For i As Integer = 1 To SendCount - If SendKey(k_down) = False Then success = False - If SendKey(k_up) = False Then success = False - Next - Return success - End Function - Public Function SendKey(ByVal k As KeyCommand) - Return k.Post(Me.hwnd) - End Function - Public Function SendChar(ByVal character As Char, Optional ByVal SendCount As Integer = 1) As Boolean - Dim k As New KeyCommand(character) - k.RepeatCount = SendCount - 1 - Return SendKey(k) - End Function - Public Function SendChars(ByVal text() As Char) - Dim success As Boolean = True - For Each character As Char In text - If SendChar(character) = False Then success = False - Next - Return success - End Function - Public Function SendMouse(ByVal Location As Point, Optional ByVal Buttons As MouseButtons = MouseButtons.None, Optional ByVal EventType As MouseEvent = MouseEvent.Move) - Return SendMouse(New MouseCommand(Location, Buttons, EventType)) - End Function - Public Function SendMouse(ByVal X As Integer, ByVal Y As Integer, Optional ByVal Buttons As MouseButtons = MouseButtons.None, Optional ByVal EventType As MouseEvent = MouseEvent.Move) - Return SendMouse(New MouseCommand(X, Y, Buttons, EventType)) - End Function - Public Function SendMouse(ByVal m As MouseCommand) As Boolean - Return m.Post(Me.hwnd) - End Function - - Public Sub Command(ByVal command As CMD) - Select Case command - Case CMD.Close - API.WM.CLOSE(Me.hwnd) - Case CMD.Destroy - API.WM.DESTROY(Me.hwnd) - Case CMD.BringToFront - SetWindowPos(Me.hwnd, HWNDafter.BOTTOM, 0, 0, 0, 0, SWP.IgnoreResize Or SWP.IgnoreMove) - Case CMD.SendToBack - SetWindowPos(Me.hwnd, HWNDafter.BOTTOM, 0, 0, 0, 0, SWP.IgnoreResize Or SWP.IgnoreMove Or SWP.DoNotActivate) - Case CMD.Show - Dim d As New WindowPlacement(Me.hwnd) - d.showCmd = 5 - d.Send(Me.hwnd) - Case CMD.Flash - FlashWindow(Me.hwnd, True) - Case CMD.Hide - Dim d As New WindowPlacement(Me.hwnd) - d.showCmd = 0 - d.Send(Me.hwnd) - Case CMD.Focus - Me.Focused = True - Case CMD.Clear - API.WM.CLEAR(Me.hwnd) - Case CMD.Undo - API.WM.UNDO(Me.hwnd) - Case CMD.Copy - API.WM.Copy(Me.hwnd) - Case CMD.Paste - API.WM.PASTE(Me.hwnd) - Case CMD.Cut - API.WM.CUT(Me.hwnd) - End Select - End Sub - - '-------------not sure if these work-------------- - Public ReadOnly Property SystemMenu() As Window - Get - Return New Window(GetSystemMenu(Me.hwnd, False)) - End Get - End Property - Public ReadOnly Property Menu() As Window - Get - Return New Window(GetMenu(Me.hwnd)) - End Get - End Property - Public ReadOnly Property SubMenus(ByVal index As Integer) As Window - Get - Return New Window(GetSubMenu(Me.hwnd, index)) - End Get - End Property - Public ReadOnly Property SubMenus() As Window() - Get - Dim menus As New List(Of IntPtr) - Dim currm As IntPtr = 0 - For i As Integer = 0 To Integer.MaxValue - currm = GetSubMenu(Me.hwnd, i) - If currm = 0 Then - Exit For - Else - menus.Add(currm) - End If - Next - Return All(menus) - End Get - End Property - '------------------------------------------------- - - Public ReadOnly Property Process() As Process - Get - Try - Dim ID As UInteger - GetWindowThreadProcessId(Me.hwnd, ID) - Return Process.GetProcessById(ID) - Catch - Return Nothing - End Try - End Get - End Property - Public ReadOnly Property ClassName(Optional ByVal length As Integer = 64) As String - Get - Dim s As New System.Text.StringBuilder(length) - GetClassName(Me.hwnd, s, s.Capacity) - Return s.ToString() - End Get - End Property - Public Property Parent() As Window - Get - Dim Phwnd As IntPtr = GetParent(Me.hwnd) - If Phwnd = 0 Then Return Nothing - Return New Window(Phwnd) - End Get - Set(ByVal value As Window) - SetParent(Me.hwnd, value.Handle) - End Set - End Property - Public ReadOnly Property Children() As Window() - Get - Return Window.All(New Enumerator().GetChildWindows(Me.hwnd)) - End Get - End Property - Public ReadOnly Property Children(ByVal index As Integer) As Window - Get - Return New Window(New Enumerator().GetChildWindows(Me.hwnd)(index)) - End Get - End Property - Public ReadOnly Property Children(ByVal name As String) As Window - Get - Dim hwnd As IntPtr = FindWindowEx(Me.hwnd, 0, name, vbNullString) - If hwnd = 0 Then - For Each c As Window In Me.Children - If c.Name = name Then Return c - Next - Return Nothing - End If - Return New Window(hwnd) - End Get - End Property - Public ReadOnly Property Children(ByVal Location As Point) As Window - Get - Return New Window(ChildWindowFromPoint(Me.hwnd, New API.WPOINT(Location.X, Location.Y))) - End Get - End Property - Public ReadOnly Property ChildIndex(ByVal name As String) As Integer - Get - Dim w() As Window = Me.Children - For i As Integer = 0 To w.Count - 1 - If w(i).Name = name Then Return i - Next - Return -1 - End Get - End Property - Public ReadOnly Property TopSibling() As Window - Get - Return New Window(GetWindow(Me.hwnd, GW.HWNDFIRST)) - End Get - End Property - Public ReadOnly Property BottomSibling() As Window - Get - Return New Window(GetWindow(Me.hwnd, GW.HWNDLAST)) - End Get - End Property - Public ReadOnly Property PreviousSibling() As Window - Get - Return New Window(GetWindow(Me.hwnd, GW.HWNDPREV)) - End Get - End Property - Public ReadOnly Property NextSibling() As Window - Get - Return New Window(GetWindow(Me.hwnd, GW.HWNDNEXT)) - End Get - End Property - Public Function FindChild(ByVal name As String, Optional ByVal matchcase As Boolean = False) As Window - If matchcase = False Then name = name.ToLower - For Each w As Window In Me.Children - Dim wn As String = w.Name - If matchcase = False Then wn = wn.ToLower - If wn.Contains(name) Then Return w - Next - Return Nothing - End Function - Public Property FocusedWindow() As Window - Get - Me.AttachInput() - FocusedWindow = New Window(GetFocus) - Me.DetachInput() - End Get - Set(ByVal value As Window) - value.Command(CMD.Focus) - End Set - End Property - - Public Function AttachInput(Optional ByVal attach As Boolean = True) As Boolean - Return CBool(API.AttachThreadInput(GetWindowThreadProcessId(Me.hwnd, 0), API.GetCurrentThreadId(), CInt(attach))) - End Function - Public Function DetachInput() As Boolean - Return AttachInput(False) - End Function - - Public Shared Function All(ByVal p() As Process) As Window() - Dim w As New List(Of Window) - For Each proc As Process In p - If proc.MainWindowHandle <> 0 Then w.Add(New Window(proc.MainWindowHandle)) - Next - Return w.ToArray - End Function - Public Shared Function All() As Window() - Return New Window(IntPtr.Zero).Children - End Function - Public Shared Function All(ByVal ParamArray hwnd() As IntPtr) As Window() - Dim w(hwnd.Count - 1) As Window - For i As Integer = 0 To w.Count - 1 - w(i) = New Window(hwnd(i)) - Next - Return w - End Function - Public Shared Function All(ByVal hwnd As List(Of IntPtr)) As Window() - Dim w(hwnd.Count - 1) As Window - For i As Integer = 0 To w.Count - 1 - w(i) = New Window(hwnd(i)) - Next - Return w - End Function - Public Shared Function All(ByVal p As Process) As Window() - Return All(New Enumerator().GetThreadWindows(p.Id)) - End Function - Public Shared Function AllFromDesktop(ByVal desktophwnd As IntPtr) As Window() - Return All(New Enumerator().GetDesktopWindows(desktophwnd)) - End Function - Public Shared Function AllFromDesktop() As Window() - Return AllFromDesktop(Nothing) - End Function - Public Shared Function AllFromProcessList() As Window() - Return All(Process.GetProcesses) - End Function - Public Shared Function FromControl(ByVal c As Control) As Window - Return New Window(c.Handle) - End Function - Public Shared Function FromPoint(ByVal p As Point) As Window - Return New Window(WindowFromPoint(New API.WPOINT(p.X, p.Y))) - End Function - Public Shared Function FromHandle(ByVal hwnd As IntPtr) As Window - Return New Window(hwnd) - End Function - Public Shared Function Find(ByVal name As String, Optional ByVal matchcase As Boolean = False) As Window - Return New Window(IntPtr.Zero).FindChild(name, matchcase) - End Function - Public Shared Function GetActive() As Window - Return New Window(GetForegroundWindow) - End Function - Public Shared Function GetDesktop() As Window - Return New Window(GetDesktopWindow()) - End Function - Public Shared Function GetTop(ByVal parent As Window) As Window - Return New Window(GetTopWindow(parent.hwnd)) - End Function - Public Shared Function GetTop() As Window - Return New Window(GetTopWindow(Nothing)) - End Function - Public Shared Function GetForeground() As Window - Return New Window(GetForegroundWindow()) - End Function - Public Shared Function GetFocused() As Window - Return GetForeground.FocusedWindow - End Function -End Class
\ No newline at end of file |
