Q&A

  • 프로그램간 메시지 전달..
초보라 정말 어렵네요.. 도와 주세요

올라오 있는 예제처럼 이대로 Test를 해 보았습니다..



메시지를 던지면 네스케이프가 뜨는 거여요.. 미치겠습니다.



던지는 넘 프로그램은 서비 프로그램(sub 라함)

받는넘 프로그램은 서비 프로그램(main 라함)





----------------------------------------------------------------------------------

// 던지는 넘(sub)

----------------------------------------------------------------------------------

unit usndr;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



type

tData = Record

s: String[250];

end;



var

Form1: TForm1;

lWMsgHandle : longint;



implementation



{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);

begin

lWMsgHandle := RegisterWindowMessage('나으문자열');

end;



procedure TForm1.Button1Click(Sender: TObject);

var

DataStruct: TCopyDataStruct;

Data: TData;

begin

Data.s := '나는 구창민이다, 나는 18살이다..읔..돌날아온다..';

DataStruct.dwData := lWMsgHandle;

DataStruct.cbData := SizeOf(TData);

DataStruct.lpData := @Data;

SendMessage(hwnd_BroadCast, WM_CopyData, wParam(Application.Handle), lParam(@DataStruct));

end;



end.





----------------------------------------------------------------------------------

// 받는넘(Main):

----------------------------------------------------------------------------------



unit urcv;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs,

StdCtrls;



type

TFReceiver = class(TForm)

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

private

f_my_Messagehandle: longint;

procedure WndProc(var wpMessage: TMessage); override;

public

end;



type

tData = Record

s: String[250];

end;



var

FReceiver: TFReceiver;



implementation



{$R *.DFM}



procedure TFReceiver.FormCreate(Sender: TObject);

begin

f_my_Messagehandle := RegisterWindowMessage('나으문자열');

end;



procedure TFReceiver.WndProc(var wpMessage: TMessage);

var

Data: TData;

begin

If (wpMessage.Msg = WM_CopyData) And

(PCopyDataStruct(wpMessage.lParam)^.dwData = f_my_Messagehandle) Then

begin

CopyMemory(@data, PCopyDataStruct(wpMessage.lParam)^.lpData, SizeOf(TData));

wpMessage.Result := 1;

Memo1.lines.add(Data.s); //메모박스에 받은 문자열을 나타낸다.

end

else

inherited WndProc(wpMessage);

end;



end.

1  COMMENTS
  • Profile
    김일배 2000.07.03 05:10
    한번 저도 해볼겸 다음과 수정하여 테스트 해보았습니다.

    동작은 잘됩니다만 원하시는 대답 될런지 모르겠습니다.



    {송신측}

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;

    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form1: TForm1;

    implementation

    {$R *.DFM}

    type

    tData = Record

    s: String[250];

    end;

    procedure TForm1.Button1Click(Sender: TObject);

    var

    wnn:HWND;

    DataStruct: TCopyDataStruct;

    Data: TData;

    begin

    wnn:=FindWindow('TFReceiver','FReceiver');

    Data.s := '나는 구창민이다, 나는 18살이다..읔..돌날아온다..';

    DataStruct.dwData := wnn;

    DataStruct.cbData := SizeOf(TData);

    DataStruct.lpData := @Data;

    SendMessage(wnn, WM_COPYDATA,

    wParam(Application.Handle), lParam(@DataStruct));

    end;

    {수신측}

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;

    type

    TFReceiver = class(TForm)

    Memo1: TMemo;

    private

    { Private declarations }

    procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;

    public

    { Public declarations }

    end;

    var

    FReceiver: TFReceiver;

    implementation

    {$R *.DFM}

    type

    tData = Record

    s: String[250];

    end;

    procedure TFReceiver.WMCopyData(var Message: TWMCopyData);

    var

    Data: TData;

    begin

    CopyMemory(@data,Message.CopyDataStruct^.lpData, SizeOf(TData));

    Message.Result := 1;

    Memo1.lines.add(Data.s);

    end;

    end.