Я отвечаю за себя ответ, который я наконец-то узнал с помощью советов и ссылок, размещенных здесь.
private const uint GET_ITEM_COUNT = 0x1000 + 4;
[DllImport("user32.DLL")]
private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.DLL")]
private static extern IntPtr FindWindow(string lpszClass, string lpszWindow);
[DllImport("user32.DLL")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter,
string lpszClass, string lpszWindow);
public static int GetDesktopCount()
{
//Get the handle of the desktop listview
IntPtr vHandle = FindWindow("Progman", "Program Manager");
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "SHELLDLL_DefView", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "SysListView32", "FolderView");
//Get total count of the icons on the desktop
int vItemCount = SendMessage(vHandle, GET_ITEM_COUNT, 0, 0);
return vItemCount;
}
Есть одна интересная (довольно раздражающая!) Вещь, которую я тем временем изучил. Рабочий стол, который вы видите на экране, отличается от вида папки на рабочем столе. Даже если вы снимите флажок «Мой компьютер» и «Мой документ» на рабочем столе (рабочий стол, который вы видите на мониторе), эти значки все еще могут присутствовать в представлении папок на рабочем столе. Я попробовал решение, приведенное в этой ссылке , но оно дает количество элементов, представленных в представлении папки. Решение, которое я разместил выше, даст идеальный результат, который я хочу. Решение было получено от здесь , Zhi-Xin Ye. Спасибо @ C.Evenhuis за подсказку.