欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

Windows Mobile 消息钩子

来源: 开发者 投稿于  被查看 34690 次 评论:31

Windows Mobile 消息钩子


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

相关文章

    暂无相关文章
相关频道:

用户评论