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