같은 시스템에서 실행되는 프로그램이라면..
WM_COPYDATA를 사용해보시는 것은 어떤지요..
DDE를 사용하는 것도 괜찮고..
아래는 다소 복잡하지만..
예전에 WM_COPYDATA를 쓰기 위해 콤포넌트로 만들어 본 것입니다..
첨부의 예제는 아래 콤포넌트를 이용해서 채팅프로그램 흉내낸것입니다..
---------------------------------------------------------------------
unit CopyData;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TCopyDataEvent = Procedure (Sender:TObject; Data:String) of Object;
TCopyData = class(TWinControl)
private
{ Private declarations }
FCopyDataEvent : TCopyDataEvent;
protected
{ Protected declarations }
Procedure GetMessageCopyData(Var Msg:TMessage); Message WM_COPYDATA;
public
{ Public declarations }
Constructor Create(AOwner:TComponent); Override;
Procedure SendData(Handle:Integer; stMsg:String);
published
{ Published declarations }
Property OnCopyData : TCopyDataEvent read FCopyDataEvent write FCopyDataEvent;
end;
procedure Register;
Function FindCopyData(FormName:PChar):Integer;
implementation
procedure Register;
begin
RegisterComponents('Ryu', [TCopyData]);
end;
//// 보조 함수
Function FindCopyData(FormName:PChar):Integer;
Begin
Result:= FindWindow(Nil, FormName);
Result:= FindWindowEx(Result, 0, 'TCopyData', Nil);
End;
//// Main 부분
Constructor TCopyData.Create(AOwner:TComponent);
Begin
Inherited Create(AOwner);
Height:= 24;
Width:= 24;
End;
Procedure TCopyData.GetMessageCopyData(var Msg:TMessage);
Var
Data :^COPYDATASTRUCT;
Begin
Try
Data:= Ptr(Msg.lParam);
If Assigned(OnCopyData) then OnCopyData(Self, StrPas(Data^.lpData));
Except
End;
End;
Procedure TCopyData.SendData(Handle:Integer; stMsg:String);
Var
Data : COPYDATASTRUCT;
Begin
If Handle = 0 then Exit;
Try
Data.cbData:= Length(stMsg)+1;
Data.lpData:= PChar(stMsg);
SendMessage(Handle, WM_COPYDATA, Handle, Integer(@Data));
Except
End;
End;
end.
혀 ~~ 님이 쓰신 글 :
:
: 한 프로그램에서 ini화일에서 값을 읽어와..
:
: ValueListEditor에 넣어준 후..
:
: 또 다른 프로그램의
:
: ValueListEditor에 똑같은 모양으로
:
: 데이터를 넣어주고 싶은데..
:
: 쉽지가 않네요??
:
:
:
|