隐藏开始按钮和桌面(玩转 Spy++)






2.32/5 (15投票s)
2007 年 9 月 7 日
3分钟阅读

42196

1526
使用此应用程序,您可以隐藏开始按钮、系统时钟、快速启动等。您还可以更改开始按钮上的文字。
引言
我写这篇文章是为刚开始使用 VC++ 编程的初学者程序员准备的。他们中的大多数人并不知道 VC++ 自带的工具。我知道,因为我也是这里的新手(只有 3 个月),以前也不知道这些工具。
我将向您展示 Spy++(工具)的一点点用法,以及我们如何用它来获得乐趣。我使用此工具来获取开始按钮和桌面的句柄。
使用我的应用程序,您将能够执行以下操作。
- 隐藏/显示开始按钮
- 隐藏/显示系统时钟
- 隐藏/显示快速启动
- 隐藏/显示托盘图标
- 隐藏/显示桌面以及更多...
- 更改开始按钮的标题(仅限 Win Xp,在 Win2000 中不起作用)
背景
我使用了 Win32 API 中的两个函数。它们如下所示。如果您不了解它们,请在 MSDN 中查看帮助
- FindWindow()
- FindWindowEx().
使用 Spy++
如果您非常了解 SPy++,您可以直接跳到下一个主题。
Spy++ 是 Visual Studio 自带的工具之一。所以如果您还没有见过它,请启动您的 Visual Stdio 并从 **工具** 菜单打开 Spy++。
它是一个非常好的工具,通过它可以检索当前运行的任何窗口的信息。信息包括窗口的句柄、其下一个和父窗口的句柄、它的样式、类名、进程 Id 等。
我正在使用 spy++ 来检索开始按钮、快速启动、系统时钟等的句柄...
在这里,我将向您展示如何使用该工具来查找当前运行的任何窗口或控件的句柄。
例如,假设您必须找到开始按钮(控件)的句柄。实际上,我们可以直接在 Spy++ 中查看开始按钮的句柄,但我们不能使用它,因为它是一个数字。但是我们可以使用它的类名和我上面提到的函数来检索它的句柄。以下是您可以执行的操作,以检索开始按钮的句柄。
我们都知道,要检索任何控件的句柄,我们需要拥有其父窗口的句柄。但是我们如何知道哪个是开始按钮的父窗口?很简单!使用 Spy++。 打开 Spy++ 并打开查找(仅查找,不是查找窗口)。然后将查找器拖到开始按钮上并按确定。按下确定后,您将被定向到树列表视图。在那里您将能够找到哪个是开始按钮的父级。它将是 **Shell_TrayWnd.** 现在右键单击 Shell_TrayWnd 并打开属性。在那里您会找到它的类名。 使用该类名和函数FindWindow()
来查找 **Shell_TrayWnd** 的句柄 然后,在函数FindWindowEx()
中使用上面的句柄、**开始按钮** 的类名来检索开始按钮的句柄。
使用代码
在这里,我希望您能够使用 Spy++。 如果不能,请阅读前一个主题。
以下代码行将检索开始按钮的句柄,该句柄是 Shell_TrayWnd 下的控件。我已经使用 Spy++ 检索了开始按钮及其父窗口的类名。
HWND hStart,hTray; //Handle for Tray Window and Start Button //This will retrieve the handle of Tray Window from its class name hTray = ::FindWindow(L"Shell_TrayWnd", NULL); if(hTray) { //This will retrieve the Handle of Start Button using the above // handle and class name of start Button. hStart = ::FindWindowEx( hTray, NULL, L"Button", NULL); }
以下是我用来隐藏开始按钮和更改其文本(标题)的代码行。
ShowWindow(hStart,FALSE);//To Hide Start Button
ShowWindow(hTray,TRUE); //To Show Start Button back
//Below lines of code is to Change the Caption of Start Button
WCHAR Text[10];
To retrieve the Text from Edit Box
GetDlgItemText(hWndDlg,IDC_StartTxt,Text,10);
//Will set the text of Start Button
//Not Working in Win2000. but Working in WinXp.
SendMessage(hStart,WM_SETTEXT,0,(LPARAM)Text);
您甚至可以直接使用句柄
提交文章后,我了解到您甚至可以直接使用您使用 Spy++ 找到的句柄。
例如,当您查找开始按钮的句柄时,它看起来像这样 00020048。这是一个十六进制值。您可以使用以下代码行将其分配给 HWND。
HWND hStart = (HWND)0x00020048; // Will assign the handle ShowWindow(hStart,FALSE); //To Hide the Window; ShowWindow(hStart,TRUE);//To Show Window nack;
感谢您阅读本文。这是我提交给 Code Project 的第二篇文章。所以请告诉我我如何解释这篇文章,您对此有何看法。如果您喜欢它,请投票支持它。