gpt4 book ai didi

c# - 将 Windows 任务栏设置为前台窗口/进程

转载 作者:行者123 更新时间:2023-12-05 03:45:12 31 4
gpt4 key购买 nike

我想将 Windows 任务栏设置为前台窗口,就像用户单击它时一样。您可以看到它已获得焦点,因为先前事件的窗口不再标记在任务栏中。

我试过了 SetForegroundWindow通过使用 FindWindow 获取 hwnd但这没有任何作用:

SetForegroundWindow(FindWindow("System_TrayWnd", null));

具体来说,我想防止任务栏在启用自动隐藏选项时自动隐藏。我不想暂时禁用自动隐藏选项,因为这会导致打开的窗口移动位置。如果用户单击任务栏,只要它处于焦点状态,它就会停止自动隐藏。

如何将焦点设置到 Windows 任务栏?

最佳答案

您需要使用 SetWindowPos而不是 SetForegroundWindow 并为其提供一个标志以显示窗口。根据文档,该标志为 0x0040。

然后,如果你想让它真正有焦点,那么你可以调用SetForegroundWindow。

[DllImport("user32.dll", SetLastError = true)]
private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

这是任务栏“显示”的一个简单工作示例:

MainWindow.xaml

<Window x:Class="_65994896.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button Content="Show Taskbar" Click="Button_Click"/>
</Grid>
</Window>

MainWindow.xaml.cs

using System;
using System.Runtime.InteropServices;
using System.Windows;

namespace _65994896
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName);

[DllImport("user32.dll", SetLastError = true)]
private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

[Flags]
private enum SetWindowPosFlags : uint
{
SWP_HIDEWINDOW = 0x0080,
SWP_SHOWWINDOW = 0x0040
}

public MainWindow()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
var window = FindWindow("Shell_traywnd", "");
SetWindowPos(window, IntPtr.Zero, 0, 0, 0, 0, (uint)SetWindowPosFlags.SWP_SHOWWINDOW);
}
}
}

关于c# - 将 Windows 任务栏设置为前台窗口/进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65994896/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com