• 0

[VBS] How to get Realtime Status of Network Drives!


Question

I have a script that maps network drives but i would like to create a way to display the realtime status of those drive for instance if the drive is connected then a cell in the table that displays all of the drives would turn green and if the drive was not connected then it will turn red. i am fairly new to VBS.

Option Explicit
	const pcstrPath = ";G:\SYSINFO;F:\Public"
	const pcstrC3Server = "\\Z02DBCVSC01\"
	dim objExplorer, HTML
	'set oIE = CreateObject("InternetExplorer.Application") 
	'Modeless oIE, "VSC Logon Script is running, please wait..." 
	On Error Resume Next
Set objExplorer = CreateObject ("InternetExplorer.Application")
objExplorer.Navigate "about:blank"   
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Fullscreen = 1
objExplorer.Left =  0
objExplorer.Top =   0
'objExplorer.Width = 800
'objExplorer.Height = 600
objExplorer.Visible = 1			 
objExplorer.Document.Body.Style.Cursor = "wait"
Dim objDocument:Set objDocument = objExplorer.Document	
  objDocument.Open
  objDocument.Writeln "<HEAD></HEAD><TITLE>Logon Script Progress</TITLE>"
  objDocument.Writeln "<Body BGColor=white SCROLL=YES>"	
  objDocument.Writeln "</BODY>"  

'###Write to the IE Object
objExplorer.Document.Body.InnerHTML="<html><tablelor=lightblue border=3 width=100% bordercolor=black cellspacing=6 cellpadding=6" &amp; _ 
	   "height=100%&gt;&lt;tr valign=middle&gt;&lt;td align=center&gt; " &amp; _
	   "&lt;caption align=center&gt;&lt;font size=20&gt;&lt;b&gt;&lt;i&gt; Mapping Network Drives.... &lt;/b&gt;&lt;/i&gt;&lt;/font&gt;&lt;/caption&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;th&gt;&lt;font size=18 color=black&gt;&lt;u&gt;Network Drive:&lt;/u&gt;&lt;/font&gt;&lt;/th&gt; " &amp; _
	   "&lt;th&gt;&lt;font size=18 color=black&gt;&lt;u&gt;Connected:&lt;/u&gt;&lt;/font&gt;&lt;/th&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(G:) Rafacsii$ on 'Z02dbcvsc01'&lt;/font&gt;&lt;/td&gt; " &amp; _
		   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(H:) Rafacs$ on ' Z02dbcvsc01'&lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(I:) User on 'Z02rscvsc07\User Share' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(J:) Local on 'Z02rscvsc07\NOVAShare\Mis' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(K:) Pubarc on 'Z02rscvsc07' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(L:) APPLShare on 'Z02rscvsc07' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(M:) Imroot$ on 'Z02dbcvsc01' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(O:) itsopshre on 'Z02rscvsc07' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=Left&gt;&lt;font size=10 color=black&gt;(P:) DocProd on 'Z02c4cvsc01' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;td align=Left&gt;&lt;font size=10 color=black&gt;(Q:) PrintShare on 'Z02TBCVSC02(Z02tbcvsc02)' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   "&lt;tr&gt; " &amp; _
	   "&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"
objDocument.Close

	Dim pstrUserName,pstrGroups,pstrFailed,pstrSpecialVolChar
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt; getting User Name"
	pstrUserName = fstrGetUserProperty("samAccountName")
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt; getting group membership"
	pstrGroups = ucase(fstrGetUserProperty("MemberOf"))
	if InStr(pstrGroups, "VSC C3 SERVICE ACCOUNTS") then
	pstrSpecialVolChar = "Z"
	end if
	If fblnMapDriveAndFolder("I:", "\\Z02APPVSC01\User Share", "\" &amp; pstrUserName) = False Then
		pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "I:" &amp; "\\Z02APPVSC01\User Share\" &amp; pstrUserName &amp; "\  Has NOT been mapped"
	End If
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "G:" &amp; pcstrC3Server &amp; pstrSpecialVolChar &amp; "RAFACSII$\"
	If fblnMapDriveAndFolder("G:", pcstrC3Server &amp; pstrSpecialVolChar &amp; "RAFACSII$", "") = False Then
		pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "G:" &amp; pcstrC3Server &amp; pstrSpecialVolChar &amp; "RAFACSII$\  Has NOT been mapped"
	End If
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "H:" &amp; pcstrC3Server &amp; pstrSpecialVolChar &amp; "RAFACS$\"
	If fblnMapDriveAndFolder("H:", pcstrC3Server &amp; pstrSpecialVolChar &amp; "RAFACS$", "") = False Then
		pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "H:" &amp; pcstrC3Server &amp; pstrSpecialVolChar &amp; "RAFACS$\  Has NOT been mapped"
	End If
	if InStr(pstrGroups, "VSC USERS - CIS") then
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "J:\\Z02RSCVSC04\NOVAShare\MIS\LOCAL"
	If fblnMapDriveAndFolder("J:", "\\Z02RSCVSC04\NOVAShare\MIS\LOCAL", "") = False Then
	   	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "J:" &amp; "\\Z02RSCVSC04\NOVAShare\MIS\LOCAL  Has NOT been mapped"
	   End If
	end if	
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "K:\\Z02APPVSC01\PUBARC\"
   q If fblnMapDriveAndFolder("K:", "\\Z02APPVSC01\PUBARC", "") = False Then
		pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "K:" &amp; "\\Z02APPVSC01\PUBARC\  Has NOT been mapped"
	End If
	if InStr(pstrGroups, "VSC USERS - CIS") then
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "L:\\Z02RSCVSC04\APPLShare\"
	If fblnMapDriveAndFolder("L:", "\\Z02RSCVSC04\APPLShare\", "") = False Then
	   	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "L:" &amp; "\\Z02RSCVSC04\APPLShare\  Has NOT been mapped"
	   End If
	end if
'	if InStr(pstrGroups, "VSC C3 Service Accounts") then
'	Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "L:\\Z02RSCVSC04\APPLShare\"
'	If fblnMapDriveAndFolder("L:", "\\Z02RSCVSC04\APPLShare\", "") = False Then
'		  pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "L:" &amp; "\\Z02RSCVSC04\APPLShare\  Has NOT been mapped"
'	   End If
'	end if	
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "M:" &amp; pcstrC3Server &amp; pstrSpecialVolChar &amp; "IMROOT$\"
	If fblnMapDriveAndFolder("M:", pcstrC3Server &amp; pstrSpecialVolChar &amp; "IMROOT$", "") = False Then
		pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "M:" &amp; pcstrC3Server &amp; pstrSpecialVolChar &amp; "IMROOT$\  Has NOT been mapped"
	End If
'
'Sets up mappings for Supervisory share - \\Z02RSCVSC04\MGMTShare - Added by Rene 12/19/2006
'
	if InStr(pstrGroups, "VSC _ADJUDICATIONS_MGMT_ZEN - CIS") then
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "N:\\Z02RSCVSC04\SUPVShare\"
	If fblnMapDriveAndFolder("N:", "\\Z02RSCVSC04\SUPVShare", "") = False Then
	   	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "N:" &amp; "\\Z02RSCVSC04\SUPVShare\  Has NOT been mapped"
	   End If
	end if
	if InStr(pstrGroups, "VSC _SIIO_ZEN - CIS") then
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "N:\\Z02RSCVSC04\SUPVShare\"
	If fblnMapDriveAndFolder("N:", "\\Z02RSCVSC04\SUPVShare", "") = False Then
	   	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "N:" &amp; "\\Z02RSCVSC04\SUPVShare\  Has NOT been mapped"
	   End If
	end if	
	if InStr(pstrGroups, "VSC _N_DRIVE - CIS") then
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "N:\\Z02RSCVSC04\SUPVShare\"
	If fblnMapDriveAndFolder("N:", "\\Z02RSCVSC04\SUPVShare", "") = False Then
	   	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "N:" &amp; "\\Z02RSCVSC04\SUPVShare\  Has NOT been mapped"
	   End If
	end if	
'
'End of Supervisory share mappings
'
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping " &amp; "Checking to see if using Citrix"
	if fblnCitrix = false then
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Mapping P:\\Z02C4CVSC01\DocProd"
	If fblnMapDriveAndFolder("P:", "\\Z02C4CVSC01\DocProd", "") = False Then
	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp;  "P:\\Z02C4CVSC01\DocProd Has NOT been mapped"
	End If
	end if
	'Modeless oIE, "VSC Logon Script is running, please wait...&lt;/p&gt;&lt;/p&gt;Setting the PATH variable"
	if fblnSetUserEnvVar("PATH",pcstrPath,True) = false then
	pstrFailed = pstrFailed &amp; "&lt;/p&gt;" &amp; "Could not set the Path environment variable to: " &amp; "&lt;/p&gt;" &amp; pcstrPath
	end if

if pstrFailed &lt;&gt; "" then
	'Modeless oIE, " The following Errors Occured:" &amp; pstrFailed
	call pause(10) 'pause for 5 seconds
end if




'Determines whether the drive is already mapped
'   If it is mapped to the wrong location this function will map it to
'	   the correct one
'   else if drive doesn't exist then
'	   map it
' Yuppers Get 'R Done
Function fblnMapDriveAndFolder(strDriveLetter,strServerName, strPath)
	On Error resume next
	fblnMapDriveAndFolder = True
	Dim pobjFsys
	Set pobjFsys = CreateObject("Scripting.FileSystemObject")
	'correction for wrong slash
	strServerName = Replace(strServerName, "/", "\")
	strPath = Replace(strPath, "/", "\")
	'Below will put a "\\" on the front of the server name if it doesn't exist
	If Left(strServerName, 2) &lt;&gt; "\\" Then
		strServerName = "\\" &amp; strServerName
	End If
	'Below will put take the "\" off of the end of the server name if it exists
	If Right(strServerName, 1) = "\" Then
		strServerName = Left(strServerName, Len(strServerName) - 1)
	End If
	'Below will put a "\" on the front of the path name if it doesn't exist
	If Left(strPath, 1) &lt;&gt; "\" And strPath &lt;&gt; "" Then
		strPath = "\" &amp; strPath
	End If
	'Below will put a ":" on the end of the strDriveLetter if it doesn't exist
	If Right(strDriveLetter, 1) &lt;&gt; ":" Then
		strDriveLetter = Left(strDriveLetter, 1) &amp; ":"
	End If
	If pobjFsys.FolderExists(strServerName &amp; strPath) = False Then
		'Create the folder because it doesn't exist
		pobjFsys.CreateFolder strServerName &amp; strPath &amp; "\"
	End If
	'Check to see if the drive is already mapped
	If pobjFsys.DriveExists(strDriveLetter) = True Then
		'Check to see if the drive letter is mapped to the correct folder

		If pobjFsys.FolderExists(strDriveLetter &amp; strPath) = False Or strPath = "" Then 'The drive is mapped to the wrong location
			'Map over the existing drive with the correct path
			If fblnMapDrive(strDriveLetter, strServerName, strPath, True) = False Then
			   fblnMapDriveAndFolder = false
			End If
		End If
	Else 'The drive doesn't exist
		'Map the drive
		If fblnMapDrive(strDriveLetter, strServerName, strPath, False) = False Then
			fblnMapDriveAndFolder = false
		End If
	End If

	Set pobjFsys = Nothing
	If Err.Number &lt;&gt; 0 Then
	err.clear
		fblnMapDriveAndFolder = False
	End If
End Function

Function fblnMapDrive(strDriveLetter, strServer, strFolderPath, blnRemoveFirst)' As Boolean
	On Error resume next
	fblnMapDrive = True
	Dim objNetwork
' Purpose of script to create a network object. (objNetwork)
' Then to apply the MapNetworkDrive method. 
	Set objNetwork = CreateObject("WScript.Network")
	If blnRemoveFirst = True Then
		objNetwork.RemoveNetworkDrive strDriveLetter, True, True
	End If
		objNetwork.MapNetworkDrive strDriveLetter, strServer &amp; strFolderPath, True
	If Err.Number &lt;&gt; 0 Then
		fblnMapDrive = False
	End If
End Function

function fblnSetUserEnvVar(strVariable, strValue, blnConcat)
 on  Error resume next
   dim wshShell, pobjEnv
   fblnSetUserEnvVar = true
   set WshShell = CreateObject("WScript.Shell")
   Set pobjEnv = WshShell.Environment("User")
   if blnConcat = true then
	pobjEnv(strVariable) = pobjEnv(strVariable) &amp;  strValue
   else
	pobjEnv(strVariable) = strValue
   end if

   if err.number &lt;&gt; 0 then
	fblnSetUserEnvVar = false
	err.clear
   end if
end function

Function fblnCitrix()
	Dim strComputer
	Dim objWMIService
	Dim clSettings
	Dim objRecord
	fblnCitrix   = true
on error resume next
	strComputer = "."
	Set objWMIService = GetObject("winmgmts:" _
		&amp; "{impersonationLevel=impersonate}!\\" _
		&amp; strComputer &amp; "\root\cimv2")
	Set clSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
	fblnCitrix   = false
	For Each objRecord In clSettings
	if objRecord.WindowsDirectory &lt;&gt; "" then
		if left(objRecord.WindowsDirectory,2) = "P:" then
			fblnCitrix  = true
			exit for
		end if
	end if


	Next
if err.number &lt;&gt; 0 then
	msgbox err.description, "fblnCitrix",vbcritical
end if	
	Set objWMIService = Nothing
	Set clSettings = Nothing
End Function

'This function will return the specified property
Function fstrGetUserProperty(strProperty)
	On Error resume next
	Dim pstrConnect, pstrVal

	Dim pobjUser 'As ActiveDs.IADsUser
	pstrConnect = fstrADSpath
	Set pobjUser = GetObject(pstrConnect)
	pstrVal = pobjUser.Get(strProperty)
	if isArray(pstrVal) = true then
	fstrGetUserProperty = join(pstrVal)
	else
	fstrGetUserProperty = pstrVal
	end if

	If Err.Number &lt;&gt; 0 Then
		MsgBox Err.Description, vbCritical
	End If
	Set pobjUser = Nothing
End Function

'Gets the local Active Directory information
' Used to obtain the string to connect the user's AD object
Function fstrADSpath() 'As String
	Dim pobjAdSysInfo 'As ActiveDs.ADSystemInfo
	'Set pobjAdSysInfo = New ActiveDs.ADSystemInfo
	Set pobjAdSysInfo = CreateObject("AdSystemInfo")
	fstrADSpath = "LDAP://" &amp; pobjAdSysInfo.UserName

	Set pobjAdSysInfo = Nothing
End Function

function fblnSetUserEnvVar(strVariable, strValue, blnConcat)
 on  Error resume next
   dim wshShell, pobjEnv
   fblnSetUserEnvVar = true
   set WshShell = CreateObject("WScript.Shell")
   Set pobjEnv = WshShell.Environment("User")
   if blnConcat = true then
	if instr(1,ucase(pobjEnv(strVariable)),ucase(strValue)) &lt;= 0 then
		pobjEnv(strVariable) = pobjEnv(strVariable) &amp;  strValue
	end if
   else
	pobjEnv(strVariable) = strValue
   end if

   if err.number &lt;&gt; 0 then
	fblnSetUserEnvVar = false
	err.clear
   end if
end function

'Close the Splash Screen
objExplorer.quit 

'******************************************************************************
'   This will pause the number of seconds passed to it
'******************************************************************************
Sub pause(seconds)
	Dim strTime 
	strTime = (second(Time) + seconds)
	If (strTime &gt;= 60) Then
		strTime = (strTime - 60)
	End If
	Do Until (strTime = (second(Time)))

	Loop
End Sub

REM 'Routine for Splash Screen
REM Sub modeless(oIE, sprompt)
REM with oIE 
	REM .fullscreen = True : .navigate "about:blank" 
  REM While .readystate &lt;&gt; 4 : wscript.sleep 100 : Wend 
  REM with .document 
	REM .write "&lt;table bgcolor=lightblue border=3 width=100% bordercolor=black cellspacing=6 cellpadding=6" &amp; _ 
	   REM "height=100%&gt;&lt;tr valign=middle&gt;&lt;td align=center&gt; " &amp; _
	   REM "&lt;caption align=center&gt;&lt;font size=20&gt;&lt;b&gt;&lt;i&gt; Mapping Network Drives.... &lt;/b&gt;&lt;/i&gt;&lt;/font&gt;&lt;/caption&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;th&gt;&lt;font size=18 color=black&gt;&lt;u&gt;Network Drive:&lt;/u&gt;&lt;/font&gt;&lt;/th&gt; " &amp; _
	   REM "&lt;th&gt;&lt;font size=18 color=black&gt;&lt;u&gt;Connected:&lt;/u&gt;&lt;/font&gt;&lt;/th&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(G:) Rafacsii$ on 'Z02dbcvsc01'&lt;/font&gt;&lt;/td&gt; " &amp; _
		   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(H:) Rafacs$ on ' Z02dbcvsc01'&lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(I:) User on 'Z02rscvsc07\User Share' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(J:) Local on 'Z02rscvsc07\NOVAShare\Mis' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(K:) Pubarc on 'Z02rscvsc07' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(L:) APPLShare on 'Z02rscvsc07' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(M:) Imroot$ on 'Z02dbcvsc01' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=left&gt;&lt;font size=10 color=black&gt;(O:) itsopshre on 'Z02rscvsc07' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=Left&gt;&lt;font size=10 color=black&gt;(P:) DocProd on 'Z02c4cvsc01' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;td align=Left&gt;&lt;font size=10 color=black&gt;(Q:) PrintShare on 'Z02TBCVSC02(Z02tbcvsc02)' &lt;/font&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;td align=center&gt;&lt;/td&gt; " &amp; _
	   REM "&lt;tr&gt; " &amp; _
	   REM "&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 
	REM .title = "MESSAGE: _________________________________" 
	 REM 'With .ParentWindow 
	REM '  .resizeto 350,100 1
	REM '  .moveto (.screen.width - 400)\2, (.screen.height - 100)\2 
	REM 'End With 
	REM With .body.style
	  REM .borderStyle = "outset" 
	  REM .borderWidth = "4px" 
	REM End With 
	REM .bgcolor = "white"
	REM .body.scroll = "NO" 
  REM End With 
  REM .visible = true 
REM End with 
REM End Sub

0 answers to this question

Recommended Posts

There have been no answers to this question yet

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Direct messaging is finally making its way to Threads by David Uzondu Meta has announced it will finally begin testing direct messages on Threads, claiming that it was a "top request" since the platform's big splash in July 2023. This has been a massive pain point for users. For nearly a year, attempting to have a private conversation meant awkwardly fumbling over to a linked Instagram account, which for some people, completely killed the experience of actually using the app. Head of Instagram Adam Mosseri acknowledged this, stating "we know how important messaging is" to the platform's mission. It makes sense; a social network without a private messaging feature feels incomplete, especially when it is trying to supplant X. The initial test for this overdue feature is now rolling out to a limited number of people in Hong Kong, Thailand, and Argentina, with a wider release planned for later. For serious users and creators who hate having to send people to other apps like Instagram for DMs, this is fantastic news. For others, it's just one more inbox to check. Users included in the test will spot a new envelope icon on the main navigation bar, located at the bottom on mobile and on the left-side menu on the desktop site. The company, in typical fashion, has not offered a concrete timeline on when everyone else gets access, only saying it will expand "soon". In related news, Threads recently migrated its web presence from the old threads.net address to the much cleaner threads.com domain. That old domain was a leftover from the launch because Meta did not actually own the .com version, which was later scooped up. This change came alongside a cluster of other improvements to the web app, including a pop-up post composer that follows you as you scroll and provides easier access to your saved and liked posts.
    • Generally, Earth never initiated that animals lay straight
    • Several UI improvements masquerading as a major update. I'm truly hating this trend.
    • OpenAI to use Google Cloud despite rivalry, diversifying beyond Microsoft by Paul Hill To help it meet its massive computing demands for training and deploying AI models, OpenAI is looking into a surprising partnership with Google Cloud to use its services. It was widely seen that OpenAI was Google’s biggest threat, but this deal puts an end to the idea that the pair are purely competing. The two companies haven’t made any public announcement about the deal but a source speaking to Reuters claimed that talks had been ongoing for a few months before a deal was finalized in May. Notably, such a deal would see OpenAI expand its compute sources beyond Microsoft Azure. Microsoft had arrangements in place with OpenAI since 2019 that gave it the exclusive right to build new computing infrastructure for the startup. This limitation was loosened earlier this year with the announcement of Project Stargate. OpenAI is now allowed to look elsewhere for compute if Microsoft is unable to meet the demand. A win for Google Cloud, a challenge for Google's AI strategy The deal will see Google Cloud supply computing capacity for OpenAI’s AI model training and inference. This is a big win for Google’s Cloud unit because OpenAI is a massive name in AI and it lends credence to Google’s cloud offering. It also justifies Google Cloud’s expansion of its Tensor Processing Units (TPUs) for external use. On the back of the news, Alphabet’s stock price rose 2.1%, while Microsoft’s sank 0.6%, showing investors think it’s a good move for Google too. While many end users don’t interact with Google Cloud the same way they do with something like Android or Chrome, Cloud is actually a huge part of Google’s business. In 2024, it comprised $43 billion (12%) of Alphabet’s total revenue. With OpenAI as a customer, this figure could rise even more given the massive amounts of compute OpenAI needs. By leveraging Google’s services, it will also give OpenAI access to the search giant’s Tensor Processing Units (TPUs). Unlike GPUs, these chips are specifically designed to handle the kinds of calculations that are most common in AI and machine learning, leading to greater efficiency. Google’s expansion of these chips to external customers has already helped it attract business from Anthropic and Safe Superintelligence. While Google will happily take OpenAI’s money, it needs to tread carefully giving compute power to a rival, which will only make OpenAI more of a threat to Google’s search business. Specifically, it’ll need to manage how resources are allocated between Google’s own AI projects and its cloud customers. Another issue is that Google has been struggling to keep up with the overall demand for cloud computing, even with its own TPUs, according to its Chief Financial Officer in April. By giving access to OpenAI, it means even more pressure. Hopefully, this will be short lived as companies compete to build out capacity to attract customers. OpenAI's push for compute independence Back in 2019 when Microsoft became OpenAI’s exclusive cloud partner in exchange for $1 billion, the AI landscape was much different. End users wouldn’t have access to ChatGPT for another 3 years and the rate of development of new models was less ferocious than it is today. As OpenAI’s compute needs evolve, its relationship with Microsoft has had to evolve too, including this deal with Google and the Stargate infrastructure program. Reuters said that OpenAI’s annualized run rate (the amount they’ll earn in one year at its current pace) had surged to $10 billion, which highlights its explosive growth and need for more resources than Microsoft alone can offer. To make itself more independent, OpenAI has also signed deals worth billions of dollars with CoreWeave, another cloud compute provider, and it is nearing the finalization of the design of its first in-house chip, which could reduce its dependency on external hardware providers altogether. Source: Reuters
    • I don't think that means what you think it means
  • Recent Achievements

    • Enthusiast
      computerdave91111 went up a rank
      Enthusiast
    • Week One Done
      Falisha Manpower earned a badge
      Week One Done
    • One Month Later
      elsa777 earned a badge
      One Month Later
    • Week One Done
      elsa777 earned a badge
      Week One Done
    • First Post
      K Dorman earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      535
    2. 2
      ATLien_0
      272
    3. 3
      +FloatingFatMan
      201
    4. 4
      +Edouard
      200
    5. 5
      snowy owl
      138
  • Tell a friend

    Love Neowin? Tell a friend!