重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个简单啦看代码吧不会加Q问 VB启用/禁用本地连接
在邵原等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都网站制作 网站设计制作按需网站建设,公司网站建设,企业网站建设,高端网站设计,网络营销推广,成都外贸网站建设公司,邵原网站建设费用合理。
2009年01月19日 作者:SdBot.ck
'其实没什么说的,无非就是先找到“网络连接”这个虚拟文件夹,然后找到要控制的本地连接对应的'folderitem,然后枚举verb,找到需要的verb后,调用verb的DoIt方法,在winxp sp2 ,vb6 sp6下测试通过,代码如下:
Option Explicit
'首先引用Microsoft Shell Controls And Automation
Private Function ExcNetLinkMenu(ByVal AdapterName As String, ByVal MenuName As String) As Boolean
On Error Resume Next
Dim mShell As New Shell32.Shell
Dim NetConnection As Shell32.Folder
Dim FolderItem As Shell32.FolderItem
Dim NetConnectionItem As ShellFolderItem
Dim verb As Shell32.FolderItemVerb
Set NetConnection = mShell.NameSpace(49) '这个49是找出来的,有了它就可以避免遍历控制面板
If ObjPtr(NetConnection) = 0 Then
ExcNetLinkMenu = False
GoTo exitfunction
End If
Dim flag As Boolean
flag = False
For Each FolderItem In NetConnection.Items
If FolderItem.Name = AdapterName Then
Set NetConnectionItem = FolderItem
flag = True
Exit For
End If
Next
If flag = False Then
ExcNetLinkMenu = False
GoTo exitfunction
End If
For Each verb In NetConnectionItem.Verbs
If verb.Name = MenuName Then
flag = True
verb.DoIt
ExcNetLinkMenu = True
GoTo exitfunction
End If
Next
If flag = False Then
ExcNetLinkMenu = False
GoTo exitfunction
End If
exitfunction:
Set mShell = Nothing
Set NetConnection = Nothing
Set FolderItem = Nothing
Set NetConnectionItem = Nothing
Set verb = Nothing
End Function
Private Sub Command1_Click()
Dim flag As Boolean
'把 本地连接 2 换成你要控制的本地连接的名字
flag = ExcNetLinkMenu("本地连接 2", "停用(B)") '这个在2000下对应的是禁用,具体是什么,点右键,自己看吧
End Sub
Private Sub Command2_Click()
'把 本地连接 2 换成你要控制的本地连接的名字
Dim flag As Boolean
flag = ExcNetLinkMenu("本地连接 2", "启用(A)")
End Sub
me.close是关闭自身窗体,如果同时打开多个窗体,用me.close不能退出程序。
end是一个强大的退出指令,可以关闭所有窗体,并释放所有已占用的资源(当然有一些限制。所以自己主动释放是最好的)。
很简单,通过WindowsAPI,删除窗体菜单项就行了
首先在窗体类中声明API:
Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
Declare Function RemoveMenu Lib "user32" (ByVal lngHmenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
其次声明API参数常量:
Const MF_BYPOSITION As Integer = H400
然后在窗体类中写入过程:
Private Sub UserForm_Initialize_stopmove() '禁止窗体移动
Dim lngHwnd As IntPtr
Dim lngHmenu As IntPtr
lngHwnd = Me.Handle
If lngHwnd 0 Then
lngHmenu = GetSystemMenu(lngHwnd, False)
RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '这里的0代表菜单中从上往下数第一个菜单项
End If
End Sub
Private Sub UserForm_Initialize_onmove() '恢复窗体移动
Dim lngHwnd As IntPtr
Dim lngHmenu As IntPtr
lngHwnd = Me.Handle
If lngHwnd 0 Then
lngHmenu = GetSystemMenu(lngHwnd, True)
RemoveMenu(lngHmenu, 0, MF_BYPOSITION) '这里的0与禁止代码中的数值同步,原因时虽然表面上删除了菜单项,实则为隐藏了菜单项,各个菜单的索引值并没有变,所以0依然代表初始菜单的第一个菜单项,即被删除的那个菜单项
End If
End Sub
然后如果你的窗口菜单是动态变化的,建议声明常数:
Const MF_BYPOSITION As Integer = H0
然后使用相关的Windows功能的常数进行删除菜单。常数需要自行查看winuser.h头文件
如果找不到该头文件,可以看这里:网页链接
其余信息详见MSDN:网页链接
最后说一下,不建议前面网友说的重写WndProc的方法,因为这样拦截标题栏点击消息会导致窗体本身的菜单也无法显示出来,有损窗体功能,并且像双击左上角图标关闭窗体这样的功能也会跟着拦截消息的操作一起被吞掉。
使用VB.NET关闭指定WindowsName的页面可以通过使用System.Diagnostics.Process类的Kill方法来完成。
Kill方法接受一个参数,即要关闭的进程的窗口名称,该窗口名称可以通过Process.GetProcessesByName函数获得,这样就可以遍历找到任何一个指定的窗口名称并将其关闭。例如:
Dim process As Process = Process.GetProcessesByName(“MyApplication.exe”)
process.Kill()