Q&A

  • 윈도우에서 다른 윈도우로 문자열 보내고 받는 방법 있나요?
안녕하세요.
고수님들께 질문 드립니다.

윈도우에서 다른 윈도우로 메세지를 보내고 받고 할 수 있는 방법은 뭐가 있을까요?
게시판 검색을 해보았는데, 이벤트 발생시키는 예제는 있는데 문자열을 그냥 보내는 방법은 잘 못찾겠습니다.
제가 API 쪽은 초보라서요..^^

간단한 예제나,
아님 이미 답변한 글이 있으면 검색방법을 알려주시와용~
부탁드립니다~
2  COMMENTS
  • Profile
    김용덕 2004.06.04 20:46
    안녕하세요.
    윈도우에서 다른 윈도우가 같은 프로그램인지 서로 다른 프로그램인지 질문으로 봐서는 잘 모르겠네요.
    같은 프로그램이던 서로다른프로그램이던 동일하게  처리하는 방법으로는 WM_COPYDATA라는 메시지를 이용한 방법이 있을 수 있구요.

    같은 프로그램의 서로 다른 윈도우라면 힙에 메모리를 할당해서 그 메모리 포인터를 message의 파라메터로 보내시는 방법이 있을 것 같네요.

    이 이외에도 방법은 많을것 같습니다.
    참고가 되시길...

  • Profile
    너구리 2004.06.04 20:43
    데브피아 가서 찾아보니 있군요..

    --
    일단 FindWindow 등으로 윈도우 핸들을 얻어오면
    메시지를 보낼 수 있겠죠?
    여기서 님께서 정한 메시지를 보내는거죠...
    데이터를 wParam에 실어서 보내시면 되겠슴다...

    그리고 메시지 정하기가 싫으시면 WM_COPYDATA 메시지를
    이용하셔도 좋겠네요.
    --

    이게 답변 원문인데요..어디서 보니 WM_COPYDATA는 유실될수 있다
    라고 본것 같습니다.고수님들이 적으신 글이니 믿을만 하겠죠..

    팁에서 "이종" 이라고 치시면 이종간의 어플리케이션 어쩌구 있습니다.
    거기 보시면 다른 두 어플리케이션끼리 윈도우메세지를 주고 받아서
    펑션을 호출하는 예가 잘나와있습니다.

    wParam에다가 문자열을 얼마나 집어넣을수 있는지 모르겠네요..

    그리고 이건 또 다른 답변인데요..

    ----------------------------------
    FindWindow(), FindWindowEx()이것들 사용하면 핸들을 얻을 수 있습니다.
    또한 이러한 핸들을 직접 이용하는 것은 각각 존재하난 WPARAM, LPARAM를 알고 계시죠.
    요것들이 콜백프로시저에서 사용될때는  LOWORD, HIWORD등으로 변환되는데 나중에는 포
    인터 연산이 되어서 우리는 메시지만을 처리하게 되는 거죠.
    그러니깐 직접적으로 다른 윈도우에서 핸들을 얻은다음 이곳에 이밴트를 생성하려면,
    ^^;
    HHOOK구조체를 이용하고요. 메시지를 후킹하시면 됩니다. SPY++이 하나의 예제가 되구
    요.
    또한 이때 SetWindowsHookEx를 이용하여 등록하시고 이때 등록한 함수또한 CALLBACK 프
    로시저일겁니다. 이때 그 프로시저에 핸들을 얻도록 구현하시면 됩니다.
    또한 WM_DESTROY하실때는?
    UnWindowsHookEx를 이용하여 훅을 돌려주시고요. 안돌려주면 시스템 전체가 중지되는 경
    우도 있으니 경고조차도 무시하지 마시고 버그 잡아주세여.
    이것은 논리상에서 에러가 가장 조치하기 어려우니 초기 설계작업을 잘 하셔야 할 겁니
    다.
    그럼 이만.... 즐프하세여 ^^;
    --------------------------------------
    여기까지 입니다. 핸들을 얻어서 후킹을 한다네요..
    후킹을 해서 직접 작성한 평션을 돌려준다인거 같은데요..
    흠 후킹은 해본적이 없어성...