我使用以下程序使用c#隐藏/显示桌面项目。它工作得很好。
public partial class Form1 : Form
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
enum GetWindow_Cmd : uint
{
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
private const int WM_COMMAND = 0x111;
static void ToggleDesktopIcons()
{
var toggleDesktopCommand = new IntPtr(0x7402);
IntPtr hWnd = GetWindow(FindWindow("Progman", "Program Manager"), GetWindow_Cmd.GW_CHILD);
SendMessage(hWnd, WM_COMMAND, toggleDesktopCommand, IntPtr.Zero);
}
public Form1()
{
InitializeComponent();
}
private void button1_Click_1(object sender, EventArgs e)
{
ToggleDesktopIcons();
}
}
但我的问题是我只有一个按钮。如果我按下按钮,隐藏和显示桌面项目将在同一个按钮上发生。
我需要分开那些节目和隐藏。这意味着我需要在表单中再创建一个按钮,所以我现在总共有2个按钮。如果我按第一个按钮,我需要隐藏桌面项目。如果我按下第二个按钮,我需要显示桌面项目。我怎么能这样做?
答案 0 :(得分:0)
您可以在Form1类中存储内部状态,例如某些bool属性。 如果单击“显示”按钮并且bool属性指示,您的项目已经显示 - 什么都不做,否则ToggleDesktopIcons。隐藏按钮也一样。
答案 1 :(得分:0)
请参阅this question中的答案。
答案包含一个IsVisible方法,可让您查看图标是隐藏还是显示。
在show按钮中:调用IsVisible,如果返回false,则执行ToggleDesktopIcons,否则返回。
在隐藏按钮中:调用IsVisible,如果返回true,则执行ToggleDesktopIcons,否则返回。
您还可以使用调用IsVisible的结果来决定是否要启用/禁用显示和隐藏按钮。