1. 2011. 6. 3. 12:45 Tutorials/IDE]Delphi 7.2
델파이 에서 번거로운 작업 없이 다른 프로세스로부터 간단히 메세지를 받을 수 있습니다.

한번에 전달 할수 있는 값이많지 않음으로, ReadProcessMemory, WriteProcessMemory 를 사용하여,
추가적인 구조체 및 데이터 전달을 할때 매우 큰 자료를 다룰 수 있음으로 참고 하시기 바랍니다.


우선 메세지를 받기 위해 winMSG, winMSG2 를 폼클래스에 등록, 프로시저를 생성 해주게 됩니다.
이제 해당 윈도우로 메세지를 받게 될때, 프로시저로 메세지가 전달 됩니다.
type
  TMainForm = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    Memo1: TMemo;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
  private
    { Private declarations }
    { WM_USER 메세지 이벤트 핸들러 }
    procedure winMSG(var msg:TMessage); message WM_USER;
    { WM_USER+1 메세지 이벤트 핸들러 }
    procedure winMSG2(var msg:TMessage); message WM_USER+1;
  public
    { Public declarations }
  end;

3개의 버튼에 각각 코드를 체워 넣었습니다.
폼이름.Perform 으로 현재프로세스의 윈도우에 메세지를 보내줄수 있고
SendMessage 를 이용하여 다른 창으로 메세지를 전달 해줄수도 있습니다.
크기가 큰 데이터 전송은
WriteProcessMemory 및 ReadProcessMemory 함수를 사용하여 구조체의 포인터를 각각 프로세스에 두고
크기만큼 메모리를 복사 하면 됩니다.

procedure TMainForm.winMSG(var msg:TMessage);begin
  { WParam , LParam 받기 }
  Memo1.Lines.Add( 'winMSG : ' + IntToStr(msg.WParam) + ' ' + IntToStr(msg.LParam) );
  { 결과 반환 }
  msg.Result := msg.WParam;
end;
procedure TMainForm.winMSG2(var msg:TMessage);begin
  { WParam , LParam 받기 }
  Memo1.Lines.Add( 'winMSG2 : ' +  IntToStr(msg.WParam) + ' ' + IntToStr(msg.LParam) );
  { 결과 반환 High|Low 2바이트씩 나누어 반환 }
  msg.ResultLo := msg.WParamLo;
  msg.ResultHi := msg.LParamLo;
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
var ret:Integer;begin//메세지 전송
  ret := Self.Perform(WM_USER, 100, 200);
end;

procedure TMainForm.SpeedButton2Click(Sender: TObject);
var ret:Integer;begin//메세지 전송
  ret := Self.Perform(WM_USER, 100, 0);
end;

procedure TMainForm.SpeedButton3Click(Sender: TObject);
var ret:Integer;begin//다른 윈도우로 메세지 전송
  ret := SendMessage(Self.Handle, WM_USER+1, 100, 200);
  {
    2바이트 Low = Word(ret)
    2바이트 High = HiWord(ret)
  }
end;
Posted by Nightly Luna
,
® © Tanny Tales
/ rss