共用方式為


getMouseMovePointsEx 函式 (winuser.h)

擷取最多 64 個先前滑鼠或手寫筆座標的歷程記錄。

語法

int GetMouseMovePointsEx(
  [in]  UINT             cbSize,
  [in]  LPMOUSEMOVEPOINT lppt,
  [out] LPMOUSEMOVEPOINT lpptBuf,
  [in]  int              nBufPoints,
  [in]  DWORD            resolution
);

參數

[in] cbSize

類型: UINT

MOUSEMOVEPOINT 結構的大小,以位元組為單位。

[in] lppt

類型: LPMOUSEMOVEPOINT

MOUSEMOVEPOINT 結構的指標,包含螢幕座標 (的有效滑鼠座標) 。 它也可能包含時間戳。

GetMouseMovePointsEx 函式會搜尋滑鼠座標歷程記錄中的點。 如果函式找到該點,它會傳回之前的最後 nBufPoints ,並包含提供的點。

如果您的應用程式提供時間戳, GetMouseMovePointsEx 函式會使用它來區分在不同時間記錄的兩個相等點。

應用程式應該使用從WM_MOUSEMOVE訊息收到的滑鼠座標 呼叫此函式,並將其轉換成螢幕座標。

[out] lpptBuf

類型: LPMOUSEMOVEPOINT

將接收點之緩衝區的指標。 其大小至少應為 cbSize* nBufPoints

[in] nBufPoints

類型: int

要擷取的點數。

[in] resolution

類型: DWORD

所需的解析度。 此參數可以是下列其中一個值。

意義
GMMP_USE_DISPLAY_POINTS
1
使用顯示解析度擷取點。
GMMP_USE_HIGH_RESOLUTION_POINTS
2
擷取高解析度點。 點的範圍可以從零到 65,535 (0xFFFF) x 和 y 座標。 這是絕對座標指標裝置所提供的解析度,例如繪圖平板電腦。

傳回值

類型: int

如果函式成功,傳回值就是緩衝區中的點數。 否則,函式會傳回 –1。 如需擴充的錯誤資訊,您的應用程式可以呼叫 GetLastError

備註

系統會保留最後 64 個滑鼠座標及其時間戳。 如果您的應用程式提供滑鼠座標給 GetMouseMovePointsEx ,而且座標存在於系統的滑鼠座標歷程記錄中,則函式會從系統的歷程記錄擷取指定的座標數目。 您也可以提供時間戳,以用來區分歷程記錄中的相同點。

GetMouseMovePointsEx 函式會傳回最後分派給呼叫線程的點,也會傳回其他線程。

在下列情況下,GetMouseMovePointsEx 可能會失敗或傳回錯誤的值:

  • 如果在 MOUSEMOVEPOINT 結構中傳遞負座標,則為 。
  • 如果 GetMouseMovePointsEx 擷取具有負值的座標。
如果有多個監視器存在,就可能發生這些情況。 若要更正此問題,請先呼叫 GetSystemMetrics 以取得下列值:
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN和
  • SM_CYVIRTUALSCREEN。
然後,針對從 GetMouseMovePointsEx 傳回的每個點,執行下列轉換:
int nVirtualWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN) ;
int nVirtualHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN) ;
int nVirtualLeft = GetSystemMetrics(SM_XVIRTUALSCREEN) ;
int nVirtualTop = GetSystemMetrics(SM_YVIRTUALSCREEN) ;
int cpt = 0 ;
int mode = GMMP_USE_DISPLAY_POINTS ;

MOUSEMOVEPOINT mp_in ;
MOUSEMOVEPOINT mp_out[64] ;

ZeroMemory(&mp_in, sizeof(mp_in)) ;
mp_in.x = pt.x & 0x0000FFFF ;//Ensure that this number will pass through.
mp_in.y = pt.y & 0x0000FFFF ;
cpt = GetMouseMovePointsEx(&mp_in, &mp_out, 64, mode) ;

for (int i = 0; i < cpt; i++)
{
   switch(mode)
   {
   case GMMP_USE_DISPLAY_POINTS:
      if (mp_out[i].x > 32767)
         mp_out[i].x -= 65536 ;
      if (mp_out[i].y > 32767)
         mp_out[i].y -= 65536 ;
      break ;
   case GMMP_USE_HIGH_RESOLUTION_POINTS:
      mp_out[i].x = ((mp_out[i].x * (nVirtualWidth - 1)) - (nVirtualLeft * 65536)) / nVirtualWidth ;
      mp_out[i].y = ((mp_out[i].y * (nVirtualHeight - 1)) - (nVirtualTop * 65536)) / nVirtualHeight ;
      break ;
   }
} 

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll

另請參閱

概念

MOUSEMOVEPOINT

滑鼠輸入

參考