Fungsi PostMessageA (winuser.h)
Places (memposting) 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 .
Sintaks
BOOL PostMessageA(
[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.
Nilai | Makna |
---|---|
|
Pesan diposting ke semua jendela tingkat atas dalam sistem, termasuk jendela yang tidak berkepentingan dinonaktifkan atau tidak terlihat, jendela yang tumpang tindih, dan jendela pop-up. Pesan tidak diposting ke jendela anak. |
|
Fungsi ini berperilaku seperti panggilan ke PostThreadMessage dengan parameter dwThreadId yang diatur ke pengidentifikasi utas saat ini. |
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 yang Ditentukan Sistem.
[in] wParam
Jenis: WPARAM
Informasi khusus pesan tambahan.
[in] lParam
Jenis: LPARAM
Informasi khusus pesan tambahan.
Nilai kembali
Jenis: BOOL
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
Ketika pesan diblokir oleh UIPI, kesalahan terakhir, diambil dengan GetLastError, diatur ke 5 (akses ditolak).
Pesan dalam antrean pesan diambil oleh panggilan ke fungsi GetMessage atau PeekMessage .
Aplikasi yang perlu berkomunikasi menggunakan HWND_BROADCAST harus menggunakan fungsi RegisterWindowMessage untuk mendapatkan pesan unik untuk komunikasi antar aplikasi.
Sistem hanya melakukan marshalling untuk pesan sistem (yang berada dalam rentang 0 hingga (WM_USER-1)). Untuk mengirim pesan lain (yang >= 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 WM_QUIT menggunakan PostMessage; gunakan fungsi PostQuitMessage .
Aplikasi aksesibilitas dapat menggunakan PostMessage untuk memposting pesan WM_APPCOMMAND ke shell untuk meluncurkan aplikasi. Fungsionalitas ini tidak dijamin berfungsi untuk jenis aplikasi lain.
Antrean pesan dapat berisi paling banyak 10.000 pesan. Batas ini harus cukup besar. Jika aplikasi Anda melebihi batas, aplikasi harus didesain ulang untuk menghindari penggunaan 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 terpukul.
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.
Catatan
Header winuser.h mendefinisikan PostMessage sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor 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
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winuser.h (termasuk Windows.h) |
Pustaka | User32.lib |
DLL | User32.dll |
Set API | ext-ms-win-ntuser-message-l1-1-0 (diperkenalkan dalam Windows 8) |
Lihat juga
Konseptual
Referensi