090826项目进展:添加smb资源的网段搜索二
2009-08-26 19:48
302 查看
1,添加变量
// Dialog Data
//{{AFX_DATA(CDlgSmbList)
enum { IDD = IDD_SMBLIST };
CTreeCtrl m_smbTree;
CIPAddressCtrl m_addrTo;
CIPAddressCtrl m_addrFrom;
//}}AFX_DATA
2,函数OnButtonSearch
void CDlgSmbList::OnButtonSearch()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
tListSmb.pm_addrFrom = &m_addrFrom;
tListSmb.pm_addrTo = &m_addrTo;
tListSmb.pm_smbTree = &m_smbTree;
m_smbTree.DeleteAllItems();
AfxBeginThread(ThreadFuncListSmbRecource, &tListSmb);
}
3,使用线程函数
a,先判断某一ip是否在线
b,如果在线采取获取共享资源
// Dialog Data
//{{AFX_DATA(CDlgSmbList)
enum { IDD = IDD_SMBLIST };
CTreeCtrl m_smbTree;
CIPAddressCtrl m_addrTo;
CIPAddressCtrl m_addrFrom;
//}}AFX_DATA
2,函数OnButtonSearch
void CDlgSmbList::OnButtonSearch()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
tListSmb.pm_addrFrom = &m_addrFrom;
tListSmb.pm_addrTo = &m_addrTo;
tListSmb.pm_smbTree = &m_smbTree;
m_smbTree.DeleteAllItems();
AfxBeginThread(ThreadFuncListSmbRecource, &tListSmb);
}
3,使用线程函数
a,先判断某一ip是否在线
b,如果在线采取获取共享资源
UINT ThreadFuncListSmbRecource(LPVOID lpParam) { tCheckStatus* pInfo=(tCheckStatus*)lpParam; BYTE field0,field1,field2,field3; BYTE field4,field5,field6,field7; pInfo->pm_addrFrom->GetAddress(field0,field1,field2,field3); pInfo->pm_addrTo->GetAddress(field4,field5,field6,field7); CString strIPAddr; for(int i =field3; i <= field7; i++) { strIPAddr.Format("%d.%d.%d.%d",field0,field1,field2,i); pInfo->pm_wndMessage->SetWindowText(""+strIPAddr); if(CheckHostStatus(strIPAddr)) { ListOnlineRecourse(pInfo->pm_smbTree, strIPAddr); } } return 0; }
void ListOnlineRecourse(CTreeCtrl* pTree, const CString &strIP) { /* 1,入参初始化,NETRESOURCE初始化 */ DWORD dwResult, dwResultEnum; HANDLE hEnum; DWORD cbBuffer = 16384; // 16K is a good size DWORD cEntries = -1; // enumerate all possible entries LPNETRESOURCE lpnrLocal; // pointer to enumerated structures DWORD i; HTREEITEM hItemParent = pTree->InsertItem(strIP, 0, 1); CString cstrTemp = "////" + strIP; NETRESOURCE tNetRs; memset(&tNetRs, 0, sizeof(NETRESOURCE)); tNetRs.dwScope = RESOURCE_GLOBALNET; tNetRs.dwType = RESOURCETYPE_ANY; tNetRs.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER; tNetRs.dwUsage = RESOURCEUSAGE_CONTAINER; tNetRs.lpProvider = "Microsoft Windows Network"; char destip[64] ; sprintf(destip, "%s", cstrTemp.GetBuffer(cstrTemp.GetLength())); int cntDelete = strlen(destip) + 1; tNetRs.lpRemoteName = destip; NETRESOURCE *lpnr = &tNetRs; // 2,检测主机是否在线 // Call the WNetOpenEnum function to begin the enumeration. dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources RESOURCETYPE_ANY, // all resources 0, // enumerate all resources lpnr, // NULL first time the function is called &hEnum); // handle to the resource if (dwResult != NO_ERROR) { return; } // // Call the GlobalAlloc function to allocate resources. lpnrLocal = (LPNETRESOURCE)GlobalAlloc(GPTR, cbBuffer); if (lpnrLocal == NULL) { return; } do { // // Initialize the buffer. // ZeroMemory(lpnrLocal, cbBuffer); // 3,遍历资源,并挂载树结构 // Call the WNetEnumResource function to continue // the enumeration. dwResultEnum = WNetEnumResource(hEnum, // resource handle &cEntries, // defined locally as -1 lpnrLocal, // LPNETRESOURCE &cbBuffer); // buffer size // // If the call succeeds, loop through the structures. if (dwResultEnum == NO_ERROR) { for(i = 0; i < cEntries; i++) { // Call an application-defined function to // display the contents of the NETRESOURCE structures. // DisplayStruct(&lpnrLocal[i]); // 将以前的打印 改进为 挂载树 CString strSmbFile(lpnrLocal[i].lpRemoteName); strSmbFile.Delete(0, cntDelete); pTree->InsertItem(strSmbFile,0,1, hItemParent, TVI_LAST); } } // Process errors. else if (dwResultEnum != ERROR_NO_MORE_ITEMS) { break; } } // // End do. // while(dwResultEnum != ERROR_NO_MORE_ITEMS); // 4,释放资源 // Call the GlobalFree function to free the memory. // GlobalFree((HGLOBAL)lpnrLocal); // // Call WNetCloseEnum to end the enumeration. // dwResult = WNetCloseEnum(hEnum); if(dwResult != NO_ERROR) { // // Process errors. // return; } }
相关文章推荐
- 090825项目进展:回到主项目,添加smb资源的网段搜索一
- 090827项目进展:添加smb资源的网段搜索三
- 090903项目进展:smb资源的深层递归5,wps实现,
- 090831项目进展:smb资源的深层递归2
- 090901项目进展:smb资源的深层递归3
- 090830项目进展:smb资源的深层递归
- 090902项目进展:smb资源的深层递归4,wps分析
- SoSoft项目之向WinForm添加声音资源并控制播放实例
- MTK添加项目资源结构
- eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)(图解)
- mac平台下用Xcode开发cocos2d-x3.6版本项目添加资源文件的注意事项
- eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)(图解)
- 在VC++中创建的项目中添加一个资源文件
- eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)(图解)
- eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)
- 项目配置——添加第三方资源
- 090906(星期天)项目进展:添加CTreeView控件对双击事件的响应
- QT项目中添加资源文件
- android studio的项目添加gson依赖库 搜索显示nothing to show
- Qt项目中如何添加资源文件?