织梦CMS - 轻松建站从此开始!

罗索

Windows Mobile 触摸屏(Touch Panel)截获(Touch Panel伪驱动)

落鹤生 发布于 2010-07-02 22:25 点击:次 
Windows Mobile 触摸屏(Touch Panel)截获(Touch Panel伪驱动)的源代码,Csdn不好传文件,所以把代码传上来。
TAG:

Csdn不好传文件,所以把代码传上来

.h头文件

  1. #ifndef __SYS_TOUCH_H__ 
  2. #define __SYS_TOUCH_H__ 
  3.  
  4. #ifdef __cplusplus 
  5. extern "C" { 
  6. #endif 
  7. typedef UINT32 TOUCH_PANEL_SAMPLE_FLAGS, *P_TOUCH_PANEL_SAMPLE_FLAGS; 
  8.  
  9. enum enumTouchPanelSampleFlags 
  10.   TouchSampleValidFlag   = 0x01,//@EMEM The sample is valid. 
  11.   TouchSampleDownFlag    = 0x02,//@EMEM The finger/stylus is down. 
  12.   TouchSampleIsCalibratedFlag  = 0x04,
  13.   //@EMEM The XY data has already been calibrated. 
  14.   TouchSamplePreviousDownFlag  = 0x08,
  15.   //@EMEM The state of the previous valid sample. 
  16.   TouchSampleIgnore    = 0x10,//@EMEM Ignore this sample. 
  17.  
  18.   TouchSampleMouse    = 0x40000000 // reserved 
  19.  
  20.  }; 
  21.  
  22. #define TouchSampleDown(Flags)(Flags&TouchSampleDownFlag) 
  23. #define TouchSamplePreviousDown(Flags)(Flags&TouchSamplePreviousDownFlag) 
  24. #define TouchSampleIsMouse(Flags)(Flags&TouchSampleMouse) 
  25.  
  26. // TouchPanelGetDeviceCaps query capability definitions
  27. // @const ULONG | TPDC_SAMPLERATE_ID |
  28. // Sampling rate device capability.
  29. #define TPDC_SAMPLE_RATE_ID    0 
  30. struct TPDC_SAMPLE_RATE 
  31.   INT  SamplesPerSecondLow; 
  32.   INT  SamplesPerSecondHigh; 
  33.   INT  CurrentSampleRateSetting; // 0 => Low, 1 => High 
  34. };

  35. // @type DDI_TOUCH_PANEL_CALIBRATION_FLAGS | 
  36. // Calibration flags 
  37. // @comm 
  38. // The definition is:<nl> 
  39. // <tab>typedef UINT32 DDI_TOUCH_PANEL_CALIBRATION_FLAGS; 
  40.  
  41. typedef UINT32 DDI_TOUCH_PANEL_CALIBRATION_FLAGS; 
  42.  
  43. // @const ULONG | TPDC_CALIBRATION_POINT_COUNT_ID | 
  44. // Calibration points device capability 
  45. #define TPDC_CALIBRATION_POINT_COUNT_ID 1 
  46.  struct TPDC_CALIBRATION_POINT_COUNT 
  47.  { 
  48.   DDI_TOUCH_PANEL_CALIBRATION_FLAGS flags; 
  49.   INT         cCalibrationPoints; 
  50.  }; 
  51.  
  52. // @const ULONG | TPDC_CALIBRATION_POINT_ID | 
  53. // Calibration mapping data device capability 

  54. #define TPDC_CALIBRATION_POINT_ID   2 
  55. struct TPDC_CALIBRATION_POINT 
  56. INT  PointNumber; 
  57. INT  cDisplayWidth; 
  58. INT  cDisplayHeight; 
  59. INT  CalibrationX; 
  60. INT  CalibrationY; 
  61. }; 
  62.  
  63. // TouchPanelSetMode set capability defintions 
  64. // @const ULONG | TPSM_SAMPLERATE_HIGH_ID | 
  65. // Device mode for the high sampling rate for points. 
  66. // @const ULONG | TPSM_SAMPLERATE_LOW_ID | 
  67. // Device mode for the low sampling rate for points. 
  68.  
  69. #define TPSM_SAMPLERATE_HIGH_ID   0x00 
  70. #define TPSM_SAMPLERATE_LOW_ID   0x01 
  71. #define TPSM_PRIORITY_HIGH_ID   0x02 
  72. #define TPSM_PRIORITY_NORMAL_ID   0x04 
  73.  
  74.  
  75.  // Function Definitions 
  76.  
  77.  
  78. BOOL TouchPanelGetDeviceCaps(INT  iIndex, LPVOID  lpOutput); 
  79.  
  80. typedef BOOL (*PFN_TOUCH_PANEL_GET_DEVICE_CAPS)( 
  81. INT  iIndex, LPVOID  lpOutput); 
  82.  
  83. BOOL TouchPanelSetMode(INT  iIndex,LPVOID lpInput); 
  84.  
  85. typedef BOOL (*PFN_TOUCH_PANEL_SET_MODE)( 
  86. INT  iIndex,LPVOID lpInput); 
  87.  
  88. typedef BOOL (*PFN_TOUCH_PANEL_CALLBACK)(
  89. TOUCH_PANEL_SAMPLE_FLAGS Flags,INT X,INT Y);
  90.  
  91. typedef VOID (*PFN_DISP_DRIVER_MOVE_CURSOR)( 
  92. INT32 X,INT32 Y); 
  93.  
  94. BOOL TouchPanelInitializeCursor( 
  95. PFN_DISP_DRIVER_MOVE_CURSOR); 
  96. typedef BOOL  (*PFN_TOUCH_PANEL_INITIALIZE_CURSOR)( 
  97. PFN_DISP_DRIVER_MOVE_CURSOR); 
  98.  
  99.  
  100. BOOL TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK); 
  101. typedef BOOL  (*PFN_TOUCH_PANEL_ENABLE)(PFN_TOUCH_PANEL_CALLBACK); 
  102.  
  103. VOID TouchPanelDisable(VOID); 
  104. typedef VOID (*PFN_TOUCH_PANEL_DISABLE)(VOID); 
  105.  
  106.  
  107. BOOL TouchPanelReadCalibrationPoint(INT *pUncalibratedX,INT *pUncalibratedY); 
  108. typedef BOOL (*PFN_TOUCH_PANEL_READ_CALIBRATION_POINT)( 
  109. INT *pUncalibratedX,INT *pUncalibratedY); 
  110.  
  111. VOID TouchPanelReadCalibrationAbort(); 
  112. typedef VOID (*PFN_TOUCH_PANEL_READ_CALIBRATION_ABORT)(); 

  113. BOOL TouchPanelSetCalibration( 
  114.   INT32 cCalibrationPoints,  //The number of calibration points 
  115.   INT32 *pScreenXBuffer,  //List of screen X coords displayed 
  116.   INT32 *pScreenYBuffer,  //List of screen Y coords displayed 
  117.   INT32 *pUncalXBuffer,   //List of X coords collected 
  118.   INT32 *pUncalYBuffer   //List of Y coords collected 
  119. ); 
  120. typedef BOOL (*PFN_TOUCH_PANEL_SET_CALIBRATION)( 
  121.   INT32 cCalibrationPoints, 
  122.   INT32 *pScreenXBuffer, 
  123.   INT32 *pScreenYBuffer, 
  124.   INT32 *pUncalXBuffer, 
  125.   INT32 *pUncalYBuffer 
  126.   ); 
  127.  
  128.  
  129. void TouchPanelCalibrateAPoint(INT32   UncalX, 
  130. INT32   UncalY,INT32   *pCalX,INT32   *pCalY); 
  131. typedef void  (*PFN_TOUCH_PANEL_CALIBRATE_A_POINT)( 
  132. INT32 UncalX,INT32 UncalY,INT32 *pCalX,INT32 *pCalY); 

  133. void TouchPanelPowerHandler(BOOL bOff); 
  134. typedef void (*PFN_TOUCH_PANEL_POWER_HANDLER)(BOOL bOff); 
  135. #ifdef __cplusplus 
  136. #endif 
  137. #endif 

cpp文件

 

  1. // GUTouch.cpp : Defines the entry point for the DLL application. 
  2. #include <windows.h> 
  3. #include <commctrl.h> 
  4. #include "sysTouch.h" 
  5.  
  6. #define  TOUCH_DLL L"\\Windows\\Touch.dll" 
  7.  
  8. HINSTANCE g_hInstTouch = NULL; 
  9. PFN_TOUCH_PANEL_GET_DEVICE_CAPS  pfnTouchPanelGetDeviceCaps  = NULL; 
  10. PFN_TOUCH_PANEL_SET_MODE   pfnTouchPanelSetMode  = NULL; 
  11. PFN_TOUCH_PANEL_INITIALIZE_CURSOR pfnTouchPanelInitializeCursor = NULL; 
  12. PFN_TOUCH_PANEL_ENABLE    pfnTouchPanelEnable     = NULL; 
  13. PFN_TOUCH_PANEL_DISABLE    pfnTouchPanelDisable    = NULL;
  14. PFN_TOUCH_PANEL_READ_CALIBRATION_POINT  pfnTouchPanelReadCalibrationPoint=NULL;
  15. PFN_TOUCH_PANEL_READ_CALIBRATION_ABORT  pfnTouchPanelReadCalibrationAbort=NULL;
  16. PFN_TOUCH_PANEL_SET_CALIBRATION   pfnTouchPanelSetCalibration  = NULL;
  17. PFN_TOUCH_PANEL_CALIBRATE_A_POINT  pfnTouchPanelCalibrateAPoint = NULL;
  18. PFN_TOUCH_PANEL_POWER_HANDLER   pfnTouchPanelPowerHandler  = NULL; 
  19.  
  20. PFN_TOUCH_PANEL_CALLBACK pfnOrgTouchPanelCallback = NULL; 
  21.  
  22. HWND g_sipWnd = NULL; 
  23. HWND g_hwWnd = NULL; 
  24. #define  HW_CLASSNAME  L"CeSipEng" 
  25. INT xSaved = 0; 
  26. INT ySaved = 0; 
  27. int  iMinX = 4; 
  28. int  iMinY = 4; 
  29. BOOL hwTouchPanelCallback(TOUCH_PANEL_SAMPLE_FLAGS Flags,INT X,INT Y) 
  30.  if(NULL == g_sipWnd) 
  31.  { 
  32.   g_sipWnd = FindWindow(L"SipWndClass", NULL); 
  33.  } 
  34.   
  35.  g_hwWnd = GetWindow(g_sipWnd, GW_CHILD); 
  36.  if(IsWindowVisible(g_hwWnd)) 
  37.  { 
  38.   TCHAR szClassName[32]; 
  39.   GetClassName(g_hwWnd, szClassName, 32); 
  40.   if(wcsicmp(szClassName, HW_CLASSNAME) ==  0) 
  41.   { 
  42.    // down 
  43.    if(Flags == (TouchSampleDownFlag | TouchSampleIsCalibratedFlag
  44.  | TouchSampleValidFlag)) 
  45.    { 
  46.     SendMessage(g_hwWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(X,Y)); 
  47.    } 
  48.    // mouse 
  49.    else if(Flags == (TouchSampleDownFlag | TouchSamplePreviousDownFlag
  50.  | TouchSampleIsCalibratedFlag | 
  51.     TouchSampleValidFlag) && 
  52.     xSaved - X > iMinX || X - xSaved > iMinX && 
  53.     ySaved - Y > iMinY || Y - ySaved > iMinY) 
  54.    { 
  55.     SendMessage(g_hwWnd, WM_MOUSEMOVE, 0, MAKELPARAM(X,Y)); 
  56.    } 
  57.    // up 
  58.    else if(Flags ==(TouchSampleIsCalibratedFlag | 
  59.     TouchSampleValidFlag | TouchSamplePreviousDownFlag)) 
  60.    { 
  61.     SendMessage(g_hwWnd, WM_LBUTTONUP, 0, MAKELPARAM(X,Y)); 
  62.    } 
  63.    xSaved = X; 
  64.    ySaved = Y; 
  65.    return TRUE; 
  66.   } 
  67.   else 
  68.    return pfnOrgTouchPanelCallback(Flags, X,Y); 
  69.  } 
  70.  return pfnOrgTouchPanelCallback(Flags, X,Y); 
  71. BOOL APIENTRY DllMain( HANDLE hModule, 
  72. DWORD  ul_reason_for_call,LPVOID lpReserved) 
  73.  switch ( ul_reason_for_call ) 
  74.  { 
  75.  case DLL_PROCESS_ATTACH:  
  76.   DisableThreadLibraryCalls((HMODULE) hModule); 
  77.   g_hInstTouch = LoadLibrary(TOUCH_DLL); 
  78.   break
  79.  case DLL_PROCESS_DETACH: 
  80.   if(NULL != g_hInstTouch) 
  81.    FreeLibrary(g_hInstTouch); 
  82.   break
  83.  } 
  84.     return TRUE; 
  85.  
  86. VOID TouchPanelCalibrateAPoint(INT32 UncalX,INT32 UncalY, 
  87. INT32* pCalX,INT32* pCalY) 
  88.  if(g_hInstTouch) 
  89.  { 
  90.   if (NULL == pfnTouchPanelGetDeviceCaps) 
  91.   { 
  92.    pfnTouchPanelCalibrateAPoint =
  93.  (PFN_TOUCH_PANEL_CALIBRATE_A_POINT)GetProcAddress(g_hInstTouch, 
  94. TEXT("TouchPanelCalibrateAPoint")); 
  95.   } 
  96.   pfnTouchPanelCalibrateAPoint(UncalX, UncalY, pCalX, pCalY); 
  97.  } 
  98.  
  99. VOID TouchPanelDisable(VOID
  100.  if(g_hInstTouch) 
  101.  { 
  102.   if (NULL == pfnTouchPanelDisable) 
  103.   { 
  104.    pfnTouchPanelDisable = (PFN_TOUCH_PANEL_DISABLE)GetProcAddress(g_hInstTouch, 
  105.     TEXT("TouchPanelDisable")); 
  106.   } 
  107.   pfnTouchPanelDisable(); 
  108.  } 
  109.  
  110. BOOL TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK    pfnCallback) 
  111.  if(g_hInstTouch) 
  112.  { 
  113.   if (NULL == pfnTouchPanelEnable) 
  114.   { 
  115.    pfnTouchPanelEnable = (PFN_TOUCH_PANEL_ENABLE)GetProcAddress(g_hInstTouch, 
  116.     TEXT("TouchPanelEnable")); 
  117.   } 
  118.   pfnOrgTouchPanelCallback = pfnCallback; 
  119.   return pfnTouchPanelEnable(hwTouchPanelCallback); 
  120.  } 
  121.  return FALSE; 
  122.  
  123. BOOL TouchPanelGetDeviceCaps(INT iIndex,LPVOID  lpOutput) 
  124.  if(g_hInstTouch) 
  125.  { 
  126.   if (NULL == pfnTouchPanelGetDeviceCaps) 
  127.   { 
  128.    pfnTouchPanelGetDeviceCaps =
  129. (PFN_TOUCH_PANEL_GET_DEVICE_CAPS)GetProcAddress(g_hInstTouch,
  130. TEXT("TouchPanelGetDeviceCaps")); 
  131.   } 
  132.   return pfnTouchPanelGetDeviceCaps(iIndex ,lpOutput); 
  133.  } 
  134.  return FALSE; 
  135.  
  136. VOID TouchPanelPowerHandler(BOOL bOff) 
  137. // 什么都不做,否则Suspend回来出问题 
  138. VOID TouchPanelReadCalibrationAbort(void
  139.  if(g_hInstTouch) 
  140.  { 
  141.   if (NULL == pfnTouchPanelReadCalibrationAbort) 
  142.   { 
  143.    pfnTouchPanelReadCalibrationAbort =
  144.  (PFN_TOUCH_PANEL_READ_CALIBRATION_ABORT)GetProcAddress(g_hInstTouch, 
  145.  TEXT("TouchPanelReadCalibrationAbort")); 
  146.   } 
  147.   pfnTouchPanelReadCalibrationAbort(); 
  148.  } 
  149.  
  150. BOOL TouchPanelReadCalibrationPoint(INT* pRawX,INT* pRawY) 
  151.  if(g_hInstTouch) 
  152.  { 
  153.   if (NULL == pfnTouchPanelReadCalibrationPoint) 
  154.   { 
  155.    pfnTouchPanelReadCalibrationPoint =
  156. (PFN_TOUCH_PANEL_READ_CALIBRATION_POINT)GetProcAddress(g_hInstTouch, 
  157. TEXT("TouchPanelReadCalibrationPoint")); 
  158.   } 
  159.   return pfnTouchPanelReadCalibrationPoint(pRawX, pRawY); 
  160.  } 
  161.  return FALSE; 
  162.  
  163. BOOL TouchPanelSetCalibration(INT32 cCalibrationPoints,INT32* pScreenXBuffer, 
  164. INT32* pScreenYBuffer,INT32* pUncalXBuffer,INT32* pUncalYBuffer) 
  165.  if(g_hInstTouch) 
  166.  { 
  167.   if (NULL == pfnTouchPanelSetCalibration) 
  168.   { 
  169.    pfnTouchPanelSetCalibration =
  170.  (PFN_TOUCH_PANEL_SET_CALIBRATION)GetProcAddress(g_hInstTouch, 
  171.  TEXT("TouchPanelSetCalibration")); 
  172.   } 
  173.   return pfnTouchPanelSetCalibration(cCalibrationPoints, 
  174.    pScreenXBuffer, pScreenYBuffer,pUncalXBuffer,pUncalYBuffer); 
  175.  } 
  176.  return FALSE; 
  177.  
  178. BOOL TouchPanelSetMode(INT iIndex,LPVOID lpInput) 
  179.  if(g_hInstTouch) 
  180.  { 
  181.   if (NULL == pfnTouchPanelSetMode) 
  182.   { 
  183.    pfnTouchPanelSetMode = (PFN_TOUCH_PANEL_SET_MODE)GetProcAddress(g_hInstTouch, 
  184.     TEXT("TouchPanelSetMode")); 
  185.   } 
  186.   return pfnTouchPanelSetMode(iIndex, lpInput); 
  187.  } 
  188.  return FALSE; 

 

(jinhaijian)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201007/9771.html]
本文出处:CSDN博客 作者:jinhaijian
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容