C#WPF主窗口始终位于桌面前面
我有一个小的WPF应用程序,我总是想显示在桌面前,但后面的所有其他应用程序。我尝试了几种方法来创建它,但要么窗口最小化(WindKey+D),要么它显示在所有应用程序前面 基本上我想在主窗口内运行一个标签。它在桌面上有一个透明的背景,消息文本每周都会改变。(所有用户的工作场所安全信息)C#WPF主窗口始终位于桌面前面,c#,wpf,C#,Wpf,我有一个小的WPF应用程序,我总是想显示在桌面前,但后面的所有其他应用程序。我尝试了几种方法来创建它,但要么窗口最小化(WindKey+D),要么它显示在所有应用程序前面 基本上我想在主窗口内运行一个标签。它在桌面上有一个透明的背景,消息文本每周都会改变。(所有用户的工作场所安全信息) 使用System.Windows; 命名空间ESL消息 { /// ///MainWindow.xaml的交互逻辑 /// /// 公共部分类主窗口:窗口 { 公共主窗口() { 初始化组件(); 初始化屏
使用System.Windows;
命名空间ESL消息
{
///
///MainWindow.xaml的交互逻辑
///
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
初始化屏幕设置();
this.ShowInTaskbar=false;
}
public void InitialiseScreenSettings()
{
双屏幕宽度=System.Windows.SystemParameters.PrimaryScreenWidth;
双屏幕高度=System.Windows.SystemParameters.PrimaryScreenHeight;
双窗口宽度=此.Width;
双窗高度=此高度;
this.Left=(屏幕宽度/2)-(窗口宽度/2);
this.Top=(屏幕高度/2)-(窗口高度/2);
//this.Width=System.Windows.SystemParameters.PrimaryScreenWidth;
//this.Height=System.Windows.SystemParameters.PrimaryScreenHeight;
//这个.Topmost=true;
如果(!IsVisible)
{
Show();
}
if(WindowState==WindowState.Minimized)
{
WindowState=WindowState.Normal;
}
激活();
Topmost=true;//重要
Topmost=false;//重要
Focus();//重要
}
}
}
试试这个
private KeyboardFilter kbFilter;
private void MainForm_Activated(object sender, EventArgs e)
{
kbFilter = new KeyboardFilter(new Keys[]
{
Keys.LWin | Keys.D,
Keys.RWin | Keys.D,
Keys.LWin | Keys.X, // if you need
Keys.RWin | Keys.X, // if you need
Keys.Alt | Keys.F4 // if you need
});
}
private void MainForm_Deactivate(object sender, EventArgs e)
{
kbFilter.Dispose();
}
确保在main表单\u Deactivate
事件中使用KeyboardFilter.Dispose()
KeyboardFilter
类取自
请尝试以下代码:
[DllImport("user32.dll")]
static extern bool SetWindowPos(
IntPtr hWnd,
IntPtr hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
uint uFlags);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
static void SendWpfWindowBack(Window window)
{
var hWnd = new WindowInteropHelper(window).Handle;
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
}
资料来源:
编辑:
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
SendWpfWindowBack(Application.Current.MainWindow);
}
Loaded="MainWindow_OnLoaded"
对不起。您必须处理主窗口的已加载事件并将其发送回。
试试这个:
代码隐藏:
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
SendWpfWindowBack(Application.Current.MainWindow);
}
Loaded="MainWindow_OnLoaded"
Xaml:
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
SendWpfWindowBack(Application.Current.MainWindow);
}
Loaded="MainWindow_OnLoaded"
仍然按Win+D将隐藏它。但它与您的要求有些相似。
如果你想让你的员工永久地看到一个特定的消息,试着考虑使用壁纸。您可以为每个人设置相同的墙纸,并禁止员工更改墙纸。谢谢。我得到一个“找不到名称键”。我想这是因为我使用WPF而不是Windows窗体?谢谢。我尝试了类似的方法,但是我不确定如何在InitialiseComponents()之后调用SendWpfWindowBack方法;。你能建议吗?这样做:
sendwpfindowback(这个)代码>在InitialiseComponents()中,我仍然可以使用Windows键+D将其完全最小化。而且,第一次跑步时它不会直接跑到后面。(在Visual Studio上显示)。有什么想法吗?我想你的要求和我想象的有点不同。为窗口设置这些属性,并检查是否有任何更新WindowStyle=“None”ResizeMode=“NoResize”ShowInTaskbar=“False”Topmost=“False”WindowStartupLocation=“CenterScreen”
我已经设置了所有这些。当我运行应用程序时,屏幕上会立即向用户显示消息。它需要回到只在桌面图像上,并保持在那里。示例如下: