您的位置:首页 > 其它

xp和win7下"开始"菜单的区别及隐藏显示

2011-09-23 16:50 120 查看
项目中程序都是全屏显示,在任务栏总显示在最前面,最先想到办法是任务栏自动隐藏,可在程序操作过程中任务栏经常跑出来,所以想把它彻底隐藏掉。通过api就可以解决了(我机器是xp),但拿到测试机(win7)下运行,任务栏是隐藏了,不足的是"开始"这个按钮还是显示的。

用spy++反复查看比对,我得出如下结论:

任务栏就像一个容器,里面有子容器,子容器里面又有子窗口,最后到单一个体。比较形象化的就是路过的树倒过来看。在xp下"开始"是作为任务栏子窗口存在的,隐藏任务栏后自己包括子子孙孙自然都隐藏了。可在win7下"开始"是相对任务栏独立存在的,也就是它们是一个级别的,所以隐藏任务栏,"开始"还在那显示着。

知道这些就好办了,下面是完美隐藏显示解决办法。

View Code

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

namespace demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

[DllImport("user32.dll", EntryPoint = "FindWindow")]
public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
public static extern int ShowWindow(IntPtr hwnd, int show);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);

const int SW_SHOW = 5 ;//显示
const int SW_HIDE = 0;//隐藏

private void Form1_Load(object sender, EventArgs e)
{
IntPtr taskbar = FindWindow("Shell_TrayWnd", null);
IntPtr start = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Button", null);
ShowWindow(taskbar, SW_HIDE);
ShowWindow(start, SW_HIDE);

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: