Windows消息权限

时间:2013-04-08 14:32:06

标签: windows delphi privileges windows-messages

什么是Windows消息权限?

在应用程序1中,我向应用程序2发布了一条消息:

PostMessage(handle, WM_LOCAL, 0, Integer(Lst));

在应用程序2中,消息实现:

var l: TStringList;
begin    
  ShowMessage('got 1');
  l := TStringList(Message.LParam);
  ShowMessage('got 2');
  Memo1.Clear;
  ShowMessage('got 3');

  if Memo1 = nil then
    ShowMessage('nil');

  //HERE : Access violation.
  //Memo1.Text := l.Text;
  //ShowMessage('got 4');

  Memo1.Lines.Add('good!');
  ShowMessage('got 5');

  l.Free;      
  ShowMessage('got 6');

  //Access violation Too..
  Memo1.Repaint;
  ShowMessage('got 7');

为什么会这样?

我既不能重新制作备忘录,也不能访问Text属性。

2 个答案:

答案 0 :(得分:5)

您无法在应用程序之间共享对象。甚至指针也会指向目的地的地址空间 也许WM_COPYDATA符合您复制数据的要求。

答案 1 :(得分:4)

这不是具有特权的消息,而是具有特权的消息。该功能称为User Interface Privilege Isolation(UIPI)。此功能可以阻止较低的完整性级别进程将消息发送到更高完整性级别的进程。

但那不是你的问题。您的问题是每个进程都有一个单独的地址空间。因此,来自一个进程的指针在不同的进程中没有任何意义。这就是您遇到访问冲突的原因。您收到的指针指向不同进程的内存,因此没有意义。

您需要使用进程间通信(IPC)机制。例如,发送WM_COPYDATA消息,或命名管道或套接字等。