2010-03-08 87 views
14

我正嘗試使用WPF創建一個「小工具」,如應用程序。我們的目標是獲得相同的行爲作爲一個正常的Windows 7的小工具:WPF中的Windows小工具 - 顯示「顯示桌面」時顯示

  • 沒有任務欄條目
  • 沒有顯示出來,當你ALT + TAB窗口
  • 並不總是在最前面,應用程序可以在最前面
  • 可見,同時執行「航空皮克」
  • 可見,而使用「顯示桌面」 /的Windows + d

我已經能夠完成前四個果阿但是卻一直無法找到第五個問題的解決方案。我最近來的是使用How do you do AppBar docking (to screen edge, like WinAmp) in WPF?的實用工具類,但是這會將應用程序變成「工具欄」,從而放棄了我的小工具GUI放置在屏幕上的應用程序。

我可以看到以前在Stackoverflow上有類似的問題,但是在找到解決方案之前,這些問題已經消失。希望現在有一個人在那裏用知識來解決這個反正發佈=)

回答

1

嘗試朵蒙特設置爲true,當你的應用程序失去焦點,你可以設置不透明度爲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/Invoke調用設置回調WndProc中
  • 手柄WM_ACTIVATE或相應的Windows消息,並設置您的不透明度返回到1
+0

這實際上是有效的。 – Larry 2017-02-15 20:28:58

1

您可以通過創建XBAP來實現使用WPF的實際Windows小工具。只需添加一個gadget.xml文件和一個僅包含加載XBAP的IFRAME的.html文件即可。這樣你的WPF應用程序實際上就是一個小工具,並且會自動遵循所有的規則。

另一種選擇是使用Windows Sidebar Styler。這需要與您一起安裝附加軟件,但也允許您在沒有代碼簽名證書,用戶授權等的情況下執行XBAP沙箱內無法執行的操作。

第三個選項是創建一個小工具,可以在HTML中識別(例如特定的背景顏色),然後當您的.exe啓動時,掃描具有您正在查找的屬性的資源管理器下的hWnd,將自己注入Explorer.exe進程,並將窗口設置爲它的一個孩子。

第三個選項的變體是不注入Explorer.exe,而是維護您的Z索引和位置(使用SetWindowPos)來跟蹤Z索引和您找到的hWnd的位置。

那麼多的選擇...

0

一個解決方案,以實現做「小工具」之類的行爲,就是讓你的窗口桌面的孩子。這樣,即使按Windows + D,您的窗口也始終可以在桌面上看到。 你可以在這裏看到它是如何完成的:Window "on desktop"