我正在尝试使用WPF创建一个类似于应用程序的“小工具”。目标是获得与正常的Windows 7小工具相同的行为:
我已经完成了前四个目标,但没有找到第五个问题的解决方案。最接近的方法是使用如何在WPF中进行AppBar对接(用于屏幕边缘,如WinAmp)?中的实用工具类,但这会将应用程序转换为“工具栏”,从而将应用程序从放置小工具GUI的屏幕部分排除在外。
我可以看到以前也有过类似的问题,但是这些问题在找到解决方案之前就已经消失了。不管怎么说,都是为了希望现在有一个人知道要解决这个问题。)
发布于 2010-03-11 19:59:07
尝试将顶部设置为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来做到这一点。
你可以:
发布于 2010-03-11 20:50:32
您可以通过创建一个XBAP来使用WPF实现实际的Windows Gadget。只需添加一个gadget.xml文件和一个只包含加载XBAP的IFRAME的.html文件。这样,您的WPF应用程序实际上将是一个小工具,并将自动遵循所有规则。
另一种选择是使用窗口侧栏。这要求在您的同时安装额外的软件,但也允许您在没有代码签名证书、用户授权等的情况下,在XBAP沙箱中做一些您无法做的事情。
第三个选项是创建一个小工具,它使用HTML中可识别的内容(例如特定的背景色),然后当您的.exe启动时,在资源管理器下扫描具有您正在寻找的属性的hWnd,将您自己注入到Explorer.exe进程中,并将您的窗口设置为它的子窗口。
第三个选项的一个变化是不注入Explorer.exe,而是维护您的Z索引和位置(使用SetWindowPos)来跟踪您找到的Z索引和hWnd位置。
这么多选择..。
发布于 2020-08-16 08:44:08
我会把这个留在这里供将来参考。
在Windows 10中,使用p/invoke将小工具窗口放在桌面上。将使用peek,显示桌面和Win +D
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
public static void SetOnDesktop(Window window)
{
IntPtr hWnd = new WindowInteropHelper(window).Handle;
IntPtr hWndProgMan = FindWindow("Progman", "Program Manager");
SetParent(hWnd, hWndProgMan);
}https://stackoverflow.com/questions/2405194
复制相似问题