| Hej Frank
 
 Det du skal, er at "hokke" keyboardet.
 Det gøres ved at oprette en såkald "callback" procedure som Windows
 efterfølgende kalder, hver gang der bliver rørt ved keyboardet. Du skal dog
 være opmærksom på, at dette vil gælde for ALLE applikationer der kører...
 ikke kun dit program.
 
 Dette kan du dog tage højde for, ved at tjekke om din applikation er aktiv
 eller ej.
 
 I et modul skal du ligge følgende API med tilhørede callback procedure:
 
 *******************************************************
 Public Declare Function CallNextHookEx Lib "user32" _
 (ByVal hHook As Long, _
 ByVal nCode As Long, _
 ByVal wParam As Long, _
 ByVal lParam As Long) As Long
 
 Public Declare Function UnhookWindowsHookEx Lib "user32" _
 (ByVal hHook As Long) As Long
 
 Public 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
 
 Public Declare Function PostMessage Lib "user32" _
 Alias "PostMessageA" _
 (ByVal hwnd As Long, _
 ByVal wMsg As Long, _
 ByVal wParam As Long, _
 ByVal lParam As Long) As Long
 
 Public Const WH_KEYBOARD = 2
 Public Const KBH_MASK = &H20000000
 Public Const WM_LBUTTONDOWN = &H201
 Public Const WM_LBUTTONUP = &H202
 
 Public hHook As Long
 
 Public Function KeyboardProc(ByVal nCode As Long, _
 ByVal wParam As Long, _
 ByVal lParam As Long) As Long
 If nCode >= 0 Then
 If wParam = Asc("C") Then
 'gør et eller andet
 KeyboardProc = 1
 Exit Function
 End If
 End If
 End If
 KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
 End Function
 
 *******************************************************
 I en form (eller f.eks Sub Main) skal du indsætte følgende:
 
 Private Sub Form_Load()
 hHook = SetWindowsHookEx(WH_KEYBOARD, _
 AddressOf KeyboardProc, _
 0&, _
 App.ThreadID)
 End Sub
 
 Private Sub Form_Unload(Cancel As Integer)
 Call UnhookWindowsHookEx(hHook)
 End Sub
 
 *******************************************************
 HUSK: Når du arbejder med API-kald der "hooker" eller "subclasser" så sørg
 for altid at lukke dit program på "normal" vis... det vil sige ikke noget
 med bruge stop-knappen på VB værktøjslinje... husk også ALTID at "un-hooke"
 igen...
 
 Jeg vedlægger hér mere om callback proceduren... (Det er taget fra MSDN)
 
 KeyboardProc
 The KeyboardProc hook procedure is an application-defined or library-defined
 callback function used with the SetWindowsHookEx function. The system calls
 this function whenever an application calls theGetMessage orPeekMessage
 function and there is a keyboard message (WM_KEYUP orWM_KEYDOWN) to be
 processed.
 
 The HOOKPROC type defines a pointer to this callback function. KeyboardProc
 is a placeholder for the application-defined or library-defined function
 name.
 
 LRESULT CALLBACK KeyboardProc(
 int code,       // hook code
 WPARAM wParam,  // virtual-key code
 LPARAM lParam   // keystroke-message information
 );
 
 Parameters
 code
 Specifies a code the hook procedure uses to determine how to process the
 message. This parameter can be one of the following values: Value Meaning
 HC_ACTION The wParam and lParam parameters contain information about
 a keystroke message.
 HC_NOREMOVE The wParam and lParam parameters contain information
 about a keystroke message, and the keystroke message has not been removed
 from the message queue. (An application called the PeekMessage function,
 specifying the PM_NOREMOVE flag.)
 
 
 If code is less than zero, the hook procedure must pass the message to the
 CallNextHookEx function without further processing and should return the
 value returned by CallNextHookEx.
 
 wParam
 Specifies the virtual-key code of the key that generated the keystroke
 message.
 lParam
 Specifies the repeat count, scan code, extended-key flag, context code,
 previous key-state flag, and transition-state flag. This parameter can be a
 combination of the following values: Value Description
 0-15 Specifies the repeat count. The value is the number of times
 the keystroke is repeated as a result of the user's holding down the key.
 16-23 Specifies the scan code. The value depends on the original
 equipment manufacturer (OEM).
 24 Specifies whether the key is an extended key, such as a function
 key or a key on the numeric keypad. The value is 1 if the key is an extended
 key; otherwise, it is 0.
 25-28 Reserved.
 29 Specifies the context code. The value is 1 if the alt key is
 down; otherwise, it is 0.
 30 Specifies the previous key state. The value is 1 if the key is
 down before the message is sent; it is 0 if the key is up.
 31 Specifies the transition state. The value is 0 if the key is
 being pressed and 1 if it is being released.
 
 
 For more information about the lParam parameter, seeKeystroke Message Flags.
 
 Return Values
 If nCode is less than zero, the hook procedure must return the value
 returned by CallNextHookEx.
 
 If nCode is greater than or equal to zero, and the hook procedure did not
 process the message, it is highly recommended that you call CallNextHookEx
 and return the value it returns; otherwise, other applications that have
 installed WH_KEYBOARD hooks will not receive hook notifications and may
 behave incorrectly as a result. If the hook procedure processed the message,
 it may return a nonzero value to prevent the system from passing the message
 to the rest of the hook chain or the target window procedure.
 
 Remarks
 An application installs the hook procedure by specifying the WH_KEYBOARD
 hook type and the address of the hook procedure in a call to the
 SetWindowsHookEx function.
 
 QuickInfo
 Windows NT: Requires version 3.1 or later.
 Windows: Requires Windows 95 or later.
 Windows CE: Unsupported.
 Header: Declared in winuser.h.
 Import Library: User-defined.
 
 See Also
 Hooks Overview, Hook Functions, CallNextHookEx,GetMessage,PeekMessage,
 SetWindowsHookEx,WM_KEYUP,WM_KEYDOWN
 
 
 
 /Carsten Suurland
 
 
 
 
 
 |