📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "ScanLAN.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
extern CStringArray m_strArrayIP;
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_MENU_LESSON, OnMenuLesson)
//}}AFX_MSG_MAP
// ON_MESSAGE(WM_MY_NETMESSAGE,MyNETMessage)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
std::string GetLocalIP(BOOL OnlyFirst=TRUE)
{
WORD wVersionRequested;
WSADATA wsaData;
char name[MAX_PATH];
std::string ip="";
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 2 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
for(int i = 0; hostinfo!= NULL && hostinfo->h_addr_list[i]!= NULL; i++ )
{
ip+=inet_ntoa (*(struct in_addr *)hostinfo->h_addr_list[i]);
if(OnlyFirst) break;
if(hostinfo->h_addr_list[i+1]!=NULL) ip+=",";
}
}
}
WSACleanup( );
}
return ip;
}
HANDLE hStartEvent;
DWORD CALLBACK ThdPro(void * lpvoid)
{
MSG msg;
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
if(!SetEvent(hStartEvent))
{
OutputDebugString("Set start event failed\n");
return 0;
}
unsigned char arDestMac[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
ULONG ulLen = 6;
if(SendARP(inet_addr((char *)lpvoid), 0, (ULONG*)arDestMac, &ulLen) == NO_ERROR)
{
u_char *p = arDestMac;
printf("ip[%16s]: mac[%02X-%02X-%02X-%02X-%02X-%02X] \n", lpvoid,p[0], p[1], p[2], p[3], p[4], p[5]);
fflush(stdout);
CString str;
str.Format("%16s",lpvoid);
for(int i=0; i<16; i++)
if(str[i]!=' ')
break;
m_strArrayIP.Add(str.Right(16-i));
// fprintf(f,"%16s;",lpvoid);
}
delete [] (char *)lpvoid;
return 0;
}
PMIB_IPFORWARDTABLE MyGetIpForwardTable(BOOL bOrder)
{
PMIB_IPFORWARDTABLE pIpRouteTable = NULL;
DWORD dwActualSize = 0;
if(::GetIpForwardTable(pIpRouteTable,&dwActualSize, bOrder)==ERROR_INSUFFICIENT_BUFFER)
{
pIpRouteTable =(PMIB_IPFORWARDTABLE)::GlobalAlloc(GPTR, dwActualSize);
if(::GetIpForwardTable(pIpRouteTable,&dwActualSize, bOrder)==NO_ERROR)
return pIpRouteTable;
::GlobalFree(pIpRouteTable);
}
return NULL;
}
void MyFreeForwardTable(PMIB_IPFORWARDTABLE pIpRouteTab)
{
if(pIpRouteTab != NULL)
::GlobalFree(pIpRouteTab);
}
void CMainFrame::GetGateway()
{
PMIB_IPFORWARDTABLE pIpRoutTable= MyGetIpForwardTable(TRUE);
DWORD i;
if(pIpRoutTable != NULL)
{
for(i=0; i<pIpRoutTable->dwNumEntries; i++)
{
if(pIpRoutTable->table[i].dwForwardDest == 0)
{
inadGateway.s_addr = pIpRoutTable->table[i].dwForwardNextHop;
}
}
MyFreeForwardTable(pIpRoutTable);
}
}
void CMainFrame::ScanLAN()
{
std::string ip = GetLocalIP();
int index = ip.find_last_of('.');
std::string ipFront = ip.assign(ip, 0, index+1);
IPPre = ipFront;
for (int i=0;i<0xFF;i++)
{
char *szDestIP = new char[16];
if (!szDestIP)
{
Sleep(100);
continue;
}
wsprintf(szDestIP,ipFront.c_str());
wsprintf(szDestIP+ipFront.size(),"%d", i);
hStartEvent = CreateEvent(0,FALSE,FALSE,0);
CloseHandle(CreateThread(NULL,0,&ThdPro,(LPVOID)szDestIP,0,NULL));
WaitForSingleObject(hStartEvent,INFINITE);
Sleep(1);//作用很大
CloseHandle(hStartEvent);
}
}
/*LRESULT CMainFrame::MyNETMessage(WPARAM wParam, LPARAM lParam)
{
CString str;
switch(wParam){
case MYNET_CLIENTREAD:
// str = m_clientSocket.GetMessStr();
m_message = str;
break;
case MYNET_CLIENTSEND:
break;
case MYNET_CONNECT:
m_message = "已连接上服务器 !";
break;
case MYNET_SERVERCLOSE:
m_message = "服务器已关闭";
break;
case MYNET_SERVERREAD:
str = m_srvrSocket.GetMessStr();
m_message = str;
break;
case MYNET_SERVERSEND:
break;
case MYNET_ACCEPT:
m_message = "已接受客户机请求 !";
break;
case MYNET_CLIENTCLOSE:
m_message = "客户机已关闭";
break;
}
MessageBox(m_message);
return TRUE;
}*/
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
GetGateway();
ScanLAN();
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
if (!m_wndMyBar1.Create(_T("我的控制条"),this,123))
{ TRACE0("Failed to create mybar\n"); return -1; }
if (!m_wndMyBar2.Create(_T("我的控制条2"),this,CSize(100,100),TRUE,124))
{ TRACE0("Failed to create mybar\n"); return -1; }
m_wndMyBar1.SetBarStyle(m_wndMyBar1.GetBarStyle() | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBar2.SetBarStyle(m_wndMyBar2.GetBarStyle() | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBar1.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBar2.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndMyBar1, AFX_IDW_DOCKBAR_LEFT);///停靠在左边
DockControlBar(&m_wndMyBar2, AFX_IDW_DOCKBAR_BOTTOM);///停靠在右边
m_wndEdit.Create(WS_VSCROLL|WS_CHILD|WS_VISIBLE|ES_AUTOVSCROLL|
ES_MULTILINE|ES_WANTRETURN,CRect(0,0,0,0),&m_wndMyBar2,101);
m_wndEdit.ModifyStyleEx(0,WS_EX_CLIENTEDGE);
if (!m_wndTree.Create(WS_CHILD|WS_VISIBLE|
TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,
CRect(0, 0, 0, 0), &m_wndMyBar1, 100))
{
TRACE0("Failed to create instant bar child\n");
return -1;
}
m_wndTree.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
////往树型控件添加内容///
HTREEITEM hti = m_wndTree.InsertItem(_T("活动主机"));
for(int i=0; i<m_strArrayIP.GetSize(); i++)
{
m_wndTree.InsertItem(m_strArrayIP[i], hti);
}
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnMenuLesson()
{
// TODO: Add your command handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -