Fungsi InjectTouchInput (winuser.h)

Mensimulasikan input sentuh.

CatatanInitializeTouchInjection harus mendahului panggilan apa pun ke InjectTouchInput.

 

Sintaks

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

Parameter

[in] count

Ukuran array dalam kontak.

Nilai maksimum untuk hitungan ditentukan oleh parameter maxCount dari fungsi InitializeTouchInjection .

[in] contacts

Array struktur POINTER_TOUCH_INFO yang mewakili semua kontak di desktop. Koordinat layar setiap kontak harus berada dalam batas desktop.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Input yang disuntikkan dikirim ke desktop sesi tempat proses injeksi berjalan.

Ada dua status input untuk injeksi input sentuh (interaktif dan hover) yang ditunjukkan oleh kombinasi pointerFlags berikut dalam kontak:

pointerFlags (POINTER_FLAG_*) Status
INRANGE | UPDATE Touch hover dimulai atau bergerak
INRANGE | INCONTACT | TURUN Sentuh kontak ke bawah
INRANGE | INCONTACT | UPDATE Sentuh gerakan kontak
INRANGE | NAIK Sentuh kontak ke atas dan transisi ke hover
UPDATE Ujung hover sentuh
UP Sentuhan berakhir
 
Catatan Status interaktif mewakili kontak sentuh yang ada di layar dan dapat berinteraksi dengan aplikasi berkemampuan sentuhan apa pun. Status hover mewakili input sentuh yang tidak bersentuhan dengan layar dan tidak dapat berinteraksi dengan aplikasi. Injeksi sentuh dapat dimulai dalam keadaan mengambang atau interaktif, tetapi status hanya dapat bertransisi melalui INRANGE | INCONTACT | TURUN untuk mengarahkan kursor ke status interaktif, atau melalui INRANGE | UP untuk status interaktif ke hover.
 
Semua urutan injeksi sentuh berakhir dengan UPDATE atau UP.

Diagram berikut menunjukkan urutan injeksi sentuh yang dimulai dengan status mengarahkan kursor, transisi ke interaktif, dan disimpulkan dengan hover.

Diagram urutan injeksi sentuh yang menunjukkan transisi status dari mengarahkan kursor ke interaktif ke hover.

Untuk gerakan tekan dan tahan, beberapa bingkai harus dikirim untuk memastikan input tidak dibatalkan. Untuk tekan dan tahan pada titik (x,y), kirim WM_POINTERDOWN pada titik (x,y) diikuti dengan pesan WM_POINTERUPDATE pada titik(x,y).

Dengarkan WM_DISPLAYCHANGE untuk menangani perubahan pada resolusi tampilan dan orientasi dan mengelola pembaruan koordinat layar. Semua kontak aktif dibatalkan ketika WM_DISPLAYCHANGE diterima.

Batalkan kontak individual dengan mengatur POINTER_FLAG_CANCELED dengan POINTER_FLAG_UP atau POINTER_FLAG_UPDATE. Membatalkan injeksi sentuh tanpa POINTER_FLAG_UP atau POINTER_FLAG_UPDATE membatalkan injeksi.

Ketika POINTER_FLAG_UP diatur, ptPixelLocation POINTER_INFO harus sama dengan nilai bingkai injeksi sentuh sebelumnya dengan POINTER_FLAG_UPDATE. Jika tidak, injeksi gagal dengan ERROR_INVALID_PARAMETER dan semua kontak injeksi aktif dibatalkan. Sistem memodifikasi ptPixelLocation dari peristiwa WM_POINTERUP karena membatalkan injeksi.

Tanda waktu input dapat ditentukan di bidang dwTime atau PerformanceCount POINTER_INFO. Nilai tidak boleh lebih baru daripada jumlah centang saat ini atau nilai QueryPerformanceCounter dari utas injeksi. Setelah bingkai disuntikkan dengan tanda waktu, semua bingkai berikutnya harus menyertakan tanda waktu sampai semua kontak dalam bingkai masuk ke status UP. Nilai tanda waktu kustom harus disediakan untuk elemen pertama dalam array kontak. Nilai tanda waktu setelah elemen pertama diabaikan. Nilai tanda waktu kustom harus bertahap dalam setiap bingkai injeksi.

Ketika bidang PerformanceCount ditentukan, tanda waktu dikonversi menjadi waktu saat ini dalam resolusi .1 milidetik pada injeksi aktual. Jika PerformanceCount kustom menghasilkan jendela .1 milidetik yang sama dari injeksi sebelumnya, API akan mengembalikan kesalahan (ERROR_NOT_READY) dan tidak akan menyuntikkan data. Meskipun injeksi tidak segera dibatalkan oleh kesalahan, injeksi berhasil berikutnya harus memiliki nilai PerformanceCount yang setidaknya 0,1 milidetik selain dari injeksi yang berhasil sebelumnya. Demikian pula nilai dwTime kustom harus minimal 1 milidetik jika bidang digunakan.

Jika dwTime dan PerformanceCount ditentukan dalam parameter injeksi, InjectTouchInput gagal dengan Kode Kesalahan (ERROR_INVALID_PARAMETER). Setelah aplikasi injeksi dimulai dengan parameter dwTime atau PerformanceCount, bidang tanda waktu harus diisi dengan benar. Injeksi tidak dapat mengalihkan bidang tanda waktu kustom dari satu ke bidang lain setelah urutan injeksi dimulai.

Ketika tidak ada nilai dwTime atau PerformanceCount yang ditentukan, InjectTouchInput mengalokasikan tanda waktu berdasarkan waktu panggilan API. Jika panggilan kurang dari 0,1 milidetik terpisah, API dapat mengembalikan kesalahan (ERROR_NOT_READY). Kesalahan tidak akan segera membatalkan input, tetapi aplikasi injeksi perlu mencoba kembali bingkai yang sama lagi untuk memastikan injeksi berhasil.

Persyaratan

   
Klien minimum yang didukung Windows 8 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2012 [hanya aplikasi desktop]
Target Platform Windows
Header winuser.h
Pustaka User32.lib
DLL User32.dll
Set API ext-ms-win-rtcore-ntuser-wmpointer-l1-1-0 (diperkenalkan dalam Windows 10, versi 10.0.14393)

Lihat juga

Fungsi