2015-09-07 62 views
2

我使用以下程序隱藏/顯示使用c#的桌面項目。它工作正常。隱藏/顯示桌面使用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

您可以在Form1類中存儲內部狀態,例如某些布爾屬性。 如果你點擊顯示按鈕和布爾屬性表明,你的項目已經顯示 - 什麼都不做,否則ToggleDesktopIcons。隱藏按鈕也一樣。

0

請參閱this question中的答案。

答案包含一個IsVisible方法,允許您查看圖標是隱藏還是顯示。

在顯示按鈕中:調用IsVisible,如果返回false,則執行ToggleDesktopIcons,否則返回。

在隱藏按鈕中:調用IsVisible,如果返回true,則執行ToggleDesktopIcons,否則返回。

您也可以使用調用IsVisible的結果來決定是否要啓用/禁用顯示和隱藏按鈕。