RegisterWindowMessage 该函数如何用呢

RegisterWindowMessage 该函数怎么用呢?
RegisterWindowMessage 该函数的参数怎么定义啊???不可以随便写个字符串吧???

代码摘录:

ControlAtomString:=Format('ControlOfs%.8X%.8X', [GetModuleHandle(nil), GetWindowThreadProcessID(Handle, OwningProcess)]);

RM_GetObjectInstance := RegisterWindowMessage(PChar(ControlAtomString));

SendMessage(Handle, RM_GetObjectInstance, 0, 0));


问:
1。这段字符串怎么来的呢???? 'ControlOfs%.8X%.8X';
2。RegisterWindowMessage //这个函数的参数怎么确定呢?RegisterWindowMessage(PChar('123456'));像这样可以吗??
2。SendMessage发送给窗体,目标窗体会有这个自定义消息的处理函数吗?????



------解决方案--------------------
可以啊,只不过这样就可以区分不同的进程了,不是吗?不至于两个程序互相干扰了
目标程序接收到这个消息后,返回Obj的地址,参看
procedure TWinControl.DefaultHandler(var Message);
有对应的代码,
------解决方案--------------------
UINT RegisterWindowMessage(lpsz)
函数说明:RegisterWindowMessage函数定义一个新

的窗口消息,该消息保证在整个系统范围内是唯一的。

调用SendMessage或PostMessage函数时可以使用该

函数返回的消息值。

参数说明: lpsz
  指向一个以NULL结束的字符串,该字符串指定待登记的消息。
返回值:若成功地登记了消息,返回值是一个消息标识符。该标识符值的范围在0XC000到0XFFFF之间,否则,返回值为0。
注释:RegisterWindowMessage函数通常用于为两个合作应用程序之间的通信登记消息。
  若两个不同的应用程序登记了相同的消息字符串,则这两个应用程序返回相同的消息值。该消息一直维持被登记状态,直到Windows会话结束。当多个应用程序必须处理同一消息时才使用RegisterWindowMessage函数。在一个窗口类范围内发送私有消息时,应用程序可使用范围在WM_USER到0X7FFF之间的任意整数。

1.ControlAtomString:=Format('ControlOfs%.8X%.8X', [GetModuleHandle(nil), GetWindowThreadProcessID(Handle, OwningProcess)]);

ControlOfs%.8X%.8X,是一个Format的表达式,里面的%.8x%.8x好像是8位16进制;
2.参考上文;
3.目标窗体要自定义一个处理RM_GetObjectInstance消息的过程;
------解决方案--------------------
RegisterWindowMessage参数为你的消息名称,比如你定义了一个WM_You,那么就传地这个字符串
'ControlOfs%.8X%.8X',这个是格式化字符串的,具体你可以查一下format的资料
------解决方案--------------------
这个消息的应用,参考
http://topic.csdn.net/u/20110512/18/dff88f50-cb3e-4ee6-9748-e6c50ea3829f.html
------解决方案--------------------
StartPrint := RegisterWindowMessage('WM_PMStartPrint');

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = StartPrint) then
begin
Memo1.Lines.Add(DateTimeToStr(Now) + ' BroadcastSystemMessage received. wParam:' + IntToStr(Msg.wParam) + ' lParam:' + IntToStr(Msg.lParam));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, StartPrint, Handle, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
PostMessage(HWND_BROADCAST, StartPrint, Handle, 123);
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = StartPrint then
Memo1.Lines.Add(DateTimeToStr(Now) + ' Form received. wParam:' + IntToStr(Message.wParam) + ' lParam:' + IntToStr(Message.lParam));
inherited WndProc(Message);
end;

postmessage :接收 applicationEvent
sendmessage: 接收 wndproc