2010-03-08 3 views
14

WPF를 사용하는 응용 프로그램과 같은 "가제트"를 만들려고합니다. 목표는 일반적인 윈도우 7 가제트와 같은 동작을 얻을 수 있습니다 :WPF의 Windows 가젯 - "바탕 화면 표시"가 활성화되어있는 동안 표시

  • 가 표시되지 않습니다 없음 작업 표시 줄의 항목 때 Alt + Tab 창
  • 하지 항상 상단에, 응용 프로그램 수 내가 처음 네 고아를 달성 할 수있었습니다

최고

  • 가시 수행하는 동안 '에어로 픽'
  • 가시 사용하는 동안 '쇼 바탕 화면'/ 윈도우 + D에 수 하지만 다섯 번째 문제에 대한 해결책을 찾을 수 없었습니다. 가장 가까운 곳은 How do you do AppBar docking (to screen edge, like WinAmp) in WPF?의 유틸리티 클래스를 사용하는 것입니다.하지만 앱이 "툴바"로 바뀌므로 가젯 GUI가있는 화면의 부분에서 응용 프로그램이 중단됩니다.

    이전에 Stackoverflow에서 비슷한 질문을했지만 솔루션을 찾지 못한 채 죽은 것을 볼 수 있습니다.

  • 답변

    1

    이 참으로 최상위를 설정해보십시오) =이 문제를 해결하기위한 지식과 거기에 지금은 사람이 있다는 희망 어쨌든 게시 및 응용 프로그램이 포커스를 잃을 때 0

    에 불투명도를 설정할 수 있습니다 내가 이런 짓을 XAML :

    <Window x:Class="OpacTest.MainWindow" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         Title="MainWindow" Topmost="True" Background="Transparent" ShowInTaskbar="False" AllowsTransparency="True" WindowStyle="None" Width="400" Height="300"> 
        <Grid> 
         <Border Background="Black" CornerRadius="5" /> 
        </Grid> 
    </Window> 
    

    나는 창을 위해 C#으로 이런 짓을 :

    protected override void OnActivated(EventArgs e) 
    { 
        base.OnActivated(e); 
    
        Opacity = 1; 
    } 
    
    protected override void OnDeactivated(EventArgs e) 
    { 
        base.OnDeactivated(e); 
    
        Opacity = 0; 
    } 
    

    이것은 당신이 길의 일부 얻는다; 데스크톱에 포커스가 있는지 알 수있는 방법이 필요합니다.

    데스크톱 윈도우의 WndProc 이벤트에 연결하고 WM_ACTIVATE를 찾을 수 있습니다.

    당신 수 :

    • 전화 GetDesktopWindow 바탕 화면 윈도우의 핸들을 얻을 수
    • 사용 AP /를 WndProc을
    • 핸들 WM_ACTIVATE 또는 적합한 윈도우 메시지에 대한 콜백을 설정하기 위해 전화를 호출하고 설정 불투명도 1로 돌아 가기
    +0

    실제로 작동합니다. – Larry

    1

    XBAP을 생성하여 WPF를 사용하여 실제 Windows 가젯을 구현할 수 있습니다. gadget.xml 파일과 XBAP을로드하는 IFRAME 만 포함 된 .html 파일을 추가하기 만하면됩니다. 그렇게하면 WPF 애플리케이션이 실제로 가젯이되어 모든 규칙을 자동으로 따릅니다.

    다른 옵션은 Windows Sidebar Styler입니다. 이를 위해서는 추가 소프트웨어를 함께 설치해야하지만 코드 서명 인증서, 사용자 권한 등이 없으면 XBAP 샌드 박스에서 수행 할 수없는 작업을 수행 할 수 있습니다.

    세 번째 옵션은 무언가를 사용하는 가젯을 만드는 것입니다 (예 : 특정 배경색과 같은) HTML에서 인식 가능한 경우, .exe가 시작되면 찾고있는 속성이있는 Explorer 아래에서 hWnd를 검색하고 Explorer.exe 프로세스에 자신을 삽입하고 그것의 아이.

    세 번째 옵션의 변형은 Explorer.exe에 삽입하지 않고 Z 색인 및 위치 (SetWindowPos 사용)를 유지하여 발견 한 hWnd의 Z 색인 및 위치를 추적하는 것입니다.

    그래서 많은 선택 ...

    0

    하나의 솔루션이 달성 행동처럼 "가젯"할 수있는, 당신의 윈도우 바탕 화면의 아이를 만드는 것입니다. 이렇게하면 Windows + D를 눌러도 바탕 화면에 항상 창이 표시됩니다. 여기에서 어떻게 완료되었는지 확인할 수 있습니다 : Window "on desktop".