Hopefully a simple one... Trying to find a call to get the local workstations computer name. Anyone?
Printable View
Hopefully a simple one... Trying to find a call to get the local workstations computer name. Anyone?
VB Code:
'USED TO RETRIEVE IP HOST AND ADDRESS Option Explicit Public Const MAX_WSADescription = 256 Public Const MAX_WSASYSStatus = 128 Public Const ERROR_SUCCESS As Long = 0 Public Const WS_VERSION_REQD As Long = &H101 Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF& Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF& Public Const MIN_SOCKETS_REQD As Long = 1 Public Const SOCKET_ERROR As Long = -1 Public Type HOSTENT hName As Long hAliases As Long hAddrType As Integer hLen As Integer hAddrList As Long End Type Public Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To MAX_WSADescription) As Byte szSystemStatus(0 To MAX_WSASYSStatus) As Byte wMaxSockets As Integer wMaxUDPDG As Integer dwVendorInfo As Long End Type Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long Public Declare Function WSAStartup Lib "WSOCK32.DLL" _ (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long Public Declare Function gethostname Lib "WSOCK32.DLL" _ (ByVal szHost As String, ByVal dwHostLen As Long) As Long Public Declare Function gethostbyname Lib "WSOCK32.DLL" _ (ByVal szHost As String) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long) 'RETRIEVES THE IP ADDRESS OF THIS USER Public Function GETIPADDRESS() As String Dim sHostName As String * 256 Dim lpHost As Long Dim HOST As HOSTENT Dim dwIPAddr As Long Dim tmpIPAddr() As Byte Dim i As Integer Dim sIPAddr As String If Not SocketsInitialize() Then GETIPADDRESS = "" Exit Function End If 'gethostname returns the name of the local host into 'the buffer specified by the name parameter. The host 'name is returned as a null-terminated string. The 'form of the host name is dependent on the Windows 'Sockets provider - it can be a simple host name, or 'it can be a fully qualified domain name. However, it 'is guaranteed that the name returned will be successfully 'parsed by gethostbyname and WSAAsyncGetHostByName. 'In actual application, if no local host name has been 'configured, gethostname must succeed and return a token 'host name that gethostbyname or WSAAsyncGetHostByName 'can resolve. If gethostname(sHostName, 256) = SOCKET_ERROR Then GETIPADDRESS = "" MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & _ " has occurred. Unable to successfully get Host Name." SocketsCleanup Exit Function End If 'gethostbyname returns a pointer to a HOSTENT structure '- a structure allocated by Windows Sockets. The HOSTENT 'structure contains the results of a successful search 'for the host specified in the name parameter. 'The application must never attempt to modify this 'structure or to free any of its components. Furthermore, 'only one copy of this structure is allocated per thread, 'so the application should copy any information it needs 'before issuing any other Windows Sockets function calls. 'gethostbyname function cannot resolve IP address strings 'passed to it. Such a request is treated exactly as if an 'unknown host name were passed. Use inet_addr to convert 'an IP address string the string to an actual IP address, 'then use another function, gethostbyaddr, to obtain the 'contents of the HOSTENT structure. sHostName = Trim$(sHostName) lpHost = gethostbyname(sHostName) If lpHost = 0 Then GETIPADDRESS = "" MsgBox "Windows Sockets are not responding. " & _ "Unable to successfully get Host Name." SocketsCleanup Exit Function End If 'to extract the returned IP address, we have to copy 'the HOST structure and its members CopyMemory HOST, lpHost, Len(HOST) CopyMemory dwIPAddr, HOST.hAddrList, 4 'create an array to hold the result ReDim tmpIPAddr(1 To HOST.hLen) CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen 'and with the array, build the actual address, 'appending a period between members For i = 1 To HOST.hLen sIPAddr = sIPAddr & tmpIPAddr(i) & "." Next 'the routine adds a period to the end of the 'string, so remove it here GETIPADDRESS = Mid$(sIPAddr, 1, Len(sIPAddr) - 1) SocketsCleanup End Function 'RETRIEVES THE SYSTEM NAME Public Function GETIPHOSTNAME() As String Dim sHostName As String * 256 If Not SocketsInitialize() Then GETIPHOSTNAME = "" Exit Function End If If gethostname(sHostName, 256) = SOCKET_ERROR Then GETIPHOSTNAME = "" MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & _ " has occurred. Unable to successfully get Host Name." SocketsCleanup Exit Function End If GETIPHOSTNAME = Left$(sHostName, InStr(sHostName, Chr(0)) - 1) SocketsCleanup End Function Public Function HiByte(ByVal wParam As Integer) As Byte 'note: VB4-32 users should declare this function As Integer HiByte = (wParam And &HFF00&) \ (&H100) End Function Public Function LoByte(ByVal wParam As Integer) As Byte 'note: VB4-32 users should declare this function As Integer LoByte = wParam And &HFF& End Function Public Sub SocketsCleanup() If WSACleanup() <> ERROR_SUCCESS Then MsgBox "Socket error occurred in Cleanup." End If End Sub Public Function SocketsInitialize() As Boolean Dim WSAD As WSADATA Dim sLoByte As String Dim sHiByte As String If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then MsgBox "The 32-bit Windows Socket is not responding." SocketsInitialize = False Exit Function End If If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then MsgBox "This application requires a minimum of " & _ CStr(MIN_SOCKETS_REQD) & " supported sockets." SocketsInitialize = False Exit Function End If If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _ (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _ HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then sHiByte = CStr(HiByte(WSAD.wVersion)) sLoByte = CStr(LoByte(WSAD.wVersion)) MsgBox "Sockets version " & sLoByte & "." & sHiByte & _ " is not supported by 32-bit Windows Sockets." SocketsInitialize = False Exit Function End If 'must be OK, so lets do it SocketsInitialize = True End Function ' Usage Call GETIPHOSTNAME
VB Code:
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private MachineName As String Private Sub GetMachineName() Dim sBuffer As String Dim lSize As Long sBuffer = Space$(255) lSize = Len(sBuffer) Call GetComputerName(sBuffer, lSize) If lSize > 0 Then MachineName = Left$(sBuffer, lSize) Else MachineName = vbNullString End If End Sub
geeez james.....:D
VB Code:
'example by Donavon Kuhn ([email protected]) Private Const MAX_COMPUTERNAME_LENGTH As Long = 31 Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Sub Form_Load() Dim dwLen As Long Dim strString As String 'Create a buffer dwLen = MAX_COMPUTERNAME_LENGTH + 1 strString = String(dwLen, "X") 'Get the computer name GetComputerName strString, dwLen 'get only the actual data strString = Left(strString, dwLen) 'Show the computer name MsgBox strString End Sub
damn james, think Hacks api is a little shorter :D
Thanks hack and kleinma, i knew there had to be something easier than the first reply. Thanks again gentelmen.
:cool:
it also does something different :DQuote:
Originally posted by phrozeman
damn james, think Hacks api is a little shorter :D
i just think james mistook the question for finding out remote computer info versus local computer name... impressive code though
Hell, it works.
Yes both the other guys code is shorter, but
DOES SIZE REALLY MATTER :D
Me=Dope. Sorry fellows... :(Quote:
Originally posted by kleinma
it also does something different :D
i just think james mistook the question for finding out remote computer info versus local computer name... impressive code though
no james.. just be happy that all that code works and does what it is supposed to do... if all that code really did get the computer name of the local PC... then I would be wondering about you. :D :D
If it doesn't, try thisQuote:
Originally posted by James Stanich
DOES SIZE REALLY MATTER :D
Dim ws As String
ws = Environ("COMPUTERNAME")
those sneaky environment variables....
Need to get my glasses check, can't read these days, oh well...:DQuote:
Originally posted by kleinma
no james.. just be happy that all that code works and does what it is supposed to do... if all that code really did get the computer name of the local PC... then I would be wondering about you. :D :D
At the risk of being accused of chatting, I have to say that I've found this thread amusing.
When I first read it, and saw James response, I chuckled.
Not because I was laughing at you James, but because I have misread questions, and as a result posted totally off the wall responses, many, many times on this forum. As a result, I got "blasted" by other respondants who questioned my manhood, the legitimacy of my birth, and the maritial status of my parents at the time! :D
James: At the risk of being attacked for doing nothing more than "upping" my post count (and I have been accused of that), I'd like to say: Welcome to the "I read the question too fast to understand what was being asked" club! Its a pleasure having company! :D :D :D :D
Thanks Hack for the vote of confidence...:( :D
I will try to read better next time (but I am sure that I will do it again)... ;)