消息函数 RegisterWindowMessage 进程间通知方式

本文介绍如何使用RegisterWindowMessage函数来定义系统中唯一的窗口消息。此函数确保消息在整个系统中的唯一性,适用于两个或多个应用程序间通信。文章还提供了函数的语法、参数、返回值等详细信息。
摘要由CSDN通过智能技术生成

RegisterWindowMessage function

            78 out of 82 rated this helpful - Rate this topic

Defines a new window message that is guaranteed to be unique throughout the system. The message value can be used when sending or posting messages.

Syntax

C++
UINT WINAPI RegisterWindowMessage(
  _In_  LPCTSTR lpString
);

Parameters

lpString [in]

Type: LPCTSTR

The message to be registered.

Return value

Type:

Type: UINT

If the message is successfully registered, the return value is a message identifier in the range 0xC000 through 0xFFFF.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The RegisterWindowMessage function is typically used to register messages for communicating between two cooperating applications.

If two different applications register the same message string, the applications return the same message value. The message remains registered until the session ends.

Only use RegisterWindowMessage when more than one application must process the same message. For sending private messages within a window class, an application can use any integer in the range WM_USER through 0x7FFF. (Messages in this range are private to a window class, not to an application. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use values in this range.)

Examples

For an example, see Finding Text.

Requirements

Minimum supported client

Windows 2000 Professional [desktop apps only]

Minimum supported server

Windows 2000 Server [desktop apps only]

Header

Winuser.h (include Windows.h)

Library

User32.lib

DLL

User32.dll

Unicode and ANSI names

RegisterWindowMessageW (Unicode) and RegisterWindowMessageA (ANSI)

See also

Reference PostMessage SendMessage Conceptual Messages and Message Queues

Send comments about this topic to Microsoft

Build date: 11/28/2012

        Did you find this helpful?           
(1500 characters remaining)

             hafardr@gmail.com        





Enter comment here.3g3x5txgrt

             C# Syntax        

The correct signature is:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern uint RegisterWindowMessage(string lpProcName);

CharSet can be Unicode or Ansi and the above will work regardless of whether the target platform is 32 or 64 bits.

             Return value is not an IntPtr        

             The x86 vs amd64 IntPtr advice above is wrong. (UINT) defined by Win32 is 32bits regardless of platform unlike (unsigned int) defined by the compiler that may vary with the target platform        

             Inverse of RegisterWindowMessage (GetClipboardFormatName)        


If one wants to get the the message string (output) given the message identifier (input) returned by RegisterWindowMessage - i.e. a kind of inverse of RegisterWindowMessage - it is possible to use GetClipboardFormatName :

  http://msdn2.microsoft.com/en-us/library/ms649040.aspx

In fact, doing a DUMPBIN /EXPORTS on user32.dll, it seems that RegisterWindowMessageA/W have the same RVA of RegisterClipboardFormatA/W.

So, basically, it seems that RegisterWindowMessage is just an "alias" for RegisterClipboardFormat...

For more details, read the thread on microsoft.public.vc.mfc newsgroup, with subject "Registered Window Message String", started on 2007, September 7th:

http://groups.google.it/group/microsoft.public.vc.mfc/browse_thread/thread/f83f7c12c80e4ada/460bc4c43a844a37

Giovanni

MSDN says: "The RegisterWindowMessage function defines a new window message
that is guaranteed to be unique throughout the system."
On vista 64 RegisterWindowMessage(theSameString) function will return different values for programs run under localsystem and programs run under any other user.
::PostMessage(HWND_BROADCAST,registeredMessage)  returns TRUE, but GetLastError gives access denied (error 5) when message is posted from an elevated process to a simple one.

Iohanson
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值