2010-03-08 31 views
14

WPF kullanarak uygulama benzeri bir "gadget" oluşturmaya çalışıyorum. Amaç normal bir Windows 7 gadget olarak aynı davranışı elde etmektir:WPF'deki Windows gadget'ı - "Masaüstünü göster" etkinleştirildiğinde göster

  • görünmüyor mu Hayır görev çubuğu girişi yaparken alt + tab pencereleri
  • DEĞİL her zaman en üstte, uygulamalar can ilk dört goa başarmak mümkün oldum

üst

  • Görünür gerçekleştirirken 'Aero Peek'
  • Görünür kullanırken 'Show masaüstü'/Windows'un + D olmak Ama, beşinci probleme bir çözüm bulamadılar. Geldiğim en yakın program, How do you do AppBar docking (to screen edge, like WinAmp) in WPF?'dan gelen faydalı sınıfı kullanmaktır, ancak bu, uygulamayı bir "araç çubuğu" na dönüştürerek, gadget GUI'mn yerleştirildiği ekran bölümünün uygulamalarını sonlandırır.

    Benzer soruların Stackoverflow'ta daha önce sorulmuş olduğunu görebiliyorum, ancak bir çözüm bulunmadan önce bunlar öldü.

  • cevap

    1

    true Topmost ayarlamayı deneyin) = Bu çözmek için bilgisi olan var şimdi birisi vardır umuduyla yine Gönderme ve başvurunuzun odak kesilse bile 0.

    Saydamlık ayarlayabilirsiniz Bunu yapan 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> 
    

    ben Pencere için C# yaptım:

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

    Bu orada yol parçası alır; Masaüstü odaklanıp odaklanmadığını bilmenin bir yoluna ihtiyacınız var.

    Bunu, masaüstü penceresinin WndProc olayına girip WM_ACTIVATE'yi arayarak yapabilirdiniz.

    Yapabilirsin:

    • Çağrı GetDesktopWindow masaüstü penceresinin tanıtıcı almaya
    • Kullanım ap/WndProc
    • Sap WM_ACTIVATE veya uygun pencereler mesaj için bir geri arama ayarlamak için çağrı çağırmak ve set Saydamlık Geriye dön 1
    +0

    Bu aslında çalışır. – Larry

    1

    Bir XBAP oluşturarak WPF kullanarak gerçek bir Windows Gadget'ı uygulayabilirsiniz. Sadece bir gadget.xml dosyası ve yalnızca XBAP'ı yükleyen bir IFRAME içeren bir .html dosyası ekleyin. Bu şekilde WPF uygulamanız aslında bir araç olacaktır ve tüm kuralları otomatik olarak takip edecektir.

    Başka bir seçenek Windows Sidebar Styler kullanmaktır. Bu, sizinkilerle birlikte yüklenecek ek yazılımlar gerektirir, aynı zamanda XBAP sanal alanında yapamayacağınız şeyleri kod imzalama sertifikaları, kullanıcı yetkilendirmesi, vb. Olmadan yapmanıza izin verir.

    Üçüncü bir seçenek, bir şey kullanan bir araç oluşturmaktır. HTML'de (belirli bir arkaplan rengi gibi) tanınabilir, sonra .exe'niz başladığında, aradığınız özniteliklere sahip Explorer altında bir hWnd için tarama yapın, kendinizi Explorer.exe işlemine enjekte edin ve pencerenizi onun bir çocuğu.

    Üçüncü seçeneğin bir varyasyonu, Explorer.exe'ye enjekte edilmemelidir, ancak Z Dizini ve konumunuzu (SetWindowPos kullanarak) Z Dizini ve bulduğunuz yerin konumunu izlemek için korur.

    Çok seçenek ...

    0

    bir çözüm elde davranış gibi "gadget" do için, pencerenizi masaüstünün alt yapmaktır. Bu şekilde, Windows + D tuşlarına bassanız bile pencereniz her zaman masaüstünde görünür. Burada nasıl yapıldığını görebilirsiniz: Window "on desktop".