Идентификатор локальной сети, что это такое
Обновлено: 21.11.2024
Я хочу создать полузащищенный рабочий лист, который будет считывать идентификатор локальной сети пользователей, чтобы проверить, кто они. Есть ли способ в VBA получить идентификатор локальной сети? Или есть способ прочитать, какой будет папка «Мои документы» по умолчанию, поскольку она будет содержать идентификатор локальной сети в нашей системе. Я написал фрагмент кода, который считывает каталог по умолчанию из Excel и извлекает из него идентификатор локальной сети, но если бы кто-то переименовал свой каталог по умолчанию, это не сработало бы. Поэтому я хотел прочитать его из самой Windows.
Вот пример того, как я получил его из Excel:
путь будет выглядеть так:
"C:\Documents and Settings\LAN ID\My Documents"
код для извлечения идентификатора локальной сети выглядит следующим образом:
lan_ID=replace(replace(application.DefaultFilePath,"C:\Documents and Settings\","")","\My Documents","" )
Факты об Excel
ЛТунниклифф
Известный участник
Я мало что знаю об этом, кроме того, что это работает. Вы можете использовать его как константу в своем коде, на листе или в обоих случаях.
Надеюсь, это поможет!
Том Уртис
MrExcel MVP
В качестве альтернативы можно идентифицировать компьютер по чему-то, что труднее изменить. Код Лорена помогает определить имя компьютера, но оно назначается при загрузке Windows или Excel и может быть изменено. Что сложнее изменить и, на мой взгляд, надежнее проверить, так это часть самого оборудования, например серийный номер жесткого диска.
Эта функция вернет серийный номер жесткого диска C компьютера. Вы можете проверить номер в Workbook_Open и запретить доступ (например, это возможно с ограниченными мерами безопасности Excel).
Объявить функцию GetVolumeInformationA Lib "kernel32" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByValSystem lpFileSystemNameBuffer As String, ByVal nFile
Sub HDSerialNumber()
Dim SerialNumber As Long
GetVolumeInformationA "C:\", vbNullString, 0, SerialNumber, 0, 0, vbNullString, 0
Серийный номер MsgBox
Конец подписки
крутится на ветру
Обычная доска
это близко, он извлекает имя машины, но не идентификатор локальной сети. Только что проверил это, я вошел в систему, записал код, друг вошел в систему на моей машине под своим идентификатором локальной сети, но он вернул тот же код. Зашел на свою машину, дал другой код. Так что, похоже, это просто имя компьютера, а не идентификатор пользователя.
Спасибо за предложение, я уверен, что оно на правильном пути.
Том Уртис
MrExcel MVP
крутится на ветру
Обычная доска
Том,
Вы написали, когда я отвечал на сообщение LTunnicliffe. Но ваш тоже не делает того, что мне нужно, мне нужно аутентифицировать человека, а не машину. Поэтому, если человек должен был войти в систему с другого компьютера, мне нужно выяснить, кто это.
По сути, я хочу написать программу, которая будет знать, кто ее загружает, и не позволит им изменять данные других пользователей.
ОдинсДрим
Известный участник
Вы можете получить текущее имя пользователя NT следующим образом:
CurrentUserName = Environ("Имя пользователя")
крутится на ветру
Обычная доска
Большое спасибо.
Что еще может сделать environ()? Похоже, у него может быть другое применение!
Иван Ф. Моала
MrExcel MVP
Большое спасибо.
Что еще может сделать environ()? Похоже, у него может быть другое применение!
Халук
Нарушение правил
Функция Environ("Имя пользователя"), вероятно, решила вашу проблему.
На всякий случай, если вы используете ОС на базе NT, вы также можете извлечь полное имя из указанной выше функции.
Для этого просто скопируйте приведенные ниже строки, вставьте их в новый модуль кода и запустите процедуру с именем GetFullName
Частный тип USER_INFO_2
usri2_name As Long
usri2_password As Long
usri2_password_age As Long
usri2_priv As Long
usri2_home_dir As Long
usri2_comment As Long
usri2_home_dir As Long
usri2_comment As Long
usri2_flags As Long
usri2_script_path As Long
usri2_auth_flags As Long
usri2_full_name As Long
usri2_usr_comment As Long
usri2_parms As Long
usri2_workstations As Long
usri2_last_logon As Long
usri2_last_logoff As Long
usri2_acct_expires As Long
usri2_max_storage As Long
usri2_units_per_week As Long
usri2_logon_hours As Long
usri2_bad_pw_count As Long
usri2_num_logons As Long
usri2_logon_server As Long
usri2_country_code As Long
usri2_code_page As Long
Конечный тип
Частная функция объявления apiNetGetDCName _
Lib "netapi32.dll" Псевдоним "NetGetDCName" _
(ByVal servername As Long, _
ByVal DomainName As Long, _
bufptr As Длинный) До тех пор, пока
Частная функция объявления apiNetAPIBufferFree _
Lib "netapi32.dll" Псевдоним "NetApiBufferFree" _
(ByVal buffer As Long) _
As Long
Частная функция объявления apilstrlenW _
Lib "kernel32" Псевдоним "lstrlenW" _
(ByVal lpString As Long) _
As Long
Частная функция объявления apiNetUserGetInfo _
Lib "netapi32.dll" Псевдоним "NetUserGetInfo" _
(имя сервера как любое, _
имя пользователя как любое, _
уровень ByVal как длинное , _
bufptr As Long) As Long
Private Declare Sub sapiCopyMem _
Lib "kernel32" Псевдоним "RtlMoveMemory" _
(Назначение как любое, _
Источник как любой, _
ByVal Length As Long)< /p>
Private Declare Function apiGetUserName Lib _
"advapi32.dll" Псевдоним "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) _
As Long< /p>
Частная константа MAXCOMMENTSZ = 256
Частная константа NERR_SUCCESS = 0
Частная константа ERROR_MORE_DATA = 234&
Частная константа MAX_CHUNK = 25
Частная константа ERROR_SUCCESS = 0&
Закрытая функция fGetUserName() в виде строки
Dim lngLen As Long, lngRet As Long
Dim strUserName в виде строки
strUserName = String$(254, 0)
lngLen = 255
lngRet = apiGetUserName(strUserName, lngLen)
If lngRet Then
fGetUserName = Left$(strUserName, lngLen - 1)
End If
End Function
Функция fGetDCName() как строка
Dim pTmp As Long
Dim lngRet As Long
Dim abytBuf() As Byte
lngRet = apiNetGetDCName(0, 0, pTmp) < br />If lngRet = NERR_SUCCESS Then
fGetDCName = fStrFromPtrW(pTmp)
End If
Call apiNetAPIBufferFree(pTmp)
End Function
Частная функция fStrFromPtrW(pBuf As Long) As String
Dim lngLen As Long
Dim abytBuf() As Byte
lngLen = apilstrlenW(pBuf) * 2
If lngLen Then
ReDim abytBuf(lngLen)
Вызов sapiCopyMem(abytBuf(0), ByVal pBuf, lngLen)
fStrFromPtrW = abytBuf
End If
End Function
Sub GetFullName()
Dim strUserName As String
strUserName = Environ("Username")
MsgBox fGetFullNameOfLoggedUser(strUserName)
End Sub
Мне нужно знать идентификатор локальной сети моего компьютера. Я думаю, что есть
команда DOS, которую я могу использовать, чтобы найти это, но я не могу вспомнить, что это
это такое!
Реклама
Херб Мартин
Мне нужно знать идентификатор локальной сети моего компьютера. Я думаю, что есть
команда DOS, которую я могу использовать, чтобы найти это, но я не могу вспомнить, что это
это такое!
Что вы подразумеваете под идентификатором LAN?
Скорее всего, "IPConfig /all" будет делать то, что вам нужно, но термин, который вы
использовали, не является общепринятым.
ЕСЛИ вы используете TCP/IP, что делает большинство людей в наши дни, тогда IPConfig /ALL
покажет как ваш IP-адрес, так и ваш MAC-адрес (аппаратный сетевой адаптер).
NetSh.exe гораздо сложнее в использовании, но он также может предоставить вам эту
информацию.
Задать вопрос
Хотите ответить в этой теме или задать свой вопрос?
Вам нужно будет выбрать имя пользователя для сайта, что займет всего пару минут. После этого вы можете опубликовать свой вопрос, и наши участники помогут вам.
Похожие темы
Скопировать Outlook.pst через локальную сеть | 10 | 2 ноября 2004 г. |
3 | 23 апреля 2018 г. | |
1394 и LAN | 2 | 17 декабря 2008 г. |
Windows 10 Windows 10 не может найти сканер (часть многофункционального принтера) | 6 | 30 апреля 2021 г. |
FS605 Мигающий светодиод Netgear? Нет подключения к ПК по локальной сети. | 6 | 27 июня 2012 г. |
Копировать на портативный жесткий диск только неизмененные/новые файлы | 6 | 26 марта 2008 г. |
ПК не может получить доступ ко всем фотографиям — Galaxy A10 | 3 | июнь 16, 2020 |
Windows XP теряет связь через локальную сеть | 2 | 14 августа 2013 г. |