Q&A

  • 다른 응용프로그램에 키다운 이벤트를 보내려합니다...
다른 응용프로그램에 키다운 이벤트를 보내려합니다...

예를 들어 내 프로그램에서 Word내에 키에 관한 이벤트를 발생시키고(엔터 또는 그외 다른키)

싶은데...방법이 에매...

sendmessage()를 처리하면 이벤트가 발생이 안되는것같구

keybd_event()는 어떻게 다른응용프로그램에 써먹는지 모르겠구...

여하튼 고수님들 갈켜주세용...



1  COMMENTS
  • Profile
    2000.02.09 22:25
    왕초(?) wrote:

    > 다른 응용프로그램에 키다운 이벤트를 보내려합니다...

    > 예를 들어 내 프로그램에서 Word내에 키에 관한 이벤트를 발생시키고(엔터 또는 그외 다른키)

    > 싶은데...방법이 에매...

    > sendmessage()를 처리하면 이벤트가 발생이 안되는것같구

    > keybd_event()는 어떻게 다른응용프로그램에 써먹는지 모르겠구...

    > 여하튼 고수님들 갈켜주세용...

    >



    먼저 다른 어플리케이션의 핸들을 알아야겠죠?

    폼 핸들과 그 폼에 있는 메모나 dbrich의 핸들값을 또 알아야되고요.

    제가 알기에는 sendmessage()로는 안되는걸로 알고요.

    안해봐서 잘 모르지만,....ㅡ.ㅡ;

    keybd_event()로 그 두 핸들을 다 지정해줘야됩니다.

    SetForeGroundWindow([hwnd]);

    음...그건 소스가 어디는지 잘 몰라서 찾아봐야되겠녜요...

    하여튼 첫번째 방법은 그렇고



    두번째 방법은

    이벤트를 보낼 어플리케이션에서...

    procedure TfrmMain2.btnMoveClick(Sender: TObject);

    type

    tData = Record

    s: String[15];

    end;

    var DataStruct: TCopyDataStruct;

    Data: TData;

    h: hwnd;

    begin

    h := FindWindow('TfrmMain', nil);

    If h = 0 then exit;

    Data.s := 'test';

    DataStruct.dwData := RegisterWindowMessage('SyncString');

    DataStruct.cbData := SizeOf(TData);

    DataStruct.lpData := @Data;

    SendMessage(h, WM_COPYDATA, wParam(Application.Handle), lParam(@DataStruct));

    end;







    이벤트를 실행할 어플리케이션...

    private

    { Private declarations }

    procedure WndProc(var wpMessage: Tmessage); override;

    public



    procedure TfrmMain.WndProc(var wpMessage : Tmessage);

    var tmp: String;

    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;

    tmp := data.s;

    If tmp = [어떤 특정값이면] then 실행할 함수를 호출한다.

    end

    else inherited WndProc(wpMessage);

    end;



    위의 소스와 같이 현재 어플리케이션에서 어떤 조건에 의해 다른 어플리케이션의

    이벤트를 실행시킬려면(말이 어렵나?)

    어떤 특정값을 다른 어플리케이션에 보내는 것입니다.

    그 값을 받은 다른 어플리케이션은 그 값을 비교해서 특정 이벤트를 실행시키면 되죠.

    위의 소스를 참고하세요.

    그럼 좋은 어플리케이션 만드세요.