如何在使用c#
显示桌面/最小化所有/所有窗口时通知我的应用程序答案 0 :(得分:2)
以下内容可能会帮助您入门。这只是一个带有ListBox的标准表单(名为listMessages)。当我执行桌面最小化/ showall时,表单捕获WM_SIZE消息并将Message m值输出到ListBox。您的表单可能无法响应典型的最小化和最大化事件,但它应该从Windows消息泵接收这些消息。至于检测是否有任何其他窗口显示更多涉及但也可以完成....
using System;
using System.Windows.Forms;
namespace MinimizeAll
{
public partial class Form1 : Form
{
private const int WmSize = 5;
private const int SizeRestored = 0;
private const int SizeMinimized = 1;
private const int SizeMaximized = 2;
private const int SizeShow = 3;
private const int SizeHide = 4;
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
try
{
if (m.Msg == WmSize)
{
var wparam = m.WParam.ToInt32();
switch (wparam)
{
case SizeRestored:
case SizeMinimized:
case SizeMaximized:
case SizeShow:
case SizeHide:
var output = string.Format("{0}{1:X} {2:X} {3:X} {4:X} {5:X}", prefix, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32(), m.HWnd.ToInt32(), m.Result.ToInt32());
listMessages.Items.Add(output);
break;
default:
// this is just a demo (code police)...
base.WndProc(ref m);
return;
}
}
else
{
base.WndProc(ref m);
}
}
catch (Exception)
{
listMessages.Items.Add("err");
base.WndProc(ref m);
}
}
}
}
答案 1 :(得分:1)
我完全同意Ian Boyd的评论。您决不应该试图规避已定义的系统行为。但是,为了遵守已定义的系统行为并且仍然(可能)获得您正在寻找的内容,您可能希望使用appbars作为您不希望隐藏的主窗口。 appbar就像任务栏一样,除了全屏应用程序运行之外,它始终可见。
答案 2 :(得分:1)
在COM中添加txtPersonName.CharacterCasing = CharacterCasing.Upper;
....;
的引用
使用Microsoft Shell Controls And Automation
代码:
Namespace Shell32
调用所需状态的s32对象..
答案 3 :(得分:0)
所以...为了最小化所有窗口,您可以使用以下内容:
向您的项目添加“Microsoft Shell控件和自动化”COM参考(References => Add => COM)。
然后执行以下操作:
Shell32.ShellClass shell = new Shell32.ShellClass();
shell.MinimizeAll(); // can also do: shell.UndoMinimizeAll();
或与后期绑定:
Object shell;
shell = CreateObject("Shell.Application");
shell.MinimizeAll();
现在我不确定您是否可以使用此COM的某些事件(如AllMinimized)......
为了防止WinForm应用程序最小化(通过最小化按钮):
void Form1_Resize(object sender, System.EventArgs e) // Handles Form1.Resize
{
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
}
你也可以看看这里: http://pinvoke.net/default.aspx/user32.EnumDesktopWindows
答案 4 :(得分:0)
为了让您的应用程序知道它何时被最小化(桌面/最小化所有/所有窗口最小化的最可能事件,您需要检查
this.WindowState
应用程序当前表单的属性。如果它被最小化,那么它应该等于
FormWindowState.Minimized
编辑: 试试这个:
foreach (Process proc in Process.GetProcesses())
{
/// check proc.StartInfo.ProcessWindowStyle here
/// it Gets window state to use when the process is started.
}
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_properties.aspx