www.pudn.com > windowsrunning > modConst.bas
Attribute VB_Name = "modConst" Option Explicit ' ' I have been to great troubles to learn all of the techniques in this program. ' I have spent many, many hours and late nights coding the many functions which I ' have included. As much as I resent it, Planet Source Code requires that I put ' the source code in the zip file. So I have placed it in here for you to view. ' Please use it wisely. And give me credit for all of the hard work that I have ' done. My biggest fear is that somebody will do an almost straight rip of this ' code, and take the credit for themselves. Please do not let this happening. I'm ' placing a lot of trust there. So please, use this program, use this code, and ' give me credit for it. If anybody rips all my routines, then my secret spy's ' (and I have a lot of them, as soon as I hire them) will tell me, and I'll get ' into my private jet (as soon as I buy it) and track you down over the whole ' world and eventually KILL YOU. You get the idea? Thanks. Read on for something ' a little more interesting! ' ' Code is Copyright Jolyon Bloomfield, February 2000 ' Public Enum ReEnumType OnlyNeeded = 0 AlwaysNew = 1 End Enum Public Enum DispEnum Full = 0 End Enum Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByRef lParam() As Long) As Long Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByRef lParam() As Long) As Long Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long 'Private Declare Function ScreenToClientA Lib "user32" Alias "ScreenToClient" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long Private Declare Function ClientToScreenA Lib "user32" Alias "ClientToScreen" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long Private Declare Function ScreenToClientA Lib "user32" Alias "ScreenToClient" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long Public Selecting As Boolean Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Type POINTAPI X As Long Y As Long End Type ' ' The following constants are the Win32 Message constants. ' Public Const WM_DESTROY = &H2 Public Const WM_MOVE = &H3 Public Const WM_SIZE = &H5 Public Const WM_ACTIVATE = &H6 ' WM_Activate Values Public Const WA_INACTIVE = 0 Public Const WA_ACTIVE = 1 Public Const WA_CLICKACTIVE = 2 Public Const WM_SETFOCUS = &H7 Public Const WM_KILLFOCUS = &H8 Public Const WM_ENABLE = &HA Public Const WM_SETREDRAW = &HB Public Const WM_SETTEXT = &HC Public Const WM_GETTEXT = &HD Public Const WM_GETTEXTLENGTH = &HE Public Const WM_CLOSE = &H10 Public Const WM_QUERYENDSESSION = &H11 Public Const WM_QUIT = &H12 Public Const WM_QUERYOPEN = &H13 Public Const WM_ERASEBKGND = &H14 Public Const WM_SYSCOLORCHANGE = &H15 Public Const WM_ENDSESSION = &H16 Public Const WM_SHOWWINDOW = &H18 Public Const WM_DEVMODECHANGE = &H1B Public Const WM_ACTIVATEAPP = &H1C Public Const WM_FONTCHANGE = &H1D Public Const WM_TIMECHANGE = &H1E Public Const WM_CANCELMODE = &H1F Public Const WM_SETCURSOR = &H20 Public Const WM_MOUSEACTIVATE = &H21 Public Const WM_CHILDACTIVATE = &H22 Public Const WM_QUEUESYNC = &H23 Public Const WM_GETMINMAXINFO = &H24 Public Const WM_PAINTICON = &H26 Public Const WM_ICONERASEBKGND = &H27 Public Const WM_NEXTDLGCTL = &H28 Public Const WM_NOTIFY = &H4E Public Const WM_INPUTLANGCHANGEREQUEST = &H50 Public Const WM_INPUTLANGCHANGE = &H51 Public Const WM_TCARD = &H52 Public Const WM_HELP = &H53 Public Const WM_USERCHANGED = &H54 Public Const WM_NOTIFYFORMAT = &H55 Public Const WM_CONTEXTMENU = &H7B Public Const WM_STYLECHANGING = &H7C Public Const WM_STYLECHANGED = &H7D Public Const WM_DISPLAYCHANGE = &H7E Public Const WM_GETICON = &H7F Public Const WM_SETICON = &H80 Public Const WM_NCCREATE = &H81 Public Const WM_NCDESTROY = &H82 Public Const WM_NCCALCSIZE = &H83 Public Const WM_NCHITTEST = &H84 Public Const WM_NCPAINT = &H85 Public Const WM_NCACTIVATE = &H86 Public Const WM_GETDLGCODE = &H87 Public Const WM_NCMOUSEMOVE = &HA0 Public Const WM_NCLBUTTONDOWN = &HA1 Public Const WM_NCLBUTTONUP = &HA2 Public Const WM_NCLBUTTONDBLCLK = &HA3 Public Const WM_NCRBUTTONDOWN = &HA4 Public Const WM_NCRBUTTONUP = &HA5 Public Const WM_NCRBUTTONDBLCLK = &HA6 Public Const WM_NCMBUTTONDOWN = &HA7 Public Const WM_NCMBUTTONUP = &HA8 Public Const WM_NCMBUTTONDBLCLK = &HA9 Public Const WM_KEYFIRST = &H100 Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const WM_CHAR = &H102 Public Const WM_DEADCHAR = &H103 Public Const WM_SYSKEYDOWN = &H104 Public Const WM_SYSKEYUP = &H105 Public Const WM_SYSCHAR = &H106 Public Const WM_SYSDEADCHAR = &H107 Public Const WM_KEYLAST = &H108 Public Const WM_IME_STARTCOMPOSITION = &H10D Public Const WM_IME_ENDCOMPOSITION = &H10E Public Const WM_IME_COMPOSITION = &H10F Public Const WM_IME_KEYLAST = &H10F Public Const WM_INITDIALOG = &H110 Public Const WM_COMMAND = &H111 Public Const WM_SYSCOMMAND = &H112 Public Const WM_TIMER = &H113 Public Const WM_HSCROLL = &H114 Public Const WM_VSCROLL = &H115 Public Const WM_INITMENU = &H116 Public Const WM_INITMENUPOPUP = &H117 Public Const WM_MENUSELECT = &H11F Public Const WM_MENUCHAR = &H120 Public Const WM_ENTERIDLE = &H121 Public Const WM_CTLCOLORMSGBOX = &H132 Public Const WM_CTLCOLOREDIT = &H133 Public Const WM_CTLCOLORLISTBOX = &H134 Public Const WM_CTLCOLORBTN = &H135 Public Const WM_CTLCOLORDLG = &H136 Public Const WM_CTLCOLORSCROLLBAR = &H137 Public Const WM_CTLCOLORSTATIC = &H138 Public Const WM_MOUSEFIRST = &H200 Public Const WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_RBUTTONDBLCLK = &H206 Public Const WM_MBUTTONDOWN = &H207 Public Const WM_MBUTTONUP = &H208 Public Const WM_MBUTTONDBLCLK = &H209 Public Const WM_MOUSEWHEEL = &H20A Public Const WM_MOUSELAST = &H20A Public Const WM_PARENTNOTIFY = &H210 Public Const WM_ENTERMENULOOP = &H211 Public Const WM_EXITMENULOOP = &H212 Public Const WM_NEXTMENU = &H213 Public Const WM_SIZING = &H214 Public Const WM_CAPTURECHANGED = &H215 Public Const WM_MOVING = &H216 Public Const WM_POWERBROADCAST = &H218 Public Const WM_DEVICECHANGE = &H219 Public Const WM_IME_SETCONTEXT = &H281 Public Const WM_IME_NOTIFY = &H282 Public Const WM_IME_CONTROL = &H283 Public Const WM_IME_COMPOSITIONFULL = &H284 Public Const WM_IME_SELECT = &H285 Public Const WM_IME_CHAR = &H286 Public Const WM_IME_KEYDOWN = &H290 Public Const WM_IME_KEYUP = &H291 Public Const WM_MDICREATE = &H220 Public Const WM_MDIDESTROY = &H221 Public Const WM_MDIACTIVATE = &H222 Public Const WM_MDIRESTORE = &H223 Public Const WM_MDINEXT = &H224 Public Const WM_MDIMAXIMIZE = &H225 Public Const WM_MDITILE = &H226 Public Const WM_MDICASCADE = &H227 Public Const WM_MDIICONARRANGE = &H228 Public Const WM_MDIGETACTIVE = &H229 Public Const WM_MDISETMENU = &H230 Public Const WM_ENTERSIZEMOVE = &H231 Public Const WM_EXITSIZEMOVE = &H232 Public Const WM_DROPFILES = &H233 Public Const WM_MDIREFRESHMENU = &H234 Public Const WM_MOUSEHOVER = &H2A1 Public Const WM_MOUSELEAVE = &H2A3 Public Const WM_CUT = &H300 Public Const WM_COPY = &H301 Public Const WM_PASTE = &H302 Public Const WM_CLEAR = &H303 Public Const WM_UNDO = &H304 Public Const WM_RENDERFORMAT = &H305 Public Const WM_RENDERALLFORMATS = &H306 Public Const WM_DESTROYCLIPBOARD = &H307 Public Const WM_DRAWCLIPBOARD = &H308 Public Const WM_PAINTCLIPBOARD = &H309 Public Const WM_VSCROLLCLIPBOARD = &H30A Public Const WM_SIZECLIPBOARD = &H30B Public Const WM_ASKCBFORMATNAME = &H30C Public Const WM_CHANGECBCHAIN = &H30D Public Const WM_HSCROLLCLIPBOARD = &H30E Public Const WM_QUERYNEWPALETTE = &H30F Public Const WM_PALETTEISCHANGING = &H310 Public Const WM_PALETTECHANGED = &H311 Public Const WM_HOTKEY = &H312 Public Const WM_PRINT = &H317 Public Const WM_PRINTCLIENT = &H318 Public Const WM_HANDHELDFIRST = &H358 Public Const WM_HANDHELDLAST = &H35F Public Const WM_AFXFIRST = &H360 Public Const WM_AFXLAST = &H37F Public Const WM_PENWINFIRST = &H380 Public Const WM_PENWINLAST = &H38F Public Const WM_APP = &H8000 Public Const WM_USER = &H400 ' These ones are the window styles that are possible... suprisingly few of them, actually! Public Const WS_OVERLAPPED = &H0 Public Const WS_POPUP = &H80000000 Public Const WS_CHILD = &H40000000 Public Const WS_MINIMIZE = &H20000000 Public Const WS_VISIBLE = &H10000000 Public Const WS_DISABLED = &H8000000 Public Const WS_CLIPSIBLINGS = &H4000000 Public Const WS_CLIPCHILDREN = &H2000000 Public Const WS_MAXIMIZE = &H1000000 Public Const WS_BORDER = &H800000 Public Const WS_DLGFRAME = &H400000 Public Const WS_THICKFRAME = &H40000 Public Const WS_GROUP = &H20000 Public Const WS_TABSTOP = &H10000 Public Const WS_CAPTION = &HC00000 'WS_BORDER or WS_DLGFRAME Public Const WS_SYSMENU = &H80000 Public Const WS_VSCROLL = &H200000 Public Const WS_HSCROLL = &H100000 ' Can only be set during a CreateWindow function, ' and are not detected my GetWindowLond Public Const WS_MINIMIZEBOX = &H20000 Public Const WS_MAXIMIZEBOX = &H10000 ' Common window styles Public Const WS_OVERLAPPEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Public Const WS_POPUPWINDOW = WS_POPUP Or WS_BORDER Or WS_SYSMENU ' Extended Windows styles Public Const WS_EX_DLGMODALFRAME = &H1 Public Const WS_EX_NOPARENTNOTIFY = &H4 Public Const WS_EX_TOPMOST = &H8 Public Const WS_EX_ACCEPTFILES = &H10 Public Const WS_EX_TRANSPARENT = &H20 Public Const WS_EX_MDICHILD = &H40 Public Const WS_EX_TOOLWINDOW = &H80 Public Const WS_EX_WINDOWEDGE = &H100 Public Const WS_EX_CLIENTEDGE = &H200 Public Const WS_EX_CONTEXTHELP = &H400 Public Const WS_EX_RIGHT = &H1000 Public Const WS_EX_LEFT = &H0 Public Const WS_EX_RTLREADING = &H2000 Public Const WS_EX_LTRREADING = &H0 Public Const WS_EX_LEFTSCROLLBAR = &H4000 Public Const WS_EX_RIGHTSCROLLBAR = &H0 Public Const WS_EX_CONTROLPARENT = &H10000 Public Const WS_EX_STATICEDGE = &H20000 Public Const WS_EX_APPWINDOW = &H40000 ' Common Windows extended styles Public Const WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE Or WS_EX_CLIENTEDGE Public Const WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE Or WS_EX_TOOLWINDOW Or WS_EX_TOPMOST ' ' Edit box messages ' Public Const EM_GETSEL = &HB0 Public Const EM_SETSEL = &HB1 Public Const EM_GETRECT = &HB2 Public Const EM_SETRECT = &HB3 Public Const EM_SETRECTNP = &HB4 Public Const EM_SCROLL = &HB5 Public Const EM_LINESCROLL = &HB6 Public Const EM_SCROLLCARET = &HB7 Public Const EM_GETMODIFY = &HB8 Public Const EM_SETMODIFY = &HB9 Public Const EM_GETLINECOUNT = &HBA Public Const EM_LINEINDEX = &HBB Public Const EM_SETHANDLE = &HBC Public Const EM_GETHANDLE = &HBD Public Const EM_GETTHUMB = &HBE Public Const EM_LINELENGTH = &HC1 Public Const EM_REPLACESEL = &HC2 Public Const EM_GETLINE = &HC4 Public Const EM_LIMITTEXT = &HC5 Public Const EM_CANUNDO = &HC6 Public Const EM_UNDO = &HC7 Public Const EM_FMTLINES = &HC8 Public Const EM_LINEFROMCHAR = &HC9 Public Const EM_SETTABSTOPS = &HCB Public Const EM_SETPASSWORDCHAR = &HCC Public Const EM_EMPTYUNDOBUFFER = &HCD Public Const EM_GETFIRSTVISIBLELINE = &HCE Public Const EM_SETREADONLY = &HCF Public Const EM_SETWORDBREAKPROC = &HD0 Public Const EM_GETWORDBREAKPROC = &HD1 Public Const EM_GETPASSWORDCHAR = &HD2 Public Const EM_SETMARGINS = &HD3 Public Const EM_GETMARGINS = &HD4 Public Const EM_SETLIMITTEXT = EM_LIMITTEXT '/* ;win40 Name change */ Public Const EM_GETLIMITTEXT = &HD5 Public Const EM_POSFROMCHAR = &HD6 Public Const EM_CHARFROMPOS = &HD7 ' Edit notification messages 'EN_CHANGE 'EN_ERRSPACE 'EN_HSCROLL 'EN_KILLFOCUS 'EN_MAXTEXT 'EN_SETFOCUS 'EN_UPDATE 'EN_VSCROLL ' Windows Messages (already defined above) 'WM_COMMAND 'WM_COPY 'WM_CTLCOLOREDIT 'WM_CUT 'WM_PASTE 'WM_UNDO 'WM_GETTEXT 'WM_SETTEXT ' + otheres, but these are the main ones ' Edit Class Style Bits Public Const ES_MULTILINE = &H4& Public Const ES_LEFT = &H0& Public Const ES_RIGHT = &H2& Public Const ES_CENTER = &H1& Public Const ES_UPPERCASE = &H8& Public Const ES_LOWERCASE = &H10& Public Const ES_OEMCONVERT = &H400& Public Const ES_AUTOHSCROLL = &H80& Public Const ES_AUTOVSCROLL = &H40& Public Const ES_NUMBER = &H2000& Public Const ES_NOHIDESEL = &H100& Public Const ES_READONLY = &H800& Public Const ES_WANTRETURN = &H1000& Public Const ES_PASSWORD = &H20& ' WS_BORDER to have a border on the edit control ' Background Brushes Public Const COLOR_SCROLLBAR = 0 Public Const COLOR_BACKGROUND = 1 Public Const COLOR_ACTIVECAPTION = 2 Public Const COLOR_INACTIVECAPTION = 3 Public Const COLOR_MENU = 4 Public Const COLOR_WINDOW = 5 Public Const COLOR_WINDOWFRAME = 6 Public Const COLOR_MENUTEXT = 7 Public Const COLOR_WINDOWTEXT = 8 Public Const COLOR_CAPTIONTEXT = 9 Public Const COLOR_ACTIVEBORDER = 10 Public Const COLOR_INACTIVEBORDER = 11 Public Const COLOR_APPWORKSPACE = 12 Public Const COLOR_HIGHLIGHT = 13 Public Const COLOR_HIGHLIGHTTEXT = 14 Public Const COLOR_BTNFACE = 15 Public Const COLOR_BTNSHADOW = 16 Public Const COLOR_GRAYTEXT = 17 Public Const COLOR_BTNTEXT = 18 Public Const COLOR_INACTIVECAPTIONTEXT = 19 Public Const COLOR_BTNHIGHLIGHT = 20 ' Standard Cursor IDs Public Enum CursorID IDC_ARROW = 32512& IDC_IBEAM = 32513& IDC_WAIT = 32514& IDC_CROSS = 32515& IDC_UPARROW = 32516& IDC_SIZE = 32640& IDC_ICON = 32641& IDC_SIZENWSE = 32642& IDC_SIZENESW = 32643& IDC_SIZEWE = 32644& IDC_SIZENS = 32645& IDC_SIZEALL = 32646& IDC_NO = 32648& IDC_APPSTARTING = 32650& End Enum Public Sub EnumAllWinds(ByRef WindsEnum() As Long) Dim Temp As Long Dim i As Long ReDim WindsEnum(0 To 0) As Long Dim ChildWindsEnum() As Long ReDim ChildWindsEnum(0 To 0) As Long EnumWindows AddressOf EnumWindowsProc, WindsEnum() For i = 1 To UBound(WindsEnum) EnumChildWindows WindsEnum(i), AddressOf EnumWindowsProc, ChildWindsEnum() Next i For i = 1 To UBound(ChildWindsEnum) ReDim Preserve WindsEnum(0 To UBound(WindsEnum) + 1) As Long WindsEnum(UBound(WindsEnum)) = ChildWindsEnum(i) Next i ' Check to make sure that the desktop window goes into the enumeration. Temp = GetDesktopWindow For i = 1 To UBound(WindsEnum) If WindsEnum(i) = Temp Then GoTo After ' I found it Next i ' If I got to this point, then the desktop is not in the enumeration. Put it in. ReDim Preserve WindsEnum(0 To UBound(WindsEnum) + 1) As Long WindsEnum(UBound(WindsEnum)) = Temp After: End Sub Private Function EnumWindowsProc(ByVal hWnd As Long, ByRef Winds() As Long) As Boolean ReDim Preserve Winds(LBound(Winds) To UBound(Winds) + 1) Winds(UBound(Winds)) = hWnd EnumWindowsProc = True End Function Public Function GetWindowRects(ByVal hWnd As Long) As RECT GetWindowRect hWnd, GetWindowRects End Function Public Function GetClientRects(ByVal hWnd As Long) As RECT GetClientRect hWnd, GetClientRects End Function Public Function ScreenToClient(ByVal hWnd As Long, ByRef Point As POINTAPI) As POINTAPI ScreenToClientA hWnd, Point ScreenToClient = Point End Function Public Function ClientToScreen(ByVal hWnd As Long, ByRef Point As POINTAPI) As POINTAPI ClientToScreenA hWnd, Point ClientToScreen = Point End Function Public Function RemLoBytes(ByVal LongInt As Long) As Long RemLoBytes = LongInt And &HFFFF0000 End Function Public Function GetLoBytes(ByVal LongInt As Long) As Long GetLoBytes = (LongInt And 65535) End Function Public Function LoWord(ByVal LongInt As Long) As Integer CopyMemory LoWord, LongInt, 2 End Function Public Function HiWord(ByVal LongInt As Long) As Integer CopyMemory HiWord, ByVal (VarPtr(LongInt) + 1), 2 End Function Public Function FixApi(ByVal APIString As String) As String If InStr(APIString, Chr(0)) <> 0 Then FixApi = Left$(APIString, InStr(APIString, Chr(0)) - 1) Else FixApi = APIString End Function