手动改网络类型很容易, 在Control Panel\Network and Sharing Center中选择customize,可以在Public和Private中互换,Domain一般无法在这里手动修改。
编程实现的话,在许多介绍Vista的文章中,都只提到了一个Network Awareness API这个东东,这个主要用来读取网络的信息来实时提醒应用程序,提醒是否网络变了。如 http://msdn2.microsoft.com/en-us/library/ms697388.aspx 是专门用于Vista的,与XP的不同.
虽然Network Awareness说只是用来读取,但是据我研究,里面有个接口INetwork 包含了两个方法,INetwork.SetName() 可以修改网络的名称, INetwork.SetCategory()可以修改Network location types. 由于INetwork是接口,不能直接实例化,所以要靠另外一个NetworkListManager类来实现INetwork。
具体实现:
新建一个C# Console程序,然后在他的reference里面添加新的reference,选择COM组件,里面有个"Network List Manager 1.0 Type Library", 添加这个引用,VS2005中有,VS2003没试过,可能有。 添加这个引用后,就可以使用NetworkList命名空间中的NetworkListManagerClass了。
其中NetworkListItem 只是一个存取Name和INetwork的类,可以直接用个INetwork存,Name是多余的。 这个代码中包含3个方法UpdateNetworks,是即时更新网络信息的,PrintNetworks是列出网络信息,主要功能是ChangeNetworks,里面调用了INetwork.SetCategory这个方法, 改变了网络,并且是实时生效的。
还有一个方法,是改注册表的,不过不是实时起作用,改了后,虽然Network的描述变了,但是必须要重起后各个网络类型的策略才会起作用。注册表位置在:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{A6716226-BE20-43C8-B8AB-B154808EF060}
后面的{A6716226-BE20-43C8-B8AB-B154808EF060}各个电脑都不相同。
改动里面的键值:Category即可。 0x0表示Public,0x1表示Private, 0x2表示Domain。
工作环境: Vs.net 2005 + Vista