共用方式為


InjectTouchInput 函式 (winuser.h)

模擬觸控輸入。

注意InitializeTouchInjection 必須在 任何 InjectTouchInput呼叫之前。

 

語法

BOOL InjectTouchInput(
  [in] UINT32                   count,
  [in] const POINTER_TOUCH_INFO *contacts
);

參數

[in] count

連絡人中的陣列大小。

Count的最大值是由InitializeTouchInjection函式的maxCount參數所指定。

[in] contacts

表示桌面上所有連絡人 之POINTER_TOUCH_INFO 結構的陣列。 每個連絡人的螢幕座標都必須在桌面的界限內。

傳回值

如果函式成功,則傳回值為非零。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

插入的輸入會傳送至執行插入程式之會話的桌面。

觸控輸入插入有兩種輸入狀態 (互動式和暫留) ,這些輸入狀態是由連絡人中的下列指標旗標組合所表示:

pointerFlags (POINTER_FLAG_*) 狀態
INRANGE |更新 觸控暫留會啟動或移動
INRANGE |INCONTACT |DOWN 觸控連絡人向下鍵
INRANGE |INCONTACT |更新 觸控連絡人移動
INRANGE |UP 觸控連絡人向上並轉換至暫留
UPDATE 觸控暫留結束
UP 觸控結束
 
注意 互動式狀態代表螢幕上的觸控連絡人,且能夠與任何支援觸控的應用程式互動。 暫留狀態代表未與螢幕接觸且無法與應用程式互動的觸控輸入。 觸控插入可以啟動暫留或互動式狀態,但狀態只能透過 INRANGE 轉換 |INCONTACT |暫留至互動式狀態或透過 INRANGE 的 DOWN |暫留狀態的互動式 UP。
 
所有觸控插入序列都會以 UPDATE 或 UP 結尾。

下圖示范以暫留狀態開頭的觸控插入順序、轉換為互動式,並以暫留結束。

觸控插入順序的圖表,顯示狀態從暫留轉換到互動式轉換至暫留。

對於按住手勢,必須傳送多個畫面,以確保不會取消輸入。 若為在 x,y) (點按住,請在 x,y (x,y) 傳送WM_POINTERDOWN,後面接著WM_POINTERUPDATE (x,y) 。

接聽 WM_DISPLAYCHANGE 來處理顯示解析度和方向的變更,以及管理螢幕座標更新。 收到 WM_DISPLAYCHANGE 時,所有作用中的連絡人都會取消。

使用 POINTER_FLAG_UP 或 POINTER_FLAG_UPDATE 設定POINTER_FLAG_CANCELED來取消個別連絡人。 取消觸控插入,而不需POINTER_FLAG_UP或POINTER_FLAG_UPDATE使插入失效。

設定POINTER_FLAG_UP時, POINTER_INFO的 ptPixelLocation 應該與先前具有POINTER_FLAG_UPDATE觸控插入框架的值相同。 否則,插入會因為ERROR_INVALID_PARAMETER而失敗,並取消所有作用中的插入連絡人。 系統會在取消插入時修改 WM_POINTERUP 事件的 ptPixelLocation。

輸入時間戳記可以在 POINTER_INFO的 dwTime 或 PerformanceCount 欄位中指定。 值不能比插入執行緒目前的刻度計數或 QueryPerformanceCounter 值還要新。 一旦以時間戳記插入框架之後,所有後續畫面都必須包含時間戳記,直到畫面中的所有連絡人都進入 UP 狀態為止。 必須提供連絡人陣列中第一個專案的自訂時間戳記值。 忽略第一個專案之後的時間戳記值。 自訂時間戳記值必須在每個插入框架中遞增。

指定 PerformanceCount 欄位時,時間戳記會在實際插入時以 .1 毫秒解析度轉換成目前時間。 如果自訂 PerformanceCount 在先前插入時產生相同的 .1 毫秒視窗,API 會傳回錯誤 (ERROR_NOT_READY) ,且不會插入資料。 雖然插入未立即因錯誤而失效,但下一次成功的插入必須有 PerformanceCount 值,且與先前成功插入相隔至少 0.1 毫秒。 同樣地,如果使用欄位,自訂 dwTime 值必須至少為 1 毫秒。

如果在插入參數中同時指定 dwTime 和 PerformanceCount, InjectTouchInput 就會失敗,並出現錯誤碼 (ERROR_INVALID_PARAMETER) 。 一旦插入應用程式以 dwTime 或 PerformanceCount 參數啟動,則必須正確填入時間戳記欄位。 一旦插入序列啟動,插入就無法將自訂時間戳記欄位從一個欄位切換到另一個欄位。

未指定 dwTime 或 PerformanceCount 值時, InjectTouchInput 會根據 API 呼叫的時間配置時間戳記。 如果呼叫相隔不到 0.1 毫秒,API 可能會傳回錯誤 (ERROR_NOT_READY) 。 錯誤不會立即使輸入失效,但插入應用程式必須再次重試相同的畫面,以確保插入成功。

規格需求

   
最低支援的用戶端 Windows 8 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2012 [僅限傳統型應用程式]
目標平台 Windows
標頭 winuser.h
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-rtcore-ntuser-wmpointer-l1-1-0 (Windows 10 10.0.14393 版)

請參閱

函式