使用c#隐藏/显示桌面项

时间:2015-09-07 13:02:38

标签: c# desktop-application

我使用以下程序使用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个按钮。如果我按第一个按钮,我需要隐藏桌面项目。如果我按下第二个按钮,我需要显示桌面项目。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以在Form1类中存储内部状态,例如某些bool属性。 如果单击“显示”按钮并且bool属性指示,您的项目已经显示 - 什么都不做,否则ToggleDesktopIcons。隐藏按钮也一样。

答案 1 :(得分:0)

请参阅this question中的答案。

答案包含一个IsVisible方法,可让您查看图标是隐藏还是显示。

在show按钮中:调用IsVisible,如果返回false,则执行ToggleDesktopIcons,否则返回。

在隐藏按钮中:调用IsVisible,如果返回true,则执行ToggleDesktopIcons,否则返回。

您还可以使用调用IsVisible的结果来决定是否要启用/禁用显示和隐藏按钮。