2011-06-19 20 views

答えて

18

Windows APIを使用してこれを行うことができます。ここでは、デスクトップアイコンを切り替えるC#のサンプルコードを示します。

[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); 
    } 

これはそれの(WS_VISIBLEスタイルを追加または削除して)表示を切り替えるためにそれを伝えるPROGMANのSHELLDLL_DefView子ウィンドウへのメッセージは、一人っ子、「FolderView」です送信します。 "FolderView"はアイコンを含む実際のウィンドウです。以下のアイコンが表示されているかいないならば、あなたはGetWindowInfo機能を使って、WS_VISIBLEスタイルを照会することができますかをテストするには

、:ここで

[return: MarshalAs(UnmanagedType.Bool)] 
    [DllImport("user32.dll", SetLastError = true)] 
    private static extern bool GetWindowInfo(IntPtr hwnd, ref WINDOWINFO pwi); 

    [StructLayout(LayoutKind.Sequential)] 
    public struct RECT 
    { 
     private int _Left; 
     private int _Top; 
     private int _Right; 
     private int _Bottom; 
    } 

    [StructLayout(LayoutKind.Sequential)] 
    struct WINDOWINFO 
    { 
     public uint cbSize; 
     public RECT rcWindow; 
     public RECT rcClient; 
     public uint dwStyle; 
     public uint dwExStyle; 
     public uint dwWindowStatus; 
     public uint cxWindowBorders; 
     public uint cyWindowBorders; 
     public ushort atomWindowType; 
     public ushort wCreatorVersion; 

     public WINDOWINFO(Boolean? filler) 
      : this() // Allows automatic initialization of "cbSize" with "new WINDOWINFO(null/true/false)". 
     { 
      cbSize = (UInt32)(Marshal.SizeOf(typeof(WINDOWINFO))); 
     } 

    } 

は上記のコードを呼び出し、真を返す関数でありますウィンドウが表示されている場合はfalse、そうでない場合はfalseです。

static bool IsVisible() 
    { 
     IntPtr hWnd = GetWindow(GetWindow(FindWindow("Progman", "Program Manager"), GetWindow_Cmd.GW_CHILD), GetWindow_Cmd.GW_CHILD); 
     WINDOWINFO info = new WINDOWINFO(); 
     info.cbSize = (uint)Marshal.SizeOf(info); 
     GetWindowInfo(hWnd, ref info); 
     return (info.dwStyle & 0x10000000) == 0x10000000; 
    } 

ウィンドウスタイルについての詳細情報とともに、WindowsのAPIコードはここで見つけることができます:http://www.pinvoke.net/default.aspx/user32/GetWindowInfo.html

+2

驚くばかりですが、今から私のすべてのアプリにそれを入れてランダムに切り替えます。 :) – Gleno

+0

それは私のコンピュータで動作していないようです...私は窓7を使用しています。このOSは依存していますか?すべてのバージョンのWindowsで動作するはずですか?そうであれば、私はWindowsの複数のバージョンで動作する別のソリューションを探しています... – Tibi

+0

アップデート:それは動作します、明らかに私はexplorer.exeを再起動しなければなりませんでしたが、今は動作します。どうもありがとうございました。別の質問...それがオンであるかオフであるかをどのように知ることができますか? – Tibi

1

フルスクリーンビューアプリケーションを作成し、一番上のウィンドウにすることができます。

次に、アプリケーションをWindowsで起動するようにします。

+2

私はそれを一番上にする場合は、タスクバーを除き、それは全く逆である必要があります...他のすべてのアプリケーションの上に一番下のウィンドウになります。 – Tibi

0

あなたはこのことについて間違った道を進んでいます。あなたが本当にやろうとしているのは、シェルを置き換えることです。 Windowsはこれを提供しているので、それを利用するだけです。エクスプローラを置き換える独自のシェルを作成します。

+1

私はシェルだけを置き換えるつもりはありません。退屈なアイコンを持つ代わりに、私は素敵なウィジェットを持っていきます。 – Tibi

0

あなたは1

static void HideIcons() 
    { 
     RegistryKey myKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", true); 
     if (myKey != null) 
     { 
      myKey.SetValue("HideIcons", 1); 
      myKey.Close(); 
     } 
    } 

にマイクロソフト\ Windowsの\ CurrentVersionの\ Explorerの\詳細 変更HideIcons \ RegEditを HKEY_CURRENT_USER \ソフトウェアでこれを行うことができ、ここで説明するようにレジストリクラスを使用します。

http://msdn.microsoft.com/en-us/library/microsoft.win32.registry.aspx

関連する問題