2009-05-24 2 views

답변

13

.NET Rocks Podcast에서는 오래 전부터 Microsoft의 Kate Gregory가 불가능하다고 말했습니다.

그녀는 "사용자가 그것을 원한다면 (트레이 아이콘) 그는 그곳에 놓을 것입니다"라고 말했습니다. 이유는 용지함 영역에 혼란을 방지하기위한 것입니다.

+4

제 의견으로는 환상적인 일입니다. 시스템 트레이는 학대 당했고 항상 스크린 부동산을 되찾기 위해 "항상 숨기"위해 모든 것을 설정하려했습니다 –

+2

Jamie, 동의 하겠지만, 트레이 아이콘이 필수적으로 필요한 앱 유형이 있습니다. 주 프로그램에 대한 유일한 액세스 권한으로 그리고 Win7이 "아이콘이 어디에 있습니까?"라는 큰 지원로드를 생성 할 것이라는 것을 확실히 알고 있습니다. –

+0

글쎄, 실제로 가능할 수도 있습니다 ... 사용자가 표시 할 트레이 아이콘을 구성 할 수 있다면 코드로 구성 할 수 있어야합니다 (아마도 약간의 레지스트리 값을 변경하여 가능). –

3

당신이 정말로 당신의 트레이 아이콘을 표시 할 경우, 최소한의 텍스트 풍선을 팝업 그냥 나중에 풍선을 숨기고 다음 코드 예를 다시 그림자의 수 :이 반복 경우

trayIcon.ShowBalloonTip(30000, "", ".", ToolTipIcon.None) 

Dim balloonHandle As IntPtr = GetBalloonHwnd(balloonText) ' mainly: FindWindow("tooltips_class32", Nothing) 

If (balloonHandle <> IntPtr.Zero) Then 
    Dim sysShadowClassHwnd As IntPtr = FindWindow("SysShadow", Nothing) 

    ' will hide balloon and leaving a small shadow artifact - just for this balloon 
    PostMessage(balloonHandle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero) 
    SetWindowPos(balloonHandle, IntPtr.Zero, 0, 0, 0, 0, SWP_HIDEWINDOW) 

    If (sysShadowClassHwnd <> IntPtr.Zero) Then 
    ' this will remove the small shadow artifact 
    PostMessage(sysShadowClassHwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero) 
    End If 
End If 

(예 : 매 30 초마다) Explorer.exe가 생각하기 때문에 트레이 아이콘이 사용자에게 표시되도록 열린 상태로 남습니다. 아이콘에 직접 마우스 오른쪽 버튼을 누르지 않은 것과 같은 몇 가지 사소한 문제가 여전히 존재합니다.

저는 사용자가 수동으로 그리고 각 업데이트마다이 작업을 수행하지 않으려는 회사 소프트웨어의 트레이 아이콘을 표시하는 데 정말로 사용되었습니다. 그래서 어쩌면이 도움이 될 것입니다 ... :)

그렇지 않으면, 전적으로 동의합니다 : 이것은 사용자의 손에 있어야하며 응용 프로그램에 의해 제어되지 않아야합니다.

2

확실히 "불가능"하지 않습니다. 트레이 아이콘을 검색하고 Explorer 자체에서 사용되는 표시 여부를 변경하기위한 문서화되지 않은 COM 인터페이스 ITrayNotify이 있습니다. 여기에 전체 C++ 소스 : 물론 http://thread0.me/tag/windows/

, 비공식 API 를 사용하여이 위험 및 Windows 8은 XP를위한 2 개의 다른 정의를 사용한다는 뜻이 API에 깨는 변화 intoduced있다 - Win7에 및 Win8 - Win10를. 하지만 이봐, 심지어 Chrome uses this trick. 제대로 오류를 처리해야합니다.

관련 문제