Реально ли получить иконку из ресурсов Windows по типу объекта из DirectoryEntry?
В dsuiext.dll есть функция DsGetIcon, которая по имени класса объекта LDAP вернет иконку для него. Для DirectoryEntry класс объекта находится в свойстве objectclass:
[Flags]
enum IconType : uint
{
DSGIF_ISNORMAL = 0x0000000,
DSGIF_ISOPEN = 0x0000001,
DSGIF_ISDISABLED = 0x0000002,
DSGIF_ISMASK = 0x000000f,
DSGIF_GETDEFAULTICON = 0x0000010,
DSGIF_DEFAULTISCONTAINER = 0x0000020
}
[DllImport("dsuiext.dll", CharSet = CharSet.Unicode)]
static extern IntPtr DsGetIcon(IconType dwFlags, string pszObjectClass, int cxImage, int cyImage);
[DllImport("user32.dll")]
static extern bool DestroyIcon(IntPtr hIcon);
private void Form1_Load(object sender, EventArgs e)
{
var entry = new DirectoryEntry("LDAP://DC=mydomain,DC=local");
var searcher = new DirectorySearcher(entry)
{
PageSize = int.MaxValue,
Filter = "<какой-то фильтр>"
};
var result = searcher.FindOne();
var objectClass = result.Properties["objectclass"][0].ToString();
var icon = DsGetIcon(IconType.DSGIF_ISNORMAL, objectClass, 32, 32);
if (icon != IntPtr.Zero) {
using (var img = Icon.FromHandle(icon)) {
pictureBox1.Image = img.ToBitmap();
}
DestroyIcon(icon);
}
}
Не для всех значений свойства objectclass функция что-то возвращает. Однако, в dsuiext.dll можно найти строки, которые работают (без учета регистра):
builtInDomain
computer
configuration
rpcContainer
contact
container
domainDNS
domainPolicy
group
localGroup
localPolicy
nTDSConnection
nTDSDSA
nTDSSettings
organizationalPerson
organizationalUnit
person
printQueue
remoteMailRecipient
server
serverConnection
site
sitesContainer
storage
subnet
subnetContainer
user
volume
workStationAccount
licensingSiteSettings
nTDSSiteSettings
siteLink
siteLinkBridge
nTFRSSettings
nTFRSReplicaSet
nTFRSSubscriptions
nTFRSSubscriber
nTFRSMember
foreignSecurityPrincipal
interSiteTransport
interSiteTransportContainer
serversContainer
inetOrgPerson
msDS-ManagedServiceAccount
msDS-GroupManagedServiceAccount
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости