Fungsi PostMessageW (winuser.h)
Menempatkan (posting) pesan dalam antrean pesan yang terkait dengan utas yang membuat jendela yang ditentukan dan kembali tanpa menunggu utas memproses pesan.
Untuk memposting pesan dalam antrean pesan yang terkait dengan utas, gunakan fungsi PostThreadMessage.
Sintaksis
BOOL PostMessageW(
[in, optional] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
Parameter
[in, optional] hWnd
Jenis: HWND
Handel ke jendela yang prosedur jendelanya adalah menerima pesan. Nilai berikut memiliki arti khusus.
Dimulai dengan Windows Vista, posting pesan tunduk pada UIPI. Utas proses hanya dapat memposting pesan ke antrean pesan utas dalam proses tingkat integritas yang lebih rendah atau sama dengan.
[in] Msg
Jenis: UINT
Pesan yang akan diposting.
Untuk daftar pesan yang disediakan sistem, lihat pesan System-Defined.
[in] wParam
Jenis: WPARAM
Informasi khusus pesan tambahan.
[in] lParam
Jenis: LPARAM
Informasi khusus pesan tambahan.
Mengembalikan nilai
Jenis: BOOL
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Komentar
Ketika pesan diblokir oleh UIPI, kesalahan terakhir, diambil dengan GetLastError, diatur ke 5 (akses ditolak).
Pesan dalam antrean pesan diambil oleh panggilan ke fungsi
Aplikasi yang perlu berkomunikasi menggunakan
Sistem hanya melakukan marshalling untuk pesan sistem (yang dalam rentang 0 hingga (WM_USER-1)). Untuk mengirim pesan lain (>= WM_USER) ke proses lain, Anda harus melakukan marshalling kustom.
Jika Anda mengirim pesan dalam rentang di bawah ini WM_USER ke fungsi pesan asinkron (PostMessage, SendNotifyMessage, dan SendMessageCallback), parameter pesannya tidak dapat menyertakan pointer. Jika tidak, operasi akan gagal. Fungsi akan kembali sebelum utas penerima memiliki kesempatan untuk memproses pesan dan pengirim akan membebaskan memori sebelum digunakan.
Jangan memposting pesan
Aplikasi aksesibilitas dapat menggunakan PostMessage
Ada batas 10.000 pesan yang diposting per antrean pesan. Batas ini harus cukup besar. Jika aplikasi Anda melebihi batas, aplikasi harus dirancang ulang untuk menghindari konsumsi begitu banyak sumber daya sistem. Untuk menyesuaikan batas ini, ubah kunci registri berikut.
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Windows USERPostMessageLimit
Jika fungsi gagal, panggil GetLastError untuk mendapatkan informasi kesalahan yang diperluas. GetLastError mengembalikan ERROR_NOT_ENOUGH_QUOTA saat batas terpenuhi.
Nilai minimum yang dapat diterima adalah 4000.
Contoh
Contoh berikut menunjukkan cara memposting pesan jendela privat menggunakan fungsi PostMessage. Asumsikan Anda menentukan pesan jendela privat yang disebut WM_COMPLETE:
#define WM_COMPLETE (WM_USER + 0)
Anda dapat memposting pesan ke antrean pesan yang terkait dengan utas yang membuat jendela yang ditentukan seperti yang ditunjukkan di bawah ini:
WaitForSingleObject (pparams->hEvent, INFINITE) ;
lTime = GetCurrentTime () ;
PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);
Untuk contoh selengkapnya, lihat Memulai Tautan Data.
Nota
Header winuser.h mendefinisikan PostMessage sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosedur UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
server minimum yang didukung |
Windows 2000 Server [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
winuser.h (termasuk Windows.h) |
Pustaka |
User32.lib |
DLL |
User32.dll |
set API |
ext-ms-win-ntuser-message-l1-1-0 (diperkenalkan di Windows 8) |
Lihat juga
Konseptual
Pesan
PeekMessage
Referensi