GetRawInputBuffer 函式 (winuser.h)
執行緩衝讀取呼叫線程訊息佇列中找到的原始輸入訊息數據。
語法
UINT GetRawInputBuffer(
[out, optional] PRAWINPUT pData,
[in, out] PUINT pcbSize,
[in] UINT cbSizeHeader
);
參數
[out, optional] pData
類型: PRAWINPUT
包含原始輸入數據的 RAWINPUT 結構的緩衝區指標。 緩衝區應該對齊指標界限,這是32位架構上的 DWORD ,以及64位架構上的 QWORD 。
如果 為 NULL,第一個原始輸入訊息數據的大小 (最小必要緩衝區) ,以位元組為單位,則會以 *mbSize 傳回。
[in, out] pcbSize
類型: PUINT
所提供 RAWINPUT 緩衝區的大小,以位元組為單位。
[in] cbSizeHeader
類型: UINT
RAWINPUTHEADER 結構的大小,以位元組為單位。
傳回值
類型: UINT
如果 pData 為 NULL 且函式成功,則傳回值為零。 如果 pData 不是 NULL 且函式成功,則傳回值是寫入 pData的 RAWINPUT 結構數目。
如果發生錯誤,傳回值會 (UINT) -1。 針對錯誤碼呼叫 GetLastError 。
備註
當應用程式收到原始輸入時,其訊息佇列會取得 WM_INPUT 訊息,並設定佇列狀態旗標 QS_RAWINPUT 。
使用 GetRawInputBuffer 時,原始輸入數據會在 可變大小的 RAWINPUT 結構陣列中讀取,而對應的 WM_INPUT 訊息會從呼叫線程的訊息佇列中移除。 您可以在讀取所有原始輸入訊息之前,使用無法容納所有訊息數據的緩衝區多次呼叫此方法。
NEXTRAWINPUTBLOCK 宏可讓應用程式周遊 RAWINPUT 結構的數位。
如果所有原始輸入訊息都已成功從消息佇列讀取,則會從呼叫線程的訊息佇列狀態中清除 QS_RAWINPUT 旗標。
注意
WOW64:若要取得原始輸入緩衝區的正確大小,請勿使用 *androidSize,請改用 *androidSize * 8。 若要確保 GetRawInputBuffer 在 WOW64 上正常運作,您必須將 RAWINPUT 結構對齊 8 個字節。 下列程式代碼示範如何對齊 WOW64 的 RAWINPUT 。
[StructLayout(LayoutKind.Explicit)]
internal struct RAWINPUT
{
[FieldOffset(0)]
public RAWINPUTHEADER header;
[FieldOffset(16+8)]
public RAWMOUSE mouse;
[FieldOffset(16+8)]
public RAWKEYBOARD keyboard;
[FieldOffset(16+8)]
public RAWHID hid;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包括 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |
另請參閱
概念
參考