欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Windows Mobile 消息钩子

程序员文章站 2022-03-23 11:53:13
Windows Mobile 触摸屏(Touch Panel)消息截获(pwinuser.h) ,在pwinuser.h的头文件里,有hook的API。 一、实现代码 [cpp...

Windows Mobile 触摸屏(Touch Panel)消息截获(pwinuser.h) ,在pwinuser.h的头文件里,有hook的API。

一、实现代码
[cpp]
<span style="font-size:14px;">#ifndef _PRIV_WINUSER_ 
#define _PRIV_WINUSER_ 
 
#ifdef __cplusplus 
extern "C"  { 
#endif 
 
#include <keybd.h> 
 
// Non-Standard CE internal messages. 
#define WM_QM_ACTIVATE        0x60 
#define WM_HOOK_DO_CALLBACK    0x61 
#define WM_SYSCOPYDATA        0x62 
 
 
// wparam values for WM_SYSCOPYDATA 
#define WMSCD_CHAR_RANKED_ALTS    0x01 
#define WMSCD_DIALOGSCROLLBAR    0x02  
 
  
 
/*
 * Extended Window Styles
 */ 
#if(WINVER >= 0x0400) 
 
#endif /* WINVER >= 0x0400 */ 
 
// Marker for end of accelerator tables. 
#define FLASTKEY  0x80 
 
// SetWindowPos internal flags 
#define SWP_SYSTEMCAPTURE            0x80000000 
#define SWP_FINDNEWFOREGROUND        0x40000000 
#define SWP_MAXMIN                    0x20000000 
 
 
// Internal values for hwnd for use in broadcasting messages 
// Must be odd numbered. 
#define HWND_TOPLEVELVISIBLEORPRE30        ((HWND)0xfffd)    // top level windows that are visible on screen or ver < 3.0 
#define HWND_TOPLEVELCHILD                ((HWND)0xfffb)    // top level windows with the WS_CHILD bit set 
 
/*
 * Predefined Clipboard Formats
 */ 
#define CF_METAFILEPICT     3 
#define CF_ENHMETAFILE      14 
#define CF_HDROP            15 
#define IMAGE_ENHMETAFILE   3 
 
void WINAPI SystemIdleTimerReset( void ); 
 
HWND WINAPI SetKeyboardTarget( HWND hWnd ); 
HWND WINAPI GetKeyboardTarget( VOID ); 
KEY_STATE_FLAGS WINAPI GetAsyncShiftFlags(UINT VKey); 
WINUSERAPI void WINAPI AccessibilitySoundSentryEvent(void); 
BOOL WINAPI ImmEnableIME(DWORD); 
HKL WINAPI ImmGetKeyboardLayout(DWORD dwThreadId); 
 
/*
 * ImmAssociateValueWithGwesMessageQueue flags
 *
 * These is not hard & fast rule for the #s given below - just
 * that they are ordered in pairs of get/set operations
 */ 
#define IMM_GETTHREADHKL                        1 
#define IMM_SETTHREADHKL                        2 
#define IMM_GETTHREADPREVHKL                    3 
#define IMM_SETTHREADPREVHKL                    4 
 
#define IMM_SETPROCESSHKL                        6 
 
#define IMM_SET_THREAD_IME_DEFAULT_HWND              8 
#define IMM_GET_LAYMGR_STATUS                                    9 
 
  
 
void AudioUpdateFromRegistry(void); 
 
/* Values for NotifyWinUserSystem */ 
#define NWUS_DOUBLE_TAP_CHANGED    1 
#define NWUS_KEYBD_REPEAT_CHANGED 2 
#define NWUS_MAX_IDLE_TIME_CHANGED 3 
 
#define SPI_SETNOSEHFORVALIDATION    250 
 
#define MOD_KEYUP_ALWAYS 0x2000 
 
typedef struct tagPLATFORMVERSION { 
    DWORD dwMajor; 
    DWORD dwMinor; 
} PLATFORMVERSION, *PPLATFORMVERSION; 
 
 
#define SPI_PROJECT1    224 
#define SPI_PROJECT2    225 
#define SPI_PROJECT3    226 
#define SPI_PROJECT4    227 
#define SPI_PROJECT5    228 
#define SPI_PROJECT6    229 
#define SPI_PROJECT7    230 
#define SPI_PROJECT8    231 
#define SPI_PROJECT9    232 
#define SPI_PROJECT10    233 
#define SPI_PROJECT11    234 
#define SPI_PROJECT12    235 
#define SPI_PROJECT13    236 
#define SPI_PROJECT14    237 
#define SPI_PROJECT15    238 
#define SPI_PROJECT16    239 
 
#define SPI_GETPLATFORMVERSION        SPI_PROJECT1    
 
#define VK_APP_LAUNCH1    0xC1 
#define VK_APP_LAUNCH2    0xC2 
#define VK_APP_LAUNCH3    0xC3 
#define VK_APP_LAUNCH4    0xC4 
#define VK_APP_LAUNCH5    0xC5 
#define VK_APP_LAUNCH6    0xC6 
#define VK_APP_LAUNCH7    0xC7 
#define VK_APP_LAUNCH8    0xC8 
#define VK_APP_LAUNCH9    0xC9 
#define VK_APP_LAUNCH10    0xCA 
#define VK_APP_LAUNCH11    0xCB 
#define VK_APP_LAUNCH12    0xCC 
#define VK_APP_LAUNCH13    0xCD 
#define VK_APP_LAUNCH14    0xCE 
#define VK_APP_LAUNCH15    0xCF 
 
  
 
 
void WINAPI NotifyWinUserSystem( UINT    uEvent ); 
 
BOOL WINAPI RegisterTaskBar (HWND hwndTaskbar); 
BOOL WINAPI RegisterTaskBarEx (HWND hwndTaskbar, BOOL bTaskBarOnTop); 
BOOL WINAPI RegisterDesktop (HWND hwndDesktop); 
 
WINUSERAPI BOOL WINAPI RectangleAnimation ( HWND hWnd, LPCRECT prc, BOOL fMaximize ) ; 
void WINAPI ShellModalEnd( void ); 
 
//#define ExitWindows(dwReserved, Code) ExitWindowsEx(EWX_LOGOFF, 0xFFFFFFFF) 
//WINUSERAPI BOOL WINAPI ExitWindowsEx( UINT uFlags,DWORD dwReserved); 
void GwesPowerOffSystem (void); 
BOOL GwesPowerDown (void); 
void GwesPowerUp (BOOL); 
 
void WINAPI BatteryGetLifeTimeInfo ( LPSYSTEMTIME pstLastChange, DWORD * pcmsCpuUsage, DWORD * pcmsPreviousCpuUsage ); 
LONG WINAPI BatteryDrvrGetLevels ( void ); 
BOOL WINAPI BatteryDrvrSupportsChangeNotification ( void ); 
void WINAPI BatteryNotifyOfTimeChange ( BOOL fForward, FILETIME * pftDelta ); 
 
// A system class built in to GWE for use by everyone 
#define CS_SYSTEMCLASS 0x80000000 
 
/* flags for DrawFrameControl */ 
//#define DFC_CAPTION             1 
#define DFC_MENU                2 
//#define DFC_SCROLL              3 
//#define DFC_BUTTON              4 
#define DFC_SPINNER             6 
 
//#define DFCS_CAPTIONCLOSE       0x0000 
//#define DFCS_CAPTIONMIN         0x0001 
//#define DFCS_CAPTIONMAX         0x0002 
//#define DFCS_CAPTIONRESTORE     0x0003 
//#define DFCS_CAPTIONHELP        0x0004 
//#define DFCS_CAPTIONOKBTN      0x0080 
#define DFCS_CAPTIONROUNDOKBTN_WINCE    0x0010 
#define DFCS_CAPTIONROUNDCLOSE_WINCE    0x0020 
#define DFCS_CAPTIONALL_WINCE           0x00F0 
 
#define DFCS_MENUARROW          0x0000 
#define DFCS_MENUCHECK          0x0001 
#define DFCS_MENUBULLET         0x0002 
#define DFCS_MENUARROWRIGHT     0x0004 
 
//#define DFCS_SCROLLUP           0x0000 
//#define DFCS_SCROLLDOWN         0x0001 
//#define DFCS_SCROLLLEFT         0x0002 
//#define DFCS_SCROLLRIGHT        0x0003 
//#define DFCS_SCROLLCOMBOBOX     0x0005 
#define DFCS_SCROLLSIZEGRIP     0x0008 
#define DFCS_SCROLLSIZEGRIPRIGHT 0x0010 
 
//#define DFCS_BUTTONCHECK        0x0000 
#define DFCS_BUTTONRADIOIMAGE   0x0001 
#define DFCS_BUTTONRADIOMASK    0x0002 
//#define DFCS_BUTTONRADIO        0x0004 
//#define DFCS_BUTTON3STATE       0x0008 
//#define DFCS_BUTTONPUSH         0x0010 
 
#define DFCS_SPINNERUP           0x0000 
#define DFCS_SPINNERDOWN         0x0001 
#define DFCS_SPINNERLEFT         0x0002 
#define DFCS_SPINNERRIGHT        0x0003 
#define DFCS_SPINNERBUTTON       0x0010 
#define DFCS_SPINNERNOBORDER     0x0020 
 
//#define DFCS_INACTIVE           0x0100 
//#define DFCS_PUSHED             0x0200 
//#define DFCS_CHECKED            0x0400 
#define DFCS_ADJUSTRECT         0x2000 
#define DFCS_FLAT               0x4000 
#define DFCS_MONO               0x8000 
 
#define MFT_NONOWNERSTRING      0x80000000L 
 
//WINUSERAPI BOOL    WINAPI DrawFrameControl(HDC, LPRECT, UINT, UINT); 
 
// NC messages 
#define WM_NCCREATE                     0x0081 
#define WM_NCDESTROY                    0x0082 
#define WM_NCCALCSIZE                   0x0083 
#define WM_NCHITTEST                    0x0084 
#define WM_NCPAINT                      0x0085 
#define WM_NCACTIVATE                   0x0086 
 
#define WM_NCMOUSEFIRST                 0x00A0 
#define WM_NCMOUSEMOVE                  0x00A0 
#define WM_NCLBUTTONDOWN                0x00A1 
#define WM_NCLBUTTONUP                  0x00A2 
#define WM_NCLBUTTONDBLCLK              0x00A3 
#define WM_NCRBUTTONDOWN                0x00A4 
#define WM_NCRBUTTONUP                  0x00A5 
#define WM_NCRBUTTONDBLCLK              0x00A6 
#define WM_NCMBUTTONDOWN                0x00A7 
#define WM_NCMBUTTONUP                  0x00A8 
#define WM_NCMBUTTONDBLCLK              0x00A9 
 
 
#define WM_NCXBUTTONDOWN                0x00AB 
#define WM_NCXBUTTONUP                  0x00AC 
#define WM_NCXBUTTONDBLCLK              0x00AD 
#define WM_NCMOUSELAST                  0x00AD 
 
#ifdef FAREAST 
/* Class style for IME UI window */ 
#define CS_IME      0x00010000 
#endif // FAREAST 
 
#ifdef _WIN32_WCE_EMULATION 
#ifdef CS_IME 
#undef CS_IME 
#endif 
#define CS_IME      0x00010000 
#endif 
 
/* For internal APIs "exposed" to other internal pieces. */ 
#ifdef __cplusplus 
    #define EXTERN_C    extern "C" 
#else 
    #define EXTERN_C    extern 
#endif /*__cplusplus*/ 
#define INTAPI  EXTERN_C LONG __stdcall 
#define INTAPI_(type) EXTERN_C type __stdcall 
 
BOOL KeybdGetDeviceInfo( INT iIndex, LPVOID  lpOutput ); 
BOOL KeybdInitStates( KEY_STATE KeyState, void  *pKeybdDriverState ); 
 
UINT32 KeybdVKeyToUnicode( 
    UINT32          VKey, 
    KEY_STATE_FLAGS KeyEventFlags, 
    KEY_STATE       KeyState, 
    void            *KeybdDriverState, 
    UINT32          cBufferSize, 
    UINT32          *pcCharacters, 
    KEY_STATE_FLAGS *pShiftStateBuffer, 
    UINT32          *pCharacterBuffer 
    ); 
 
 
// Maximum # of slots available in preload reg key. 
#define MAX_HKL_PRELOAD_COUNT 15 
 
 
#define WH_JOURNALRECORD    0 
#define WH_JOURNALPLAYBACK  1 
#define WH_KEYBOARD_LL      20 
 
 
/*
 * Hook Codes
 */ 
#define HC_ACTION           0 
#define HC_GETNEXT          1 
#define HC_SKIP             2 
#define HC_NOREMOVE         3 
#define HC_NOREM            HC_NOREMOVE 
#define HC_SYSMODALON       4 
#define HC_SYSMODALOFF      5 
 
typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam); 
 
/*
 * Message Structure used in Journaling
 */ 
typedef struct tagEVENTMSG { 
    UINT    message; 
    UINT    paramL; 
    UINT    paramH; 
    DWORD    time; 
    HWND    hwnd; 
} EVENTMSG, *PEVENTMSGMSG, NEAR *NPEVENTMSGMSG, FAR *LPEVENTMSGMSG; 
 
typedef struct tagEVENTMSG *PEVENTMSG, NEAR *NPEVENTMSG, FAR *LPEVENTMSG; 
 
 
HHOOK 
WINAPI 
QASetWindowsJournalHook( 
    int         nFilterType, 
    HOOKPROC    pfnFilterProc, 
    EVENTMSG    *pfnEventMsg 
    ); 
 
 
BOOL 
WINAPI 
QAUnhookWindowsJournalHook( 
    int            nFilterType 
    ); 
 
 
BOOL 
WINAPI 
GetMessageWNoWait( 
    PMSG    pMsg, 
    HWND    hWnd, 
    UINT    wMsgFilterMin, 
    UINT    wMsgFilterMax 
    ); 
 
BOOL 
WINAPI 
TouchCalibrate( 
    void 
    ); 
 
int 
WINAPI 
DisableCaretSystemWide( 
    void 
    ); 
 
 
int 
WINAPI 
EnableCaretSystemWide( 
    void 
    ); 
 
 
BOOL 
WINAPI 
EnableHardwareKeyboard( 
    BOOL fEnable 
    ); 
 
BOOL RegisterSIPanel (HWND hwndSIPanel); 
 
 
void WINAPI SetAssociatedMenu ( 
    HWND hwnd, 
    HMENU hmenu 
    ); 
 
HMENU WINAPI GetAssociatedMenu ( 
    HWND hwnd 
    ); 
 
 
BOOL 
WINAPI 
UnregisterFunc1( 
    UINT    fsModifiers, 
    UINT    vk 
    ); 
 
  
 
  
 
  
 
typedef struct tagKBDLLHOOKSTRUCT { 
    DWORD vkCode;        // virtual key code 
    DWORD scanCode;        // scan code    DWORD flags;       // flags 
    DWORD flags;        // unused 
    DWORD time;            // time stamp for this message 
    DWORD dwExtraInfo;    // extra info from the driver or keybd_event 
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; 
 
HHOOK 
WINAPI 
SetWindowsHookExW( 
    int idHook, 
    HOOKPROC lpfn, 
    HINSTANCE hmod, 
    DWORD dwThreadId); 
#define SetWindowsHookEx  SetWindowsHookExW 
 
 
BOOL 
WINAPI 
UnhookWindowsHookEx( 
    HHOOK hhk); 
 
LRESULT 
WINAPI 
CallNextHookEx( 
    HHOOK hhk, 
    int nCode, 
    WPARAM wParam, 
    LPARAM lParam); 
 
typedef struct tagGetForegroundInfo 
    { 
    HWND    hwndActive; 
    HWND    hwndFocus; 
    HWND    hwndMenu; 
    HWND    hwndKeyboardDest; 
    DWORD    fdwConversion; 
    DWORD    fdwSentence; 
    BOOL    fOpen; 
    DWORD    dwCompStrLen; 
    HKL        KeyboardLayoutHandle; 
    } GET_FOREGROUND_INFO; 
 
BOOL 
WINAPI 
GetForegroundInfo( 
    GET_FOREGROUND_INFO    *pgfi 
    ); 
 
HWND GetForegroundKeyboardTarget( 
    void 
    ); 
 
HKL 
GetForegroundKeyboardLayoutHandle( 
    void 
    ); 
 
 
BOOL 
WINAPI 
ImmGetConversionStatusForeground( 
    DWORD    *pfdwConversion, 
    DWORD    *pfdwSentence 
    ); 
 
BOOL 
ShowStartupWindow( 
    void 
    ); 
 
//    This is taken directly from pbt.h.  Not all values are used or supported. 
 
#ifndef WM_POWERBROADCAST 
#define WM_POWERBROADCAST               0x218 
#endif 
 
#define PBT_APMQUERYSUSPEND             0x0000 
#define PBT_APMQUERYSTANDBY             0x0001 
 
#define PBT_APMQUERYSUSPENDFAILED       0x0002 
#define PBT_APMQUERYSTANDBYFAILED       0x0003 
 
#define PBT_APMSUSPEND                  0x0004 
#define PBT_APMSTANDBY                  0x0005 
 
#define PBT_APMRESUMECRITICAL           0x0006 
#define PBT_APMRESUMESUSPEND            0x0007 
#define PBT_APMRESUMESTANDBY            0x0008 
 
#define PBTF_APMRESUMEFROMFAILURE       0x00000001 
 
#define PBT_APMBATTERYLOW               0x0009 
#define PBT_APMPOWERSTATUSCHANGE        0x000A 
 
#define PBT_APMOEMEVENT                 0x000B 
 
#define PBT_APMUSERIDLE                 0x000C 
#define PBT_APMUSERACTIVE               0x000D 
 
 
// @CESYSGEN IF GWES_WINMGR 
 
// Notifications sent by GWES to the shell 
 
// Codes used in WM_SHELLNOTIFY 
#define SHELLNOTIFY_WINDOWCREATED        0x0006 
#define SHELLNOTIFY_WINDOWDESTROYED      0x0007 
#define SHELLNOTIFY_WINDOWACTIVATED      0x0008 
#define SHELLNOTIFY_REDRAW               0x0009 
#define SHELLNOTIFY_LANGUAGE             0x000A 
#define SHELLNOTIFY_CAPSLOCK             0x000B 
#define SHELLNOTIFY_RESERVED0x000C       0x000C 
#define SHELLNOTIFY_RESERVED0x000D       0x000D 
 
// @CESYSGEN ENDIF 
 
#ifdef __cplusplus 

#endif /*__cplusplus*/ 
 
#endif /* _PRIV_WINUSER_ */</sp


作者:songjinshi