| I am creating a global application hook. The callback procedure (WindowProc) is placed in the Module1 module. This call allows you to intercept all windows messages before they are processed, but you cannot change them. If there is a message WM_SETFOCUS or WM_KILLFOCUS the public procedure SETKILLFocus is called. In this procedure the control with the handle from the message is searched and the backcolor is changed if the type of the control is matching with the types that should be processed (It is not very usefull to change the backcolor of Buttons). In a module: -------------------------------------------------------------------------------------------------------------------------------- Option Explicit ' ---------------------------------------------------------------------------------- ' Autohigh sample ' Written by Marcel A. FRITSCH ' Copyright 2002 by Marcel A. FRITSCH ' This software is FREEWARE. You may use it for your own projects but you may not re-sell the original or the source code. ' No warranty express or implied, is given as to the use of this program. Use at your own risk. ' ---------------------------------------------------------------------------------- ' ' USER32 - Functions Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Declare Function CallNextHookEx Lib "user32" _ (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long ' KERNEL32 - Functions Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) ' CONSTANTS Public Const WH_CALLWNDPROC = 4 Public Const WM_SETFOCUS = &H7 Public Const WM_KILLFOCUS = &H8 ' STRUCTS Type MYSTRUCT lParam As Long wParam As Long message As Long hwnd As Long End Type ' REST Public lHook As Long Public Function WindowProc(ByVal Hookid As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim SWINP As MYSTRUCT CopyMemory SWINP, ByVal lParam, Len(SWINP) WindowProc = CallNextHookEx(lHook, Hookid, wParam, ByVal lParam) If SWINP.message = WM_SETFOCUS Or SWINP.message = WM_KILLFOCUS Then Form1.SETKILLFocus SWINP.message, SWINP.hwnd End If End Function program example: _________________________________________________________________________ Private Sub Form_Load() ' Set global application hook lHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf WindowProc, App.hInstance, App.ThreadID) End Sub Public Sub SETKILLFocus(msg As Long, CHwnd As Long) On Local Error Resume Next Dim Ctrl As Control For Each Ctrl In Controls Err.Clear If CHwnd = Ctrl.hwnd Then If Err.Number = 0 Then If msg = WM_SETFOCUS Then If (TypeOf Ctrl Is TextBox) Or _ (TypeOf Ctrl Is ComboBox) Then Ctrl.BackColor = &H80000018 End If Else ' WM_KILLFOCUS If (TypeOf Ctrl Is TextBox) Or _ (TypeOf Ctrl Is ComboBox) Then Ctrl.BackColor = &H80000005 End If End If Exit For End If End If Next ' Ctrl End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ' Give up global application hook UnhookWindowsHookEx lHook End Sub |
Auto highlight |
India web developer web development India | Freelance web development ecommerce web developer | Prayagasoft - web designer India, Ecommerce developer india, Ecommerce design