Но для 9х это не проходит. Есть ли какой нибудь универсальный способ или надо для каждого «типа» операционки писать свою процедуру?
The GetComputerName function retrieves the computer name of the current system. This name is established at system startup, when it is initialized from the registry.
LPTSTR lpBuffer,// address of name buffer LPDWORD nSize // address of size of name buffer );
The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system.
LPTSTR lpBuffer,// address of name buffer LPDWORD nSize // address of size of name buffer );
Например :
function GetCompName: String; var Buffer: array[0..Pred(MAX_COMPUTERNAME_LENGTH+1)] of Char; Size: cardinal; begin Size := SizeOf(Buffer); Windows.GetComputerName(Buffer, Size); Result := Buffer; end;
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Функции то эти (GetComputerName и GetUserName) раздельно работают замечательно, но при использовании вместе срабатывает только первая. почему — так и не понял. А еще к этому вопросу — где-то я не так давно на каком-то форуме видел использование какой-то системной функции, которая возвращает полное имя компьютера (вместе с доменом). Не записал тогда — и теперь очень жалею. Использовать реестр нельзя — с программой будут работать обычные пользователи, которые не будут иметь к нему доступа. И использовать разные навороченные способы тоже не хочу — программа должна быть как можно меньше (компрессоры тут не причем), поэтому подключать разные модули и писать (а сначала разбираться) самому функции не хочу — ведь есть простой способ — тот самый! Может кто его знает? А может еще кто знает почему вышеупомянутые функции не работают (точнее работают но частично) вместе?
Всего записей: 1 | Зарегистр. 21-09-2011 | Отправлено:10:15 21-09-2011
rrromano
Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Описание: function GetComputerName(lpBuffer: PChar; var nSize: DWORD): BOOL;
Функция возвращает имя NetBIOS локального компьютера. Это имя устанавливается ппри запуске системы и читается из реестра. Если локальный компьютер является узлом(нодой) в кластере(группе), то возвращается имя виртуального сервера кластера. Win 2000/XP: GetComputerName возвращает только имя NetBIOS локального компьютера. Для того, чтобы получить имя хоста DNS, имя домена DNS или полное подтвержденное имя DNS, вызовите функцию GetComputerNameEx. Для получения дополнительной информации см. интерфейс IADsADSystemInfo.
Параметры: lpBuffer: Буфер строки который плучает имя компьютера или имя сервера кластера. Размер буфера должен быть равен MAX_COMPUTERNAME_LENGTH + 1 символов.
nSize: Определяет размер буфера, в символах. Если размера буфера не хватает, то функция терпит неудачу и в GetLastError возвращает ERROR_MORE_DATA. Параметр определяет размер буфера, не включая завершающий нулевой символ. Win 95\98\Me: GetComputerName терпит неудачу если размер буфера мене чем MAX_COMPUTERNAME_LENGTH + 1.
Возвращаемые значения Если функция добивается успеха, то возвращаемое значения True. Если функция терпит неудачу, то False. Чтобы получить расширенную информацию об ошибке, вызовите функцию GetLastError.
Замечания Функция возвращает имя NetBIOS установленное при запуске системы, поэтому изменения имени функциями SetComputerName или SetComputerNameEx вступают в силу только после перезапуска системы(компьютера).
Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено:10:38 21-09-2011
А еще к этому вопросу — где-то я не так давно на каком-то форуме видел использование какой-то системной функции, которая возвращает полное имя компьютера (вместе с доменом). Не записал тогда — и теперь очень жалею.
Получить FQDN имя компа позволяет GetComputerNameEx.
Что касается одновременной работы GetComputerName(Ex) и GetUserName, то надо внимательнее быть: каждая из функций после своего выполнения возвращает через параметр nSize длину записаной строки в буфер при успешном вызове и необходимую длину буфера при неудачном вызове. Т.к. имя пользователя видимо короче имени компа, то и не проходит второй вызов.
Как получить домен и имя пользователя (UserName) процесса?
Как получить домен и имя пользователя (UserName) процесса?
function GetUserAndDomainFromPID(ProcessId: DWORD;
function GetCurrentUserName ( var CurrentUserName: string ) : Boolean ; var BufferSize: DWORD ; pUser: PChar ; begin BufferSize := 0 ; GetUserName ( nil , BufferSize ) ; pUser := StrAlloc ( BufferSize ) ; try Result := GetUserName ( pUser, BufferSize ) ; CurrentUserName := StrPas ( pUser ) ; finally StrDispose ( pUser ) ; end ; end ; procedure TForm1. Button1Click ( Sender: TObject ) ; var CurrentUserName: string ; begin GetCurrentUserName ( CurrentUserName ) ; Label1. Caption := CurrentUserName; end ; <*********************************************> < Windows NT/2000/XP: The GetUserNameEx function retrieves the name of the user or other security principal associated with the calling thread. You can specify the format of the returned name. If the thread is impersonating a client, GetUserNameEx returns the name of the client. > const NameUnknown = 0 ; // Unknown name type. NameFullyQualifiedDN = 1 ; // Fully qualified distinguished name NameSamCompatible = 2 ; // Windows NT® 4.0 account name NameDisplay = 3 ; // A «friendly» display name NameUniqueId = 6 ; // GUID string that the IIDFromString function returns NameCanonical = 7 ; // Complete canonical name NameUserPrincipal = 8 ; // User principal name NameCanonicalEx = 9 ; NameServicePrincipal = 10 ; // Generalized service principal name DNSDomainName = 11 ; // DNS domain name, plus the user name