आप विंडोज एपीआई का उपयोग कर ऐसा कर सकते हैं। यहां सी # में नमूना कोड है जो डेस्कटॉप आइकन टॉगल करेगा।
[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);
}
यह Progman की SHELLDLL_DefView चाइल्ड विंडो है, जो बताता है कि यह दृश्यता टॉगल करने के लिए इसके बारे में (जोड़ने या WS_VISIBLE शैली को हटाने के द्वारा) को संदेश भेजता है इकलौती संतान, "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)));
}
}
यहाँ एक समारोह है कि इसके बाद के संस्करण कोड कहता है और सच रिटर्न है अगर खिड़की दिखाई दे रही है, तो झूठ नहीं है।
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;
}
खिड़की शैलियों के बारे में अधिक जानकारी के साथ खिड़कियों एपीआई कोड यहां पाया जा सकता: http://www.pinvoke.net/default.aspx/user32/GetWindowInfo.html
बहुत बढ़िया, मैं अब से अपने सभी ऐप्स में इसे टॉगल करने के लिए जा रहा हूं() यह यादृच्छिक रूप से। :) – Gleno
यह मेरे कंप्यूटर पर काम नहीं कर रहा है ... मैं विंडोज 7 का उपयोग कर रहा हूं। क्या यह ओएस निर्भर है? क्या यह विंडोज़ के सभी संस्करणों पर काम करना चाहिए? यदि ऐसा है, तो मैं एक और समाधान की तलाश करूँगा जो विंडोज़ के कई संस्करणों पर काम करता है ... – Tibi
अद्यतन: यह काम करता है, जाहिर है, मुझे explorer.exe को पुनरारंभ करना पड़ा था, लेकिन अब यह काम करता है। आपका बहुत बहुत धन्यवाद। एक और सवाल ... मैं कैसे जान सकता हूं कि यह चालू है या नहीं? – Tibi