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
HWND_BROADCAST
((HWND)0xffff)
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.
NULL
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

GetMessage

Pesan dan Antrean Pesan

PeekMessage

PostQuitMessage

PostThreadMessage

Referensi

RegisterWindowMessage

SendMessageCallback

SendNotifyMessage