Q&A

  • Edit1,edit2,edit3...핸들을 다른 프로그램에 넘겨주려할때..
서로 독립적인 두 프로그램이 있습니다. (부모자식간도 아닌 독립 프로세스)

결론부터 말하면, B 프로그램에서 A 프로그램의 Edit1,edit2,edit3 중 포커스가 위치한 컨트롤쪽으로 문자열 데이터를 보내주려 합니다.

A 프로그램에 edit1,edit2,edit3 을 위치해 놓았습니다.

A 프로그램에서는 특정 에디트 컨트롤에 포커스가 갔을때 이를 B 프로그램에 알려주어야 할 텐데요..
그래야..B 프로그램에서 이를 알면 해당 컨트롤로 문자 데이터를 보내죠.

포커스가 존재된 그 시점에서 해당 App 폼 핸들과 컨트롤 핸들을 넘겨줄 수 있는 방법과 또  B 프로그램에서는 그것을 알 수 있는 방법은 무엇인지 궁금합니다.













3  COMMENTS
  • Profile
    바보감자 2004.01.03 01:52
    안녕하세요 언제나 초보 바보감자입니다.
    둘다 직접 제작 하신다면.. 어려울께없죠.????
    A프로그램의 edit2에 포커스가 오면 onenter 이게 호출이되죠
    이곳에다가.
    1. B프로그램이 실행되어있는지 체킹 먼저하고 (findwindow 함수를 사용)
    2. 떠있다면 B프로그램에 특정 메세지 를 보냅니다. (sendmessage 를 사용)
    3. 넘겨줄때 핸들값을 넘겨주어야겠지요
    4. B프로그램은 그 메세지를 받으면 바로 데이타를 처리해서 넘겨받은 핸들값으로 데이타를 넣어줍니다 이것 또한 sendmessage 사용합니다..
    이정도면 되겠네요..
    둘다 만드신다는 조건이구요.. 그게 아니라면.. 다른 방법을 써야겠지요..
    방법이란 여러가지가 있기에 자세히 설명 해주시면 다른 분이 또 좋은 방법을
    알려 주실꺼라 생각합니다..
    저위에 함수들은 검색해보면 많이 나온답니다 ^^.
    저 WinAPI들의 역활은 지금 구현 하시는부분을 구현할때 많이
    쓰는 것이니 .. 저걸로 검색해서 보셔도
    많은 도움을 받으실꺼라 생각합니다..
    그런 관련 질문 & 답변 글도 검색될듯 싶구요..
    허접 답변이였네요 새해 복많이 받으세요 ^^


  • Profile
    홍길동 2004.01.03 09:44
    답변에 감사드립니다.

    더 자세히..말슴드리면, 포커스가 올경우에
    SendMessage를 이용하여 해당 Application의 핸들과 함께
    Edit 컨트롤의 Window Name 도 같이 보내주고 싶거든요.

    예)
    procedure TFaaa.Button1Click(Sender: TObject);
    var
      H : HWND;
    begin
      H := FindWindow('TFbbb','bbb');
      Sendmessage(H,WM_USER+5000,application.handle,edit1.Handle);
    end;

    위에서 edit1.handle 값을 넣는게 맞는건지..저는 window Name 을 전달해 주고 싶거든요..




    근디 SendMessage 정의를 보면

    LRESULT SendMessage(

        HWND hWnd,        // handle of destination window
        UINT Msg,        // message to send
        WPARAM wParam,        // first message parameter
        LPARAM lParam         // second message parameter
       );

    SendMessage를 이용하여 Pchar 타입의 Window Name 까지 보낼 수 있는 방법이 있는지 궁금합니다. integer 타입이라..이거원..제가 잘 몰르겠네요.

    왜 Window Name 까지 같이 보내고 싶어하냐믄, 메시지를 수신한 프로그램에서 FindWindowEx 를 이용하여 해당 Edit 컨트롤로 문자 데이터를 날려 주려고 하는 거거든요. 마지막 parameter가 window Name(Pchar 타입) 이죠..
    예)
      H := FindWindow('TFaaa','aaa');
      HEdit := FindWindowEx(H,0,'TEdit',여기입니다..);
      SendMessage(HEdit,WM_CHAR,ORD('A'),0);

    저 부분에 Sendmessage로 받은 Window Name 데이터를 데입시켜줄라고 하거든요. ^^;  이게 맞는지..아님 다른 방법을 써야하는지 몰겠네요..쩝
    두서없이 써서 죄송합니당...









  • Profile
    바보감자 2004.01.05 19:42
    안녕하세요 언제나 초보 바보감자입니다 ^^*;
    흐미.. 답변 잘 안달려고 노력중인데 다시 질문을 하시다니..ㅇㅅㅇ;;;;
    실력이 원채 없어서 ㅠㅅㅠ
    두개다 직접 만드시는거같습니다.
    으구..그런 고민을 하시고계시군요..
    2가지 방법을 말해보지요.. 더많겠지만 ^^;;
    사실은 저도 잔머리만 잘굴리는 초보입니다..
    만약 저라면.. 레지스트리에다가 등록 시키겠습니다.
    메세지 발생전에 레지스트리에 등록시키고 그다음에
    메세지를 보내는거죠.. 그럼 받는쪽에서 메세지 호출되면..
    레지스트리에서 데이타를 가져옵니다.흐흐 이건 꼼수네요..ㅇㅅㅇ;;;
    레지스트리 공부할겸 이구요..정석은...밑에 방법이겠죠
    msg 이놈의 마지막 인자 2개는 상위 Word 하위 Word입니다.
    숫자형이구요. ^^*.

    h := FindWindow('notepad',nil);
    h := FindWindowex(h,0,'edit',nil);
    if h <> 0 then
    begin
       NumCaracters := SendMessage(h,WM_SETTEXT,length(Memo1.text),integer(memo1.text));
    end;

    이걸 보시면 참고가 될지 몰르겠습니다.
    핸들을 가지고 그곳 에다가 데이타를 집어넣는 프로그램입니다..
    h핸들은 노트 패드를 잡았구요...

    그럼 수고하세요..~~~