我用Delphi在本地建立了一个专用消息队列,但不知道该如何创建一个消息并将它发送到
该队列中,又该如何从该队列中取出消息。请问哪位仁兄能够指导一下,谢谢我是通过调用API建立的,
大概是这个样子:
var
  MyQueue: Variant;
begin
  MyQueue := CreateOleObject('MSMQ.MSMQUEUEINFO');
..
end;

解决方案 »

  1.   

    // Passing message.unit PassString;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure Edit1Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      WM_MY_WINDOW_MESSAGE : Integer;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      WM_MY_WINDOW_MESSAGE := RegisterWindowMessage('MyMessage');end;procedure TForm1.Edit1Change(Sender: TObject);
    Var
      iReceive : Integer;
      hWindow : Hwnd;
    begin
      iReceive := GlobalAddAtom('This is my test!');
      hWindow := FindWindow(0,'Receive String');
      if hWindow = 0  then exit;
      if iReceive > 0 then
      begin
        PostMessage(hWindow ,WM_MY_WINDOW_MESSAGE,iReceive,0);
        //HWND_BROADCAST
      end;
    end;end.
      

  2.   

    // Receiving message
    unit ReceiveString;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      protected
        procedure WndProc(Var Message : Tmessage); override;
      end;var
      Form1: TForm1;
      WM_MY_WINDOW_MESSAGE : Integer;implementation{$R *.DFM}{ TForm1 }procedure TForm1.WndProc(var Message: Tmessage);
    Var
      sBuf : Array [0..255] of char;
    begin
      if (Message.Msg = Cardinal(WM_MY_WINDOW_MESSAGE )) then
      begin
        if (GlobalGetAtomName(Message.wParam,@sBuf[0],255) > 0) then
          begin
            ShowMessage(StrPas(@sbuf[0]));
            GlobalDeleteAtom(Message.Wparam);
          end;
      end;
      inherited;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      WM_MY_WINDOW_MESSAGE := RegisterWindowMessage('MyMessage');
    end;end.