JScript 69 Posted August 11, 2010 Hello everyone,To Set/Get WorkGroupName and Set ComputerName without restarting!Try the code below:_NetWork.au3expandcollapse popup#include-once #include "EnvUpdate.inc" ; #INDEX# ======================================================================================================================= ; Title .........: Set/Get WorkGroupName and Set ComputerName ; AutoIt Version.: 3.2.12++ ; Language.......: English ; Description ...: And Refreshes the OS environment. ; Author ........: João Carlos (jscript) ; Support .......: ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ;_SetComputerName ;_SetWorkGroupName ;_GetWorkgroupName ; =============================================================================================================================== ; #INTERNAL_USE_ONLY# =========================================================================================================== ; =============================================================================================================================== ; #VARIABLES# =================================================================================================================== ; #FUNCTION# ======================================================================================================================================================= ; Name...........: _SetComputerName ; Description ...: Sets the new computer name. ; Syntax.........: _SetComputerName( "ComputerName" ) ; Parameters ....: ; Requirement(s).: ; Return values .: Success - Returns 1 ; Failure - Returns 0 ; Author ........: jscript ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: _SetComputerName( "VAIO" ) ; ================================================================================================================================================================== Func _SetComputerName($sCmpName) Local $sLogonKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" Local $sCtrlKey = "HKLM\SYSTEM\CurrentControlSet" ; RagsRevenge -> http://www.autoitscript.com/forum/index.php?showtopic=54091&view=findpost&p=821901 If StringRegExp($sCmpName, '\\|/|:|\*|\?|"|<|>|\.|,|~|!|@|#|\$|%|\^|&|\(|\)|\;|{|}|_|=|\+|\[|\]|\x60' & "|'", 0) = 0 Then Return 0 ; 5 = ComputerNamePhysicalDnsHostname $aRet = DllCall("Kernel32.dll", "BOOL", "SetComputerNameEx", "int", 5, "str", $sCmpName) If $aRet[0] = 0 Then Return 0 RegWrite($sCtrlKey & "\Control\Computername\ActiveComputername", "ComputerName", "REG_SZ", $sCmpName) RegWrite($sCtrlKey & "\Control\Computername\Computername", "ComputerName", "REG_SZ", $sCmpName) RegWrite($sCtrlKey & "\Services\Tcpip\Parameters", "Hostname", "REG_SZ", $sCmpName) RegWrite($sCtrlKey & "\Services\Tcpip\Parameters", "NV Hostname", "REG_SZ", $sCmpName) RegWrite($sLogonKey, "AltDefaultDomainName", "REG_SZ", $sCmpName) RegWrite($sLogonKey, "DefaultDomainName", "REG_SZ", $sCmpName) RegWrite("HKEY_USERS\.Default\Software\Microsoft\Windows Media\WMSDK\General", "Computername", "REG_SZ", $sCmpName) _EnvUpdate("COMPUTERNAME", $sCmpName, False, True) Return 1 EndFunc ;==>_SetComputerName ; #FUNCTION# ======================================================================================================================================================= ; Name...........: _SetWorkGroupName ; Description ...: Sets the new NetBIOS Workgroup name. ; Syntax.........: _SetWorkGroupName( "WorkGroupName" ) ; Parameters ....: ; Requirement(s).: ; Return values .: Success - Returns NERR_Success ; Failure - Return value can be one of the following error codes: http://msdn.microsoft.com/en-us/library/aa370433%28VS.85%29.aspx ; Author ........: jscript ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: _SetWorkGroupName( "MSHOME" ) ; ================================================================================================================================================================== Func _SetWorkGroupName($sGroupName) Local $aRet = DllCall("Netapi32.dll", "long", "NetJoinDomain", "int", 0, "wstr", $sGroupName, "int", 0, "int", 0, "int", 0, "dword", 0x00000040) Return $aRet[0] EndFunc ;==>_SetWorkGroupName ; #FUNCTION# ======================================================================================================================================================= ; Name...........: _GetWorkgroupName ; Description ...: Retrivies the current NetBIOS Workgroup. ; Syntax.........: _GetWorkgroupName() ; Parameters ....: ; Requirement(s).: ; Return values .: Success - Returns the string value of the computer's current NetBIOS Workgroup ; Failure - Returns "MSHOME" and set @Error = 1 ; Author ........: joell ; Modified.......: Authenticity, jscript ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: _GetWorkgroupName() ; ================================================================================================================================================================== Func _GetWorkgroupName() Local $NERR, $pBuffer, $sName Local Const $NetSetupUnknownStatus = 0 Local Const $NetSetupUnjoined = 1 Local Const $NetSetupWorkgroupName = 2 Local Const $NetSetupDomainName = 3 $NERR = DllCall("Netapi32.dll", "int", "NetGetJoinInformation", "wstr", @ComputerName, "ptr*", 0, "int*", 0) If @error Then Return SetError(@error, @extended, "") If $NERR[0] = 0 Then $pBuffer = $NERR[2] $sName = DllStructGetData(DllStructCreate("wchar[" & __NetApi_BufferSize($pBuffer) & "]", $pBuffer), 1) __NetApi_BufferFree($pBuffer) EndIf If @error Then Return SetError(@error, @extended, "") Return $sName EndFunc ;==>_GetWorkgroupName ; Authenticity Func __NetApi_BufferSize($pBuffer) Local $aResult = DllCall("Netapi32.dll", "int", "NetApiBufferSize", "ptr", $pBuffer, "uint*", 0) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] <> 0 Then Return SetError(-1, $aResult[0], 0) Return $aResult[2] EndFunc ;==>__NetApi_BufferSize ; Authenticity Func __NetApi_BufferFree($pBuffer) Local $aResult = DllCall("Netapi32.dll", "int", "NetApiBufferFree", "ptr", $pBuffer) If @error Then Return SetError(@error, @extended, False) If $aResult[0] <> 0 Then Return SetError(-1, $aResult[0], False) Return SetError(0, 0, True) EndFunc ;==>__NetApi_BufferFreeNeed the below code:_EnvUpdate.au3:expandcollapse popup#include-once ; #INDEX# ======================================================================================================================= ; Title .........: Environment Update ; AutoIt Version.: 3.2.12++ ; Language.......: English ; Description ...: Refreshes the OS environment. ; Author ........: João Carlos (jscript) ; Support .......: trancexx, PsaltyDS, KaFu ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ;_EnvUpdate ; =============================================================================================================================== ; #INTERNAL_USE_ONLY# =========================================================================================================== ; =============================================================================================================================== ; #VARIABLES# =================================================================================================================== Global $MAX_VALUE_NAME = 1024 Global $HWND_BROADCAST = 0xffff Global $WM_SETTINGCHANGE = 0x001A Global $SMTO_ABORTIFHUNG = 0x0002 Global $SMTO_NORMAL = 0x0000 Global $MSG_TIMEOUT = 5000 ; #Example# ===================================================================================================================== ;_EnvUpdate("VERSION", "7.07.0110.2600") ;MsgBox(4096, @error, EnvGet("VERSION")) ;_EnvUpdate("VERSION", "", True, True) ;MsgBox(4096, @error, EnvGet("VERSION")) ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name...........: _EnvUpdate ; Description ...: Refreshes the OS environment. ; Syntax.........: _EnvUpdate( ["envvariable" [, "value" [, CurrentUser [, Machine ]]]] ) ; Parameters ....: envvariable - [optional] Name of the environment variable to set. If no variable, refreshes all variables. ; value - [optional] Value to set the environment variable to. If a value is not used the environment ; variable will be deleted. ; CurrentUser - [optional] Sets the variable in current user environment. ; Machine - [optional] Sets the variable in the machine environment. ; Return values .: Success - None ; Failure - Sets @error to 1. ; Author ........: João Carlos (jscript) ; Support .......: trancexx, PsaltyDS, KaFu ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; _EnvUpdate("TEMP", @SystemDir & "TEMP", True, True) ; =============================================================================================================================== Func _EnvUpdate($sEnvVar = "", $vValue = "", $fCurrentUser = True, $fMachine = False) Local $sREG_TYPE = "REG_SZ", $iRet1, $iRet2 If $sEnvVar <> "" Then If StringInStr($sEnvVar, "\") Then $sREG_TYPE = "REG_EXPAND_SZ" If $vValue <> "" Then If $fCurrentUser Then RegWrite("HKCU\Environment", $sEnvVar, $sREG_TYPE, $vValue) If $fMachine Then RegWrite("HKLM\System\CurrentControlSet\Control\Session Manager\Environment", $sEnvVar, $sREG_TYPE, $vValue) Else If $fCurrentUser Then RegDelete("HKCU\Environment", $sEnvVar) If $fMachine Then RegDelete("HKLM\System\CurrentControlSet\Control\Session Manager\Environment", $sEnvVar) EndIf ; http://msdn.microsoft.com/en-us/library/ms686206%28VS.85%29.aspx $iRet1 = DllCall("Kernel32.dll", "BOOL", "SetEnvironmentVariable", "str", $sEnvVar, "str", $vValue) If $iRet1[0] = 0 Then Return SetError(1) EndIf ; http://msdn.microsoft.com/en-us/library/ms644952%28VS.85%29.aspx $iRet2 = DllCall("user32.dll", "lresult", "SendMessageTimeoutW", _ "hwnd", $HWND_BROADCAST, _ "dword", $WM_SETTINGCHANGE, _ "ptr", 0, _ "wstr", "Environment", _ "dword", $SMTO_ABORTIFHUNG, _ "dword", $MSG_TIMEOUT, _ "dword_ptr*", 0) If $iRet2[0] = 0 Then Return SetError(1) EndFunc ;==>_EnvUpdateSend comments! 1 Luigi reacted to this Hide JScript's signature Hide all signatures http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)Somewhere Out ThereJames IngramDownload Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Share this post Link to post Share on other sites
kor 5 Posted August 12, 2010 does this work in a domain environment? Or just a stand alone workgroup? By that I mean, can you change the computer name (without restarting) and also add the computer to a domain under the new computer name in the same session? Obviously adding to a domain will require a reboot, but by being able to change the workstation name and then also add to a domain under the new name without having to reboot saves loads of time. Share this post Link to post Share on other sites
dmob 32 Posted August 12, 2010 Useful UDF. Thanks for sharing. Share this post Link to post Share on other sites
JScript 69 Posted August 12, 2010 does this work in a domain environment? Or just a stand alone workgroup? (...) Workgroup and Domain: http://msdn.microsoft.com/en-us/library/ms724931%28VS.85%29.aspx SetComputerNameEx Function: Sets a new NetBIOS or DNS name for the local computer. NameType: ComputerNamePhysicalDnsDomain -> Sets the primary DNS suffix of the computer. ComputerNamePhysicalDnsHostname -> Sets the NetBIOS and the Computer Name (the first label of the full DNS name). ComputerNamePhysicalNetBIOS -> Sets the NetBIOS name to the name specified. Hide JScript's signature Hide all signatures http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)Somewhere Out ThereJames IngramDownload Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Share this post Link to post Share on other sites
JScript 69 Posted August 12, 2010 Useful UDF. Thanks for sharing.Thanks. Hide JScript's signature Hide all signatures http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!)Somewhere Out ThereJames IngramDownload Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Share this post Link to post Share on other sites
FreeBeing 2 Posted August 16, 2010 Thank you too, it really help me Share this post Link to post Share on other sites