Конференция "WinAPI" » Передать текст с помощью сообщений в другую программу (Delphi) [D7, WinXP]
 
  • Tooreagen (23.09.09 11:15) [0]
    Привет! Делаю лабораторную по программированию, задача передать сообщение из одной программы в другу с помощью пользовательского сообщения. Первая программа передает сообщение:
    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls;

    Const wm_My=wm_User+300;
    type
     TwmMy= packed record
       Msg: Cardinal;
       str:array[0..10] of char;
       WParam,LParam : LongInt;
       end;

    type
     TForm1 = class(TForm)
       Button1: TButton;
       procedure Button1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
     Windowname:hwnd;
     mess:TWMMY;
    begin
     WindowName:=FindWindow(PChar(0),'Destination');
     mess.str:='123?321';
     SendMessage(WindowName,wm_my,mess.WParam,mess.LParam);
    end;

    end.

    Вторая принимает сообщение:

    unit target;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls, ExtCtrls;

    const
    wm_my=wm_user+300;
    type
     TwmMy= packed record
       Msg: Cardinal;
       str:array [0..10] of char;
       WParam,LParam:LongInt;
       end;
     TDestination = class(TForm)
       Label1: TLabel;
       Label2: TLabel;
     private
       procedure wmMy(var msg:TwmMy );message wm_my;
     public
       { Public declarations }
     end;

    var
     Destination: TDestination;

    implementation

    {$R *.dfm}
    procedure TDestination.wmMy(var msg:TwmMy);
    var p:integer;
    begin
    with msg do
    begin
     p:=pos('?',str);
     Label2.Caption:=IntToStr(p);
    end;
    end;
    end.

    Здесь я нахожу позицию символа  ? в переданной строке. Не пойму где ошибка, помогите.
  • Медвежонок Пятачок © (23.09.09 11:19) [1]
    таким макаром передать строковое сообщение невозможно (в другой процесс)
  • Leonid Troyanovsky © (23.09.09 11:32) [2]

    > Tooreagen   (23.09.09 11:15)  

    > сообщение из одной программы в другу с помощью пользовательского
    > сообщения.

    Пользовательское не годится.
    See WM_COPYDATA.

    --
    Regards, LVT.
  • Сергей М. © (23.09.09 11:40) [3]

    > с помощью пользовательского сообщения


    А что, в задании на лабу явно упоминается "с помощью пользовательских оконных сообщений" ?
  • Tooreagen (23.09.09 14:20) [4]
    Все! Решил проблему с помощью WM_COPYDATA. Спасибо всем большое! нашел в инете что сама винда не даст принять незнакомое сообщение, т.е. пользовательское.
  • Сергей М. © (23.09.09 14:42) [5]

    > сама винда не даст принять незнакомое сообщение, т.е. пользовательское


    Это где ж такие грибы растут ?
  • Leonid Troyanovsky © (23.09.09 14:48) [6]

    > Tooreagen   (23.09.09 14:20) [4]

    > большое! нашел в инете что сама винда не даст принять

    Вранье, даст.
    Только не блок данных передастся, как хотелось.
    Бо, для этого нужен еще маршаллинг, а таким механизмом снабжено
    WM_COPYDATA, да еще несколько, скажем, WM_SET/GETTEXT&etc
    и некоторые другие, в основном для "старых" (времен Win3.x) контролов.

    --
    Regards, LVT.
  • QAZ (01.10.09 11:47) [7]
    в некоторых специфич. случаях WM_COPYDATA не канает и вызывает зависоны, а текст можно передать через юзерские месажи
  • Leonid Troyanovsky © (02.10.09 08:10) [8]

    > QAZ   (01.10.09 11:47) [7]

    Видимо, ручки оч.умелые, оно и не канает.

    И текст, конечно, можно передать.
    Вот, азбука Морзе до сих пор в ходу.

    --
    Regards, LVT.
  • QAZ (02.10.09 13:24) [9]

    > Leonid Troyanovsky

    типа юморист ?
    попробуй передать WM_COPYDATA сразу от нескольких к одному неоднократно и разными пачками
  • Leonid Troyanovsky © (03.10.09 02:43) [10]

    > QAZ   (02.10.09 13:24) [9]

    > попробуй передать WM_COPYDATA сразу от нескольких к одному
    > неоднократно и разными пачками

    Какими, на, разными пачками?

    От нескольких же одному, неоднакратно же - неоднократно.

    --
    Regards, LVT.
  • QAZ (03.10.09 10:00) [11]
    не заморачивйся о велиикий гуру
  • Leonid Troyanovsky © (03.10.09 12:15) [12]

    > QAZ   (03.10.09 10:00) [11]

    Ерундой не надо болтать.

    --
    Regards, LVT.
 
Конференция "WinAPI" » Передать текст с помощью сообщений в другую программу (Delphi) [D7, WinXP]
Есть новые Нет новых   [134434   +26][b:0][p:0]