如何在VB代码实现自动获取局域里有装SQL SERVER的电脑名?

解决方案 »

  1.   

    ‘这是SQL Server的例子 请选择引用 SQLDMO
    Dim oSQLServerDMOApp As SQLDMO.Application
    Dim oSQLServer As SQLDMO.SQLServerSet oSQLServerDMOApp = New SQLDMO.Application
    Dim oServerGroup As SQLDMO.ServerGroup
    For Each oServerGroup In oSQLServerDMOApp.ServerGroups
      '列举oServerGroup.Name
    Next
      

  2.   

    这是我几年前做的一个枚举局域网内所有机器名及得到其IP地址的一段主程序。当时是用于局域网内的动态IP的管理。在WIN98下运行正常。当然你的机器要是加入了域。如需要我这里有编译好的程序.
    // LanManage.cpp : implementation file
    //#include "stdafx.h"
    #include "NetSniff.h"
    #include "LanManage.h"
    #include "LanManAbout.h"
    //////
    #include <windows.h>
    #include <winbase.h>
    #include <winnetwk.h>
    #include <winsock2.h>#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CLanManage dialog
    CLanManage::CLanManage(CWnd* pParent /*=NULL*/)
    : CDialog(CLanManage::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CLanManage)
    // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    }
    void CLanManage::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CLanManage)
    DDX_Control(pDX, IDC_LANMANAGE_LIST, m_clcListCtrl);
    DDX_Control(pDX, IDC_LANMANAGE_NETWORK, m_ctcNetwork);
    //}}AFX_DATA_MAP
    }
    BEGIN_MESSAGE_MAP(CLanManage, CDialog)
    //{{AFX_MSG_MAP(CLanManage)
    ON_NOTIFY(NM_DBLCLK, IDC_LANMANAGE_NETWORK, OnDblclkLanmanageNetwork)
    ON_WM_SYSCOMMAND()
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CLanManage message handlersBOOL CLanManage::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here
    SetClassLong(this->m_hWnd,GCL_HICON,(LONG)AfxGetApp()->LoadIcon(IDI_MAINICON));
    //Add About Menu
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_LANMANAGE_ABOUT);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    CBitmap * pMenuBM=new CBitmap;
    pMenuBM->LoadBitmap(IDB_WBFSOFT);
    pSysMenu->SetMenuItemBitmaps(8,MF_BYPOSITION,pMenuBM,NULL);
    }
    //insert splitbar
    CRect crect(0,0,0,0);
    m_vsplitbar .Create(WS_CHILD|WS_BORDER|WS_DLGFRAME|WS_VISIBLE,crect,this,998);
    m_vsplitbar .SetPanes(&m_ctcNetwork ,&m_clcListCtrl );
    //Set TreeView ImageList
    HINSTANCE hinst=AfxGetApp()->m_hInstance ;
    LPCTSTR lpIcon="Shell32.dll";
    m_ilImageList.Create (16,16,ILC_COLOR|ILC_MASK,0,0); m_ilImageList.Add (ExtractIcon(hinst,lpIcon,13)); //0 All Lan
    m_ilImageList.Add (ExtractIcon(hinst,lpIcon,15)); //1 User PC
    m_ilImageList.Add (ExtractIcon(hinst,lpIcon,16)); //2 Printer
    m_ilImageList.Add (ExtractIcon(hinst,lpIcon,17)); //3 Network Nei
    m_ilImageList.Add (ExtractIcon(hinst,lpIcon,18)); //4 Domain Icon
    m_ilImageList.Add (ExtractIcon(hinst,lpIcon,28)); //5 Share
    m_ilImageList.Add (ExtractIcon(hinst,lpIcon,3)); //6 Folder m_ctcNetwork.SetImageList (&m_ilImageList,TVSIL_NORMAL);
    m_clcListCtrl .SetImageList (&m_ilImageList,TVSIL_NORMAL); m_ctcNetwork .SetTextColor (RGB(0,0,255));
    ///Insert Item
    HTREEITEM htiCurr;
    HTREEITEM htiParent=m_ctcNetwork.InsertItem ("网络邻居",3,3);
    //Insert domain Information
    DWORD dwRetEnum;
    DWORD cEntries=0xffffffff;
    DWORD cbBuffer;
    LPNETRESOURCE lpnrLocal=new _NETRESOURCEA[1024];
    HANDLE hEnum; cbBuffer=1024*sizeof(_NETRESOURCEA); WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,NULL,&hEnum);
    lpnrLocal=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
    dwRetEnum=WNetEnumResource (hEnum,&cEntries,lpnrLocal,&cbBuffer); if (lpnrLocal->dwUsage ==RESOURCEUSAGE_CONTAINER)
    {
    WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,
    lpnrLocal,&hEnum);
    cEntries =0xffffffff;
    dwRetEnum=WNetEnumResource (hEnum,&cEntries,lpnrLocal,&cbBuffer);
    for (int i=0;i<(int)cEntries;i++)
    {
    htiCurr=m_ctcNetwork .InsertItem (lpnrLocal[i].lpRemoteName ,4,4,htiParent );
    m_ctcNetwork .SetItemData (htiCurr,0);
    }
    }
    ///Set Root Mark that its children have been generated
    m_ctcNetwork.SetItemData (htiParent,1); //Initial ListCtrl
    RECT rect;
    int nWidth;
    m_clcListCtrl .GetClientRect (&rect);
    nWidth=(rect.right - rect.left)/3 ; m_clcListCtrl .SetTextColor (RGB(0,0,255));
    m_clcListCtrl .InsertColumn (0,"计算机名",LVCFMT_LEFT,nWidth);
    m_clcListCtrl .InsertColumn (1,"描述",LVCFMT_LEFT,nWidth);
    m_clcListCtrl .InsertColumn (2,"IP地址",LVCFMT_LEFT,nWidth); return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }void CLanManage::OnDblclkLanmanageNetwork(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    DWORD dwRet;
    DWORD cEntries=0xffffffff;
    DWORD cbBuffer;
    HANDLE hEnum;
    LPNETRESOURCE lpNet=new _NETRESOURCEA[1024];
    cbBuffer=1024*sizeof(_NETRESOURCEA);
    ////Treeview item
    TVITEM tvSelItem;
    int nIndex=0;
    POINT ptCurr;
    //Initial Winsock
    WORD dwVersion=MAKEWORD(2,2);
    WSADATA wsaDat;
    BOOL bMark=FALSE;
    int nRet=WSAStartup (dwVersion,&wsaDat);
    if (nRet==0) bMark=TRUE; HTREEITEM htiSel=m_ctcNetwork .GetSelectedItem ();
    DWORD dwMark=m_ctcNetwork .GetItemData(htiSel); tvSelItem.hItem=htiSel;
    tvSelItem.cchTextMax=32;
    tvSelItem.pszText=new char[32];
    tvSelItem.lParam=NULL;
    tvSelItem.mask=TVIF_HANDLE |TVIF_IMAGE |TVIF_SELECTEDIMAGE |TVIF_TEXT ;
    m_ctcNetwork .GetItem (&tvSelItem); if ((dwMark==1)&&(tvSelItem.iImage==4)&&bMark) 
    {
    ///Set ListView Item
    if (!bMark) 
    {
    WSACleanup();
    GlobalFree(lpNet);
    return;
    }
    ///
    lpNet->dwDisplayType =RESOURCEDISPLAYTYPE_SERVER;
    lpNet->dwScope =RESOURCE_GLOBALNET;
    lpNet->dwType =RESOURCETYPE_ANY;
    lpNet->dwUsage =RESOURCEUSAGE_CONTAINER;
    //lstrcpy(lpNet->lpRemoteName ,strText);
    lpNet->lpRemoteName =tvSelItem.pszText;

    lpNet=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
    WNetOpenEnum (RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE,
    lpNet,&hEnum);
    dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer);

    //Start to Enum all PC which belongs to the current group
    WNetOpenEnum (RESOURCE_CONTEXT,RESOURCETYPE_ANY,NULL,
    lpNet,&hEnum);
    cEntries=0xffffffff;
    lpNet->lpRemoteName =tvSelItem.pszText;
    WNetOpenEnum(lpNet->dwScope ,lpNet->dwType ,lpNet->dwUsage ,lpNet,&hEnum);
    dwRet=WNetEnumResource (hEnum,&cEntries,lpNet,&cbBuffer); ///Start To InsertItem into TreeView and ListView
    CString strPC1; m_clcListCtrl .DeleteAllItems (); for (int istart=0;istart<(int)cEntries;istart++)
    {
    strPC1.Format ("%s",lpNet[istart].lpRemoteName );
    strPC1=strPC1.Right (strPC1.GetLength () - 2);
    ///Set ListView Item
    m_clcListCtrl .InsertItem(istart,strPC1,1);
    m_clcListCtrl .SetItemText (istart,1,lpNet[istart].lpComment );
    ///Get the PC IP Address
    HOSTENT * host1=gethostbyname (strPC1);
      

  3.   

    Const SOCKET_ERROR = 0
    Private Type WSAdata
        wVersion As Integer
        wHighVersion As Integer
        szDescription(0 To 255) As Byte
        szSystemStatus(0 To 128) As Byte
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpVendorInfo As Long
    End Type
    Private Type Hostent
        h_name As Long
        h_aliases As Long
        h_addrtype As Integer
        h_length As Integer
        h_addr_list As Long
    End Type
    Private Type IP_OPTION_INFORMATION
        TTL As Byte
        Tos As Byte
        Flags As Byte
        OptionsSize As Long
        OptionsData As String * 128
    End Type
    Private Type IP_ECHO_REPLY
        Address(0 To 3) As Byte
        Status As Long
        RoundTripTime As Long
        DataSize As Integer
        Reserved As Integer
        data As Long
        Options As IP_OPTION_INFORMATION
    End Type
    Private Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
    Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired&, lpWSAdata As WSAdata) As Long
    Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long
    Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal HANDLE As Long) As Boolean
    Private Declare Function IcmpSendEcho Lib "ICMP" (ByVal IcmpHandle As Long, ByVal DestAddress As Long, ByVal RequestData As String, ByVal RequestSize As Integer, RequestOptns As IP_OPTION_INFORMATION, ReplyBuffer As IP_ECHO_REPLY, ByVal ReplySize As Long, ByVal TimeOut As Long) As Boolean
    Private Sub Form_Load()
        Const HostName = "www.csdn.net" '你也可以换成你的机器的名字,来检测
        
        
        Dim hFile As Long, lpWSAdata As WSAdata
        Dim hHostent As Hostent, AddrList As Long
        Dim Address As Long, rIP As String
        Dim OptInfo As IP_OPTION_INFORMATION
        Dim EchoReply As IP_ECHO_REPLY
        Call WSAStartup(&H101, lpWSAdata)
        If GetHostByName(HostName + String(64 - Len(HostName), 0)) <> SOCKET_ERROR Then
            CopyMemory hHostent.h_name, ByVal GetHostByName(HostName + String(64 - Len(HostName), 0)), Len(hHostent)
            CopyMemory AddrList, ByVal hHostent.h_addr_list, 4
            CopyMemory Address, ByVal AddrList, 4
        End If
        hFile = IcmpCreateFile()
        If hFile = 0 Then
            MsgBox "Unable to Create File Handle"
            Exit Sub
        End If
        OptInfo.TTL = 255
        If IcmpSendEcho(hFile, Address, String(32, "A"), 32, OptInfo, EchoReply, Len(EchoReply) + 8, 2000) Then
            rIP = CStr(EchoReply.Address(0)) + "." + CStr(EchoReply.Address(1)) + "." + CStr(EchoReply.Address(2)) + "." + CStr(EchoReply.Address(3))
        Else
            MsgBox "Timeout"
        End If
        If EchoReply.Status = 0 Then
            MsgBox "Reply from " + HostName + " (" + rIP + ") recieved after " + Trim$(CStr(EchoReply.RoundTripTime)) + "ms"
            Debug.Print rIP
        Else
            MsgBox "Failure ..."
        End If
        Call IcmpCloseHandle(hFile)
        Call WSACleanup
    End Subcsdn:211.157.102.21
    OK?