|
civilian,안영제님의 빠른 답변 감사합니다. 그런데 제가 궁금한 것은 SendMessage를 이용하지 않고 ShowWindow와
같은 단일 함수에서 처리하는 어떠한 방법을 기대했습니다. 저도 SendMessage와 같은 방법을 많이 쓰고 있긴 합니다.
혹시 SendMessage와 같은 방법말고 다른 방법이 없을까요?
civilian,안영제 님이 쓰신 글 :
: 약간 보충글을 다는 사이에.....
:
: Application->OnMessage에 대한 이벤트 핸들러를 하나 만드시면 될 듯 합니다.
: 적당한 메세지를 하나 정의한후(ex. WM_USER+???)
: 어플리케이션이 해당 메세지를 수신한 경우 원하는 동작을 처리하도록 만들면 됩니다.
:
: 동작시키는 쪽에서는
:
: SendMessage(Handle, WM_USER+???, 0, 0);
:
: 이런식으로 날리면 되겠죠.
:
: 라이포 님이 쓰신 글 :
: : 답변 감사합니다. 그렇다면 "나"의경우 어떻게 폼을 띄우면 될까요? 궁금합니다. SendMessage같은방법말고...
: :
: : civilian,안영제 님이 쓰신 글 :
: : : 찾은 핸들값이 다르기 때문입니다.
: : :
: : : 가.의 방법은 어플리케이션의 메인폼 핸들을 되돌리지만
: : : 나.의 경우는 어플리케이션의 핸들을 되돌리기 때문입니다.
: : :
: : : 라이포 님이 쓰신 글 :
: : : : void __fastcall TAform::SpeedButton1Click(TObject *Sender)
: : : : {
: : : :
: : : : HWND hWnd = FindWindow(NULL, "B프로그램캡션"); // 캡션으로 찾을경우---"가"방법
: : : : HWND hWnd = FindWindow(NULL, "B프로그램실행이름"); // 이름으로 찾을경우---"나"방법
: : : : if (hWnd == NULL)
: : : : {
: : : : AnsiString slExe = ExtractFilePath(Application->ExeName) + "B프로로그램실행이름.exe";
: : : : ShellExecute(NULL, "open", slExe.c_str(), NULL, NULL, SW_RESTORE);
: : : : }
: : : : else
: : : : {
: : : :
: : : : ShowWindow(hWnd, SW_SHOWDEFAULT);
: : : : SetForegroundWindow(hWnd);
: : : :
: : : : }
: : : :
: : : : }
: : : : 현재 B라는 프로그램은 nonVisible상태이며 TrayIcon이 만들어져 있는 상태입니다. 위 소스는 A프로그램의 소스이며
: : : : 위 소스는 A프로그램에서 B프로그램을 활성화 시키고 폼이 보이게 하기위한 소스입니다.
: : : : 위 소스에서 주석을 보시면 방법으로 "가" 또는 "나" 방법이 있습니다.
: : : : 1."가"방법- 캡션으로 핸들값을 찾을 경우
: : : : 위 방법으로 하면 정상적으로 만약 else루틴으로 갈 경우 ShowWindow가 잘 작동합니다.
: : : : 2. "나"방법-이름으로 핸들값을 찾을 경우
: : : : 위 방법으로 하면 핸들값을 찾아서 else루틴으로 갈 경우 ShowWindow가 제대로 작동하지 않습니다.
: : : : 여기서 제대로 작동하지 않는다는 뜻은 하단에 아이콘이 생성되나(TrayIcon말고) 눌러도 폼이 보이지 않는다는겁니다. 이유가 몰까요? ShowWindow의 옵션(SW_SHOWDEFAULT)을 바꾸어서 여러가지로 시도해봐도 마찬가지입니다.
: : : : 고수분들의 많은 답변 기대합니다.
|