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

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

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

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

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

View Code
 1 using System;
2 using System.Windows.Forms;
3 using System.Runtime.InteropServices;
4
5 namespace demo
6 {
7 public partial class Form1 : Form
8 {
9 public Form1()
10 {
11 InitializeComponent();
12 }
13
14 [DllImport("user32.dll", EntryPoint = "FindWindow")]
15 public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
16
17 [DllImport("user32.dll")]
18 public static extern int ShowWindow(IntPtr hwnd, int show);
19
20 [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
21 public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
22
23
24
25 const int SW_SHOW = 5 ;//显示
26 const int SW_HIDE = 0;//隐藏
27
28 private void Form1_Load(object sender, EventArgs e)
29 {
30 IntPtr taskbar = FindWindow("Shell_TrayWnd", null);
31 IntPtr start = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Button", null);
32 ShowWindow(taskbar, SW_HIDE);
33 ShowWindow(start, SW_HIDE);
34
35 }
36 }
37 }



posted @ 2011-09-23 16:50  jewely  阅读(1614)  评论(0编辑  收藏  举报