프로그램을 최소화 시키면 트레이 아이콘으로 등록이 되도록 했습니다.
만약 이 프로그램을 최소화 시켜서 트레이 아이콘에 등록이 되게 하고, 이 프로그램을
또 실행 시키면 "프로그램이 이미 실행 중입니다." 라는 메시지와 함께
트레이에 등록된 프로그램을 활성화 시키려 합니다.
프로그램이 두번 이상 실행 안 되게 했지만, 트레이에 등록된 프로그램을 활성화 시키지
는 못했습니다.
그 이유인 즉슨 트레이 아이콘의 핸들을 못얻어 오는 것 같습니다.
코드는
var
Handul : HWND;
begin
Handul := FindWindow('TrayNotifyWnd',nil);
if Handul <> 0 then // 핸들값이 0으로 나옵니다.
SendMessage(Handul,WM_COMMAND,IDC_SHOWMAIN,0);
end;
트레이 아이콘의 핸들을 얻어와 이것을 활성화 시키는 방법을 부탁드립니다.
> 프로그램을 최소화 시키면 트레이 아이콘으로 등록이 되도록 했습니다.
>
> 만약 이 프로그램을 최소화 시켜서 트레이 아이콘에 등록이 되게 하고, 이 프로그램을
>
> 또 실행 시키면 "프로그램이 이미 실행 중입니다." 라는 메시지와 함께
>
> 트레이에 등록된 프로그램을 활성화 시키려 합니다.
>
> 프로그램이 두번 이상 실행 안 되게 했지만, 트레이에 등록된 프로그램을 활성화 시키지
>
> 는 못했습니다.
>
> 그 이유인 즉슨 트레이 아이콘의 핸들을 못얻어 오는 것 같습니다.
>
> 코드는
>
> var
> Handul : HWND;
> begin
> Handul := FindWindow('TrayNotifyWnd',nil);
> if Handul <> 0 then // 핸들값이 0으로 나옵니다.
> SendMessage(Handul,WM_COMMAND,IDC_SHOWMAIN,0);
> end;
>
> 트레이 아이콘의 핸들을 얻어와 이것을 활성화 시키는 방법을 부탁드립니다.
//아래는 제가 사용한 트레이 아이콘을 클릭하여
//특정동작을 시킬시의 코드입니다.
//참고하셔서 즐거운 프로그래밍 하시길~.
procedure TMainForm.WndProc;
var pt : Tpoint;
begin
case Message.Msg of
MY_SHOWFORM_ID:
case Message.lParam of
WM_LBUTTONDBLCLK: begin //마우스 왼쪽버튼 더블클릭시 나타나게 합니다.
ShowWindow(Application.Handle,SW_SHOWNORMAL);
Self.Show;
SetForegroundWindow(MainForm.Handle);
end;
wm_rbuttondown : begin //마우스 오른쪽 버튼을 클릭시 사용자정의 팝업메뉴가 뜨게 합니다.
getcursorpos(pt);
SetForegroundwindow(handle);
popupmenu1.popup(pt.x,pt.y);//<-- 요 팝업메뉴는 임의대로 미리 만들어 두셔야 합니다.
end;
end;
end;
inherited;
end;