文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>windows主机名和工作组名修改程序

windows主机名和工作组名修改程序

时间:2007-04-23  来源:linusdai

use Win32;
use Win32::Registry;
use Tk;
use Tk::Label;
use Tk::Text;
use Tk::Button;
use Tk::Widget;
use Tk::Radiobutton;

$number = '1';
$hostname = '';
$workgroup = '';

$mainW = MainWindow->new();
$mainW->title("Hostname&workgroup Modifier");
$frame = $mainW->Frame(-relief => 'groove',-borderwidth =>4)->pack();
$radio_pc =$frame->Radiobutton(-variable => \$number,-text =>"PC",-value =>"1")->pack(-side =>"left");
$radio_notebook = $frame->Radiobutton(-variable => \$number,-text=>"Notebook ",-value=>"2")->pack(-side=>"left");

$label_hostname = $frame->Label(-text => "Your name:")->pack();
$t_hostname = $frame->Entry(-textvariable => \$hostname)->pack();
$label_workgroup = $frame->Label(-text => "Workgroup name:")->pack();
$t_workgroup = $frame->Entry(-textvariable => \$workgroup)->pack();
$frame->Label(-textvariable => \$result_text)->pack();

$button = $frame->Button(-text => "Modify", -command => \&submit)->pack();
MainLoop();

sub submit{
    if(length($hostname) >12||length($workgroup) >15){#可在此处对所输入名称作其它限制
        $result_text = "Wrong format, Try again !";
        print "Wrong format, Try again !\n";
        
    } else{
        $hostname =dg.$hostname.$number;     
        &change_hostname;
        &change_groupName;
        $result_text = "Process Success!";
        print "Process Success!\n";
  }
}

#思路:修改注册表“HKEY_LOCAL_MACHINE”中部分键值(通过搜索自己主机名找出来的,故此法不完全可
#靠,不过使用中还暂未发现有什么不利影响;
#估计递归整个注册表修改所有包含主机名的键值会可靠一些,但此发太耗时)
#应该有其他更好的方法的
sub change_hostname{
    $HKEY_LOCAL_MACHINE->Open("SYSTEM",$hk_system) or die "Can't open registry";

    $hk_system->Open("CurrentControlSet",$hk_controlSet) or die "Can't open registry";
    $hk_system->Open("ControlSet001",$hk_controlSet001) or die "Can't open registry";
    $hk_system->Open("ControlSet002",$hk_controlSet002) or die "Can't open registry";

    $hk_controlSet->Open("Control",$hk_control) or die "Can't open registry";
    $hk_controlSet->Open("Services",$hk_services) or die "Can't open registry";
    $hk_controlSet001->Open("Control",$hk_001Control) or die "Can't open registry";
    $hk_controlSet001->Open("Services",$hk_001Services) or die "Can't open registry";
    $hk_controlSet002->Open("Control",$hk_002Control) or die "Can't open registry";
    $hk_controlSet002->Open("Services",$hk_002Services) or die "Can't open registry";

    $hk_control->Open("ComputerName",$hk_computerName) or die "Can't open registry";
    $hk_services->Open("Tcpip",$hk_tcpip) or die "Can't open registry";
    $hk_services->Open("nm",$hk_nm) or die "Can't open registry";
    $hk_001Control->Open("ComputerName",$hk_001_computername) or die "Can't open registry";
    $hk_002Control->Open("ComputerName",$hk_002_computername) or die "Can't open registry";
    $hk_001Services->Open("Tcpip",$hk_001tcpip) or die "Can't open registry";
    $hk_001Services->Open("nm",$hk_001nm) or die "Can't open registry";
    $hk_002Services->Open("Tcpip",$hk_002tcpip) or die "Can't open registry";
    $hk_002Services->Open("nm",$hk_002nm) or die "Can't open registry";

    $hk_tcpip->Open("Parameters",$hk_parameters) or die "Can't open registry";
    $hk_nm->Open("Parameters",$hk_nm_parameters) or die "Can't open registry";
    $hk_001tcpip->Open("Parameters",$hk_001parameters) or die "Can't open registry";
    $hk_001nm->Open("Parameters",$hk_nm_001parameters) or die "Can't open registry";
    $hk_002tcpip->Open("Parameters",$hk_002parameters) or die "Can't open registry";
    $hk_002nm->Open("Parameters",$hk_nm_002parameters) or die "Can't open registry";

    $hk_computerName->Open("ActiveComputerName",$hk_activeComputerName) or die "Can't open registry";
    $hk_computerName->Open("ComputerName",$hk_ComputerName_ComputerName) or die "Can't open registry";
    $hk_001_computername->Open("ActiveComputerName",$hk_001activeComputerName) or die "Can't open registry";
    $hk_001_computername->Open("ComputerName",$hk_001ComputerName) or die "Can't open registry";
    $hk_002_computername->Open("ComputerName",$hk_002ComputerName) or die "Can't open registry";

    @RegisterValue = (\$hk_parameters,\$hk_nm_parameters,\$hk_001parameters,\$hk_nm_001parameters,\$hk_002parameters,\$hk_nm_002parameters,\$hk_activeComputerName,\$hk_ComputerName_ComputerName,\$hk_001activeComputerName,\$hk_001ComputerName,\$hk_002ComputerName);
    foreach $hk (@RegisterValue){
        $status = $$hk->GetValues(\%values);
        if ($status){
            @keys = keys(%values);
            @sorted_keys = sort(@keys);
            foreach $entry (@sorted_keys){
                $name = $values{$entry}[0];
                if ($name eq "ComputerName"){
                    print $name," include hostname!\n";
                    $$hk->SetValueEx($name,0,REG_SZ,$hostname);
                }#if
                if ($name eq "Hostname"){
                    print $name," include hostname!\n";
                    $$hk->SetValueEx($name,0,REG_SZ,$hostname);
                }#if
                if ($name eq "NV Hostname"){
                    print $name," include hostname!\n";
                    $$hk->SetValueEx($name,0,REG_SZ,$hostname);
                }#if
            }#foreach $entry
        }#if $status
    }#foreach $hk
}

sub change_groupName{#在网上找的调用wmi修改工作组名的方法,后来发现也有修改主机名的方法,对wmi不怎么清楚啊!
    my $hostname = `hostname`;
    chomp $hostname;
    exit(1) if (Win32::DomainName() eq $workgroup);
    my $string = qq(wmic computersystem where Name="$hostname" call JoinDomainOrWorkgroup Name="$workgroup");
    `$string`;
}

        
相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载