如何在VB代码实现自动获取局域里有装SQL SERVER的电脑名?
解决方案 »
- VB在Word文本框中如何插入内容
- VB,tabcontrol使用中tab隐藏的问题
- 各位帮帮忙,如何访问服务器数据库,代码应该怎么写???
- 帮帮忙,帮我解决一个我想了2天的问题!!!!
- VSFlexGrid8和SQL存储过程的问题
- 为VB -- COM+ 苦苦煎熬的朋友看一看这里,你会茅塞顿开!
- win98下如何实现信使服务?
- 在VB中使用API编写QQ辅助工具时的一点问题(关于sendmessage)
- shellexe的问题.20分钟内回答,明晚给足分。要经过测试。
- 关于用vb获得sql登陆用户名的问题,急急
- 请问那位高手告知如何实现在读取数据或运算时窗口出现“正在读取数据。。。。“这样的3D提示窗口
- listview的refresh方法如何用啊?谢谢!
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
// 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);
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?