узнать ФИО пользователя
Подскажите, как узнать ФИО пользователя, который зашел в систему? Мне нужно из программы печатать отчет - хотелось бы туда подставлять ФИО пользователя, если удалось определить.
Нашел как определить учетку пользователя - типа "Ivanov", а нужно ФИО, соответствующее данной учетке - то есть "Иванова Иван". Иными словами - нужен display name. Речь идет о доменной учетке Windows.
Подскажите, как это сделать?
например через ADSI, IADsUser
А примерчик можно ?
В сети есть примеры работы с такими объектами
А можете дать линк на пример на билдере - как select сделать к AD.
Делаю так:
Код:
SELECT distinguishedName, displayName FROM "LDAP://DC=mydomain,DC=local" subtree scope
Не работает.
К AD подключаюсь через ADsDSOObject Provider.
Цитата: needjava
А можете дать линк на пример на билдере
ну хорошо, не могу
Цитата: needjava
- как select сделать к AD.
К AD подключаюсь через ADsDSOObject Provider.
я вам привел интерфейсы доступа к конкретному объекту по конкретной технологии ADSI. Про ADsDSOObjectProvider и дата-сервис провйдеры я ничего не говорил
Код:
#pragma comment(lib, "Secur32")//в bcb наверно #pragma link Secur32.lib
#define SECURITY_WIN32//еррор дефайненый в Security.h : you must define blah-blah SECURITY_WIN32, SECURITY_ещёчетотам, SECURITY_третий_вариант
#include <Security.h>//тут объявлен GetUserNameEx
//формат такой: bool GetUserNameEx(http://msdn.microsoft.com/en-us/library/ms724268%28v=vs.85%29.aspx,wchar_t* результат,&int размер)
//дальше код примера из MSVSC++:
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
TCHAR* envVarStrings[] =
{
TEXT("OS = %OS%"),
TEXT("PATH = %PATH%"),
TEXT("HOMEPATH = %HOMEPATH%"),
TEXT("TEMP = %TEMP%")
};
#define ENV_VAR_STRING_COUNT (sizeof(envVarStrings)/sizeof(TCHAR*))
#define INFO_BUFFER_SIZE 32767
void printError( TCHAR* msg );
void main( )
{
DWORD i;
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD bufCharCount = INFO_BUFFER_SIZE;
// Get and display the name of the computer.
bufCharCount = INFO_BUFFER_SIZE;
if( !GetComputerName( infoBuf, &bufCharCount ) )
printError( TEXT("GetComputerName") );
_tprintf( TEXT("\nComputer name: %s"), infoBuf );
// Get and display the user name.
bufCharCount = INFO_BUFFER_SIZE;
if( !GetUserName( infoBuf, &bufCharCount ) )
printError( TEXT("GetUserName") );
_tprintf( TEXT("\nUser name: %s"), infoBuf );
if( !GetUserNameEx(NameDisplay,infoBuf, &bufCharCount ) )
printError( TEXT("GetUserNameEx") );
_tprintf( TEXT("\nUser display: %s"), infoBuf );
// Get and display the system directory.
if( !GetSystemDirectory( infoBuf, INFO_BUFFER_SIZE ) )
printError( TEXT("GetSystemDirectory") );
_tprintf( TEXT("\nSystem Directory: %s"), infoBuf );
// Get and display the Windows directory.
if( !GetWindowsDirectory( infoBuf, INFO_BUFFER_SIZE ) )
printError( TEXT("GetWindowsDirectory") );
_tprintf( TEXT("\nWindows Directory: %s"), infoBuf );
// Expand and display a few environment variables.
_tprintf( TEXT("\n\nSmall selection of Environment Variables:") );
for( i = 0; i < ENV_VAR_STRING_COUNT; ++i )
{
bufCharCount = ExpandEnvironmentStrings(envVarStrings, infoBuf,
INFO_BUFFER_SIZE );
if( bufCharCount > INFO_BUFFER_SIZE )
_tprintf( TEXT("\n\t(Buffer too small to expand: \"%s\")"),
envVarStrings );
else if( !bufCharCount )
printError( TEXT("ExpandEnvironmentStrings") );
else
_tprintf( TEXT("\n %s"), infoBuf );
}
_tprintf( TEXT("\n\n"));
}
void printError( TCHAR* msg )
{
DWORD eNum;
TCHAR sysMsg[256];
TCHAR* p;
eNum = GetLastError( );
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, eNum,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
sysMsg, 256, NULL );
// Trim the end of the line and terminate it with a null
p = sysMsg;
while( ( *p > 31 ) || ( *p == 9 ) )
++p;
do { *p-- = 0; } while( ( p >= sysMsg ) &&
( ( *p == '.' ) || ( *p < 33 ) ) );
// Display the message
_tprintf( TEXT("\n\t%s failed with error %d (%s)"), msg, eNum, sysMsg );
}
#define SECURITY_WIN32//еррор дефайненый в Security.h : you must define blah-blah SECURITY_WIN32, SECURITY_ещёчетотам, SECURITY_третий_вариант
#include <Security.h>//тут объявлен GetUserNameEx
//формат такой: bool GetUserNameEx(http://msdn.microsoft.com/en-us/library/ms724268%28v=vs.85%29.aspx,wchar_t* результат,&int размер)
//дальше код примера из MSVSC++:
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
TCHAR* envVarStrings[] =
{
TEXT("OS = %OS%"),
TEXT("PATH = %PATH%"),
TEXT("HOMEPATH = %HOMEPATH%"),
TEXT("TEMP = %TEMP%")
};
#define ENV_VAR_STRING_COUNT (sizeof(envVarStrings)/sizeof(TCHAR*))
#define INFO_BUFFER_SIZE 32767
void printError( TCHAR* msg );
void main( )
{
DWORD i;
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD bufCharCount = INFO_BUFFER_SIZE;
// Get and display the name of the computer.
bufCharCount = INFO_BUFFER_SIZE;
if( !GetComputerName( infoBuf, &bufCharCount ) )
printError( TEXT("GetComputerName") );
_tprintf( TEXT("\nComputer name: %s"), infoBuf );
// Get and display the user name.
bufCharCount = INFO_BUFFER_SIZE;
if( !GetUserName( infoBuf, &bufCharCount ) )
printError( TEXT("GetUserName") );
_tprintf( TEXT("\nUser name: %s"), infoBuf );
if( !GetUserNameEx(NameDisplay,infoBuf, &bufCharCount ) )
printError( TEXT("GetUserNameEx") );
_tprintf( TEXT("\nUser display: %s"), infoBuf );
// Get and display the system directory.
if( !GetSystemDirectory( infoBuf, INFO_BUFFER_SIZE ) )
printError( TEXT("GetSystemDirectory") );
_tprintf( TEXT("\nSystem Directory: %s"), infoBuf );
// Get and display the Windows directory.
if( !GetWindowsDirectory( infoBuf, INFO_BUFFER_SIZE ) )
printError( TEXT("GetWindowsDirectory") );
_tprintf( TEXT("\nWindows Directory: %s"), infoBuf );
// Expand and display a few environment variables.
_tprintf( TEXT("\n\nSmall selection of Environment Variables:") );
for( i = 0; i < ENV_VAR_STRING_COUNT; ++i )
{
bufCharCount = ExpandEnvironmentStrings(envVarStrings, infoBuf,
INFO_BUFFER_SIZE );
if( bufCharCount > INFO_BUFFER_SIZE )
_tprintf( TEXT("\n\t(Buffer too small to expand: \"%s\")"),
envVarStrings );
else if( !bufCharCount )
printError( TEXT("ExpandEnvironmentStrings") );
else
_tprintf( TEXT("\n %s"), infoBuf );
}
_tprintf( TEXT("\n\n"));
}
void printError( TCHAR* msg )
{
DWORD eNum;
TCHAR sysMsg[256];
TCHAR* p;
eNum = GetLastError( );
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, eNum,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
sysMsg, 256, NULL );
// Trim the end of the line and terminate it with a null
p = sysMsg;
while( ( *p > 31 ) || ( *p == 9 ) )
++p;
do { *p-- = 0; } while( ( p >= sysMsg ) &&
( ( *p == '.' ) || ( *p < 33 ) ) );
// Display the message
_tprintf( TEXT("\n\t%s failed with error %d (%s)"), msg, eNum, sysMsg );
}