밑에 댓글보고 인터넷 좀 찾아보니까 예제가 있더라구(http://mbc_21c.blog.me/120039976978 )
그래서 저기있는거 보고 따라했는데 말이야
HWND hWnd = ::FindWindow(NULL, "Recv"); //caption이 "Recv"인 윈도우를 찾는다.
[출처] [MFC] WM_COPYDATA 사용하기|작성자 찬스
라고 되있네.
근데 짤방처럼 Recv인 윈도우를 여러개 띄워서 하니깐 첫번째거에만 들어가네.이럴경우는 어떻게 해줘야 돼?
Recv에 일단 sendtest로 hWnd를 보내고 sendtest가 그거에 맞는 hWnd로 보내면 되나?
핸들값은 각 프로세스마다 틀려. 핸들은 각 프로세스내에서 어떤 자원을 고유하게 식별하기 위한 값이고, 스코프는 해당 프로세스내에서만 유효해.
원하는게 1:1 의 매우 단순한 통신이라면 위처럼 할수 있겠지만, 1:n 의 통신이라면, 소켓이나 IPC 에 대해 알아봐.
정 ..위처럼 해야한다면,..이름에 규칙성을만들고, sendtest가 몇개의 RecvXXX 가 있는지 알수 있다면, 계산해서 보낼수 있지 않을까? 가령 3개라면..Recv001, Recv002, Recv002...처럼 말이야
ㅠㅠ 고마워 횽. 내가 원하는건 1:n 이었는데 ㅠㅠ 예제보고 너무 쉬워서 좋아했더니...
저거 혹시 배열이나 포인터로 안들어옴?
저 Recv는 동일한 Recv를 2번 띄운건데 저렇게 해야됨.거기다 몇개 띄울지도 정해지면 안되고 ㅠㅠ
왠지 다음 포인터에 두번째 윈도우 핸들이 들어있을듯한 느낌이
는 mfc는 고사하고 winapi도 몰라서 헤헿
저거 예제 본문 글에 있는 링크따라가면 볼수 있어.난 초보니까 그냥 저대로만 한거고 ㅠㅠ
그딴거 없게 생겼네 그냥 소켓으로 하라니까
Recv가 다른 컴에서도 돌아야 한다고 하지 않았나? 소켓으로 가... 소켓통신 채팅프로그램 소스 많이 있으니까 찾아보고.
다른컴에서도 되면 좋지만 너무 어려우면 굳이 안그래도 되거든.소켓은...아직 공부를 안해서 하나도 몰라서 ㅠㅠ
그러면 Recv 각각이 시작과 동시에 자기 자신의 핸들 값을 sendtest로 보내고, sendtest는 그걸 배열이든 리스트든 가지고 있다가, 버튼 누를 때 루프 돌아서 각각에 COPYDATA 날리든지...
암튼 다들 고마워 ㅠㅠ
hWnd값은 같은 프로그램 여러개 띄우면 다 달라지는거야? 그러면 내가 어떻게 해볼수 있을거 같은데
-쏭- : 핸들값은 단순히 값만 전송하게되면 다른프로세스에서는 유효하지 않은 핸들값이 돼. DuplicateHandle 따위의 API 로 핸들값을 복사할수 있지만, 구조가 지저분해지고 아마 글쓴이가 할수 없을거야
혹시 차일드윈도우로 생성한 거 아니지? FindWindow는 top-level 윈도우(바탕화면의 자식)만 찾는다.
sendTest가 recv를 여러개 fork하는 경우에는 CreateProcess() 같은 걸 호출할 텐데, CreateProcess의 마지막 인수로 PROCESS_INFORMATION 구조체가 쓰여. 거기에 새로 생성된 process의 thread_id가 들어 있어 거기에다가 PostThreadMessage(thread_id, ...)를 보내.
근데 PostThreadMessage는 COPY_DATA는 못 보내니까 recv가 다시 한 번 자기 main form의 window handle을 보내게 만들어. 그럼 그 window handle에다가 WM_COPYDATA를 쏘면 되겠지.
이게 소켓을 안 쓰고 하는 방법임.