⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hostndlg.cpp

📁 它可以找出你的ip,电脑名
💻 CPP
字号:
// HostNdlg.cpp : implementation file
// Author: Marius Chincisan 01-12-1996 
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HostNames.h"
#include "HostNdlg.h"

#include <winsock.h>
#include <windowsx.h>



#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

HANDLE       CHostNamesDlg::m_hStopEvent = NULL;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

// Implementation
protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//{{AFX_MSG(CAboutDlg)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg message handlers

BOOL CAboutDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	CenterWindow();

	
	// TODO: Add extra about dlg initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

/////////////////////////////////////////////////////////////////////////////
// CHostNamesDlg dialog

CHostNamesDlg::CHostNamesDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CHostNamesDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CHostNamesDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_bsock = FALSE;
	phtr = NULL;
	m_Ok = 0;
	m_sock =(UINT)-1;
	memset(m_adr,0,4);	

}

void CHostNamesDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CHostNamesDlg)
	
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CHostNamesDlg, CDialog)
	//{{AFX_MSG_MAP(CHostNamesDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHostNamesDlg message handlers

BOOL CHostNamesDlg::OnInitDialog()
{

	
	
	CDialog::OnInitDialog();
	CenterWindow();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	CString strAboutMenu;
	strAboutMenu.LoadString(IDS_ABOUTBOX);
	if (!strAboutMenu.IsEmpty())
	{
		pSysMenu->AppendMenu(MF_SEPARATOR);
		pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
	}
	


	
	// TODO: Add extra initialization here
	/////////////////////////////////////	Initialisation
    {
	    WSADATA WData ;
        DWORD   dw;

		DWORD	length = MAX_COMPUTERNAME_LENGTH;
		char    locName[MAX_COMPUTERNAME_LENGTH];
		char	comp[128]="Computer: ";
	    
//	    int rv=WSAStartup(0x11, &WData);
//		if(rv != 0)
//		{
//			AfxMessageBox("Socket Init Error");
//		}
		m_bsock=TRUE;
		GetComputerName(locName,&length);
		strcat(comp,locName);
		SetWindowText(comp);
		ResolveTcpName();
        m_hctrls.hList = GetDlgItem(LB_LOCNET)->m_hWnd;
        m_hctrls.hStatic = GetDlgItem(ST_LOCAL)->m_hWnd;
		m_hctrls.hStatics = GetDlgItem(IDC_STATICSX)->m_hWnd;

        m_hStopEvent = ::CreateEvent(NULL,FALSE,FALSE,NULL);
        
        m_htr = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ResolveNetName,
                            (LPVOID)&m_hctrls,0,&dw);
    

      }
	return FALSE;  // return TRUE  unless you set the focus to a control
}

void CHostNamesDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CHostNamesDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CHostNamesDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CHostNamesDlg::OnClose() 
{
	m_Ok=1;
	if(m_bsock)
	{
		WSACleanup();	
	}

	CDialog::OnClose();
}

void CHostNamesDlg::ResolveTcpName(void)
{

    SOCKADDR_IN locSin; 
	PHOSTENT    pHe;
    int         err =0;    
    char        szBuf[80];
	char        sTemp[80];
	CEdit*		pe;
#ifdef WIN32    
    DWORD       dwSize;   
#else                     
    int         dwSize;   
#endif

    locSin.sin_family = AF_INET;
    dwSize=sizeof(szBuf);      
    gethostname((LPSTR)szBuf,(int)dwSize);
    pHe=gethostbyname(szBuf);

    if (pHe == NULL) 
    {
		err =1;
		goto EXITFN;
    }
    memcpy((LPSTR)&(locSin.sin_addr), pHe->h_addr,
             pHe->h_length);

    sprintf(sTemp,"%s",szBuf,pHe->h_name);
	pe=(CEdit*)GetDlgItem(ST_LOCAL);
	pe->SetWindowText(sTemp);
	m_hctrls.addr[0]=locSin.sin_addr.S_un.S_un_b.s_b1;
	m_hctrls.addr[1]=locSin.sin_addr.S_un.S_un_b.s_b2;
	m_hctrls.addr[2]=locSin.sin_addr.S_un.S_un_b.s_b3;
    m_hctrls.addr[3] = 0;
    m_hctrls.addr[4] = 0;
	
	sprintf(sTemp,"%d.%d.%d.%d",locSin.sin_addr.S_un.S_un_b.s_b1,
                                locSin.sin_addr.S_un.S_un_b.s_b2,
                                locSin.sin_addr.S_un.S_un_b.s_b3,
                                locSin.sin_addr.S_un.S_un_b.s_b4);
	pe=(CEdit*)GetDlgItem(ST_LOCIP);
	pe->SetWindowText(sTemp);
	EXITFN:
	;

}
						    

UINT ResolveNetName(LPVOID lpv)
{

    S_HWNDS*        pData;         
	char 			locnet[80];
	PHOSTENT        pHent=NULL;
	char			lbString[128];
    char			stString[80];
	int				ii = 0;
    int             i =  1;
    BYTE            local[6];

    int ifx=0;
    pData = (S_HWNDS*)lpv;
    memcpy(local,pData->addr,5);
    
    while(i<255 & ::WaitForSingleObject(CHostNamesDlg::m_hStopEvent,0)!=WAIT_OBJECT_0)
	{
		if(i%2==0)
			SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"Searching...");
		else
			SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"...");
		local[3] = i;
		if(pHent=gethostbyaddr((LPCSTR)local,4,PF_INET))
		{
			sprintf(lbString,"%s\t%u.%u.%u.%u",//printf
										pHent->h_name,
										(BYTE)local[0],
										(BYTE)local[1],
										(BYTE)local[2],
										(BYTE)local[3]);
            SendMessage(pData->hList,LB_ADDSTRING,0,(LPARAM)(LPCSTR)lbString);
			ii ++;
            sprintf(stString,"%d",ii);
			//SendMessage(pData->hList,WM_SETTEXT,0,(LPARAM)(LPCSTR)stString);
		}
        i++;
		SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"...");
	}
	SendMessage(pData->hStatics,WM_SETTEXT,0,(LPARAM)(LPCSTR)"FINISHED");
    return 1;
}






void CHostNamesDlg::OnOK() 
{
	// TODO: Add extra validation here
	m_Ok=1;

    TRACE("OK<-\n");
    ::SetEvent(m_hStopEvent);
    
    ::WaitForSingleObject(m_htr,20000);
    ::CloseHandle(m_hStopEvent);
    ::CloseHandle(m_htr);
    



	CDialog::OnOK();
}


void CHostNamesDlg::OnDestroy() 
{
	CDialog::OnDestroy();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -