Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Имя компьютера и имя пользователя в Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Rodion

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как в Delphi, не использую дополнительных компонент, определить имя компьютера, на котором работает прога и имя пользователя который вошел в систему? Причем для NT я вроде разобрасля:
---
procedure TForm1.envvar();
var aCompNameBuf:array[0..MAX_PATH] of char;
aUserNameBuf:array[0..MAX_PATH] of char;
begin
  GetEnvironmentVariable('COMPUTERNAME',aCompNameBuf,MAX_PATH);
  GetEnvironmentVariable('USERNAME',aUserNameBuf,MAX_PATH);
end;
---
Но для 9х это не проходит!!! Есть ли какой нибудь универсальный способ или надо для каждого "типа" операционки писать свою процедуру?
 
Заранее спасибо и сорри за "чайниковский" вопрос!!!

----------
С уважением,
Родион.

Всего записей: 312 | Зарегистр. 21-02-2002 | Отправлено: 14:03 10-01-2003
Bonch



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rodion

Цитата:
Но для 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.  
 
BOOL GetComputerName(
 
    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.  
 
BOOL GetUserName(
 
    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;

Всего записей: 2016 | Зарегистр. 17-07-2001 | Отправлено: 15:49 10-01-2003 | Исправлено: Bonch, 15:53 10-01-2003
eumasolutions

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функции то эти (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
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eumasolutions

Цитата:
А еще к этому вопросу - где-то я не так давно на каком-то форуме видел использование какой-то системной функции, которая возвращает полное имя компьютера (вместе с доменом). Не записал тогда - и теперь очень жалею.

Получить FQDN имя компа позволяет GetComputerNameEx.
 
Что касается одновременной работы GetComputerName(Ex) и GetUserName, то надо внимательнее быть: каждая из функций после своего выполнения возвращает через параметр nSize длину записаной строки в буфер при успешном вызове и необходимую длину буфера при неудачном вызове. Т.к. имя пользователя видимо короче имени компа, то и не проходит второй вызов.
 
Правильный вызов:

Код:
 
...
bSize := n;
GetUserName(UN, bSize);
bSize := n;
GetComputerName(UN, bSize);
...
 

 
Неправильный вызов:

Код:
 
...
bSize := n;
GetUserName(UN, bSize);
GetComputerName(UN, bSize);
...
 

Всего записей: 773 | Зарегистр. 18-05-2009 | Отправлено: 15:14 26-09-2011 | Исправлено: Eternal_Shield, 15:15 26-09-2011
rrromano



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal_Shield
Да-да, дьявол кроется в деталях )

Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 10:31 29-09-2011
romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А какой длины максимально может быть имя пользователя Windows ? Я тупо 256 симв. буфер указываю, но все же хочется сделать красиво

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 12:50 04-04-2013 | Исправлено: romano501, 12:50 04-04-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romano501
 
Ссылка.

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 16:45 04-04-2013
romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miwa
повтори пожалуйста ссылку только чтоб с русскими буквами было

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 18:57 04-04-2013
miwa

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romano501
А просто нажать что мешает? Думаешь, я туда че-то паскудное засунул?

Всего записей: 455 | Зарегистр. 10-10-2004 | Отправлено: 10:05 05-04-2013
romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так нажимал, а в поисковик попадает
ìàêñèìàëüíàÿ äëèíà èìåíè ïîëüçîâàòåëÿ windows

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 09:16 06-04-2013 | Исправлено: romano501, 09:16 06-04-2013
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romano501
С кодировкой у тебя проблемы, все нормально открывается.

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 08:57 16-04-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Имя компьютера и имя пользователя в Delphi


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru