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

📄 mento supplicantdlg.cpp

📁 一个非常漂亮的802.1x客户端源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	ShowWindow( SW_SHOW );
	SetForegroundWindow();
}

void CMentoSupplicantDlg::OnMinimize()
{
	//如果是开机自动运行且为托盘图标激活,则不生效最小化
	if ( m_bIsStartupConnect && m_iCallWay == 0 )
	{
//		m_bIsStartupConnect = false;
		return;
	}

	if ( m_bMinimizeModeSign )
		return;
	m_HotKey.GetHotKey( m_wVirtualKey, m_wKeyModifier );
	if ( m_iCallWay == 0 )
	{
		m_Notify.cbSize = sizeof(NOTIFYICONDATA);
		m_Notify.hWnd = GetSafeHwnd();
		m_Notify.uID = 0;
		m_Notify.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
		m_Notify.uCallbackMessage = WM_COMMAND;
		switch ( m_iState )
		{
		case IDT_DISCONNECT:
			m_Notify.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),
				MAKEINTRESOURCE(IDI_FAILED),IMAGE_ICON,16,16,NULL);
			lstrcpy(m_Notify.szTip,"Mento Supplicant -- 认证失败或未认证!!");
			break;
		case IDT_FIND_SERVER:
		case IDT_ACK_NAME:
		case IDT_ACK_PSWD:
			m_Notify.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),
				MAKEINTRESOURCE(IDI_CERTTING),IMAGE_ICON,16,16,NULL);
			lstrcpy(m_Notify.szTip,"Mento Supplicant -- 正在认证...");
			break;
		case IDT_ACK_ECHO:
			m_Notify.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(),
				MAKEINTRESOURCE(IDI_SUCCESS),IMAGE_ICON,16,16,NULL);
			lstrcpy(m_Notify.szTip,"Mento Supplicant -- 认证成功!!");
			break;
		}
		Shell_NotifyIcon(NIM_ADD,&m_Notify);
	}
	else if ( m_iCallWay == 1 )
	{
		//	真是烂,RegisterHotKey和CHotKeyCtrl使用的不是一样的KeyModifier
		//	在RegisterHotKey中对shift,alt,ctrl的定义如下:	
		//	#define MOD_ALT         0x0001
		//	#define MOD_CONTROL     0x0002
		//	#define MOD_SHIFT       0x0004
		//	#define MOD_WIN         0x0008
		//	在CHotKeyCtrl中对shift,alt,ctrl的定义如下:
		//	#define HOTKEYF_SHIFT           0x01
		//	#define HOTKEYF_CONTROL         0x02
		//	#define HOTKEYF_ALT             0x04
		//	#ifdef _MAC
		//	#define HOTKEYF_EXT             0x80
		//	#else
		//	#define HOTKEYF_EXT             0x08
		//	#endif
		//	也就是说两个地方使用的SHIFT和ALT的定义刚好是相反的,害我半天!
		WORD wTemp = 0;
		if ( m_wKeyModifier & HOTKEYF_ALT )
			wTemp |= MOD_ALT;

		if ( m_wKeyModifier & HOTKEYF_SHIFT )
			wTemp |= MOD_SHIFT;

		wTemp |= m_wKeyModifier & ~(HOTKEYF_ALT|HOTKEYF_SHIFT);
		if ( RegisterHotKey( GetSafeHwnd(), ICK_HOTKEY, wTemp, m_wVirtualKey ) == 0 )
		{
			LPVOID lpMsgBuf;
			FormatMessage( 
				FORMAT_MESSAGE_ALLOCATE_BUFFER | 
				FORMAT_MESSAGE_FROM_SYSTEM | 
				FORMAT_MESSAGE_IGNORE_INSERTS,
				NULL,
				GetLastError(),
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
				(LPTSTR) &lpMsgBuf,
				0,
				NULL 
			);
			PrintOutput( (const char*)lpMsgBuf ," ** 注册热键错误", true );
			LocalFree( lpMsgBuf );
			return;
		}
	}
	ShowWindow(SW_HIDE);
	m_bMinimizeModeSign = true;
}

BOOL CMentoSupplicantDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	switch ( wParam )
	{
	case IDSHELL_RESTORE:
		OnRestore();
		break;
	case IDSHELL_HIDE:
		OnMinimize();
		break;
	case IDSHELL_RECONNECT:
		OnStartCert();
		break;
	case IDSHELL_DISCONNECT:
		OnEndCert();
		SetBrandLabel(" ** 认证失败!!");
		break;
	case IDSHELL_ABOUT:
		{
			CAboutDlg dlgAbout;
			dlgAbout.DoModal();
		}
		break;
	case IDSHELL_EXIT:
		if ( m_bMinimizeModeSign && m_iCallWay == 0 )
		{
			m_bMinimizeModeSign = false;
			m_Notify.uFlags=NULL;
			Shell_NotifyIcon(NIM_DELETE,&m_Notify);
			ShowWindow( SW_SHOW );
			UnregisterHotKey ( GetSafeHwnd(), ICK_HOTKEY );
		}
		else if ( m_bMinimizeModeSign )
			UnregisterHotKey ( GetSafeHwnd(), ICK_HOTKEY );
		PostQuitMessage(0);
		break;
	case 0:
		switch (lParam)
		{
		case WM_LBUTTONDBLCLK:
			OnRestore();
			break;
		case WM_RBUTTONUP:
			CMenu m_menu;
			m_menu.CreatePopupMenu();
			m_menu.AppendMenu(MF_ENABLED, IDSHELL_RESTORE,"恢复窗口(&R)");
			m_menu.AppendMenu(MF_GRAYED,  IDSHELL_HIDE,"最小化到系统栏(&M)");
			m_menu.AppendMenu(MF_ENABLED, MF_SEPARATOR);
			m_menu.AppendMenu(MF_ENABLED, IDSHELL_RECONNECT,"重新连接(&C)");
			m_menu.AppendMenu(MF_ENABLED, IDSHELL_DISCONNECT,"断开连接(&D)");
			m_menu.AppendMenu(MF_ENABLED, MF_SEPARATOR);
			m_menu.AppendMenu(MF_ENABLED, IDSHELL_ABOUT,"关于(&A)");
			m_menu.AppendMenu(MF_ENABLED, IDSHELL_EXIT,"退出(&E)");
			CPoint m_point;
			GetCursorPos(&m_point);
			m_menu.TrackPopupMenu(TPM_LEFTALIGN,m_point.x,m_point.y,this);
			break;
		}
	}
	return CDialog::OnCommand(wParam, lParam);
}

void CMentoSupplicantDlg::OnExpand() 
{
	RECT myRect;
	RECT listRect;

	GetWindowRect(&myRect);
	m_OutputCtl.GetWindowRect(&listRect);
	if ( bLargeSign )	//大窗口模式
	{
		MoveWindow( myRect.left, myRect.top, 
			myRect.right - myRect.left , m_hSmall , true );
		GetDlgItem(IDC_EXPAND)->SetWindowText("更多选项(&O) >>");
		bLargeSign = false;
	}
	else
	{
		MoveWindow( myRect.left, myRect.top, 
			myRect.right - myRect.left , m_hLarge , true );
		GetDlgItem(IDC_EXPAND)->SetWindowText("<< 较少选项(&O)");
		bLargeSign = true;
	}
}

void CMentoSupplicantDlg::PrintOutput(CString SForOutput, 
									  CString STitle, bool BMsgBoxSign)
{
	CString sMyTitle;
	CString sMyContent;
  
	m_OutputCtl.Invalidate();
	m_OutputCtl.UpdateWindow();
	if ( STitle.GetLength() <= 0 )
	{
		sMyTitle = "Mento Supplicant Reporter";

		sMyContent = SForOutput;
		SetBrandLabel(sMyContent);
		m_OutputCtl.AddString( SForOutput );
	}
	else
	{
		sMyTitle = STitle;
		sMyContent = SForOutput;
		SetBrandLabel(sMyTitle);
		m_OutputCtl.AddString( sMyTitle );
	}

	if ( BMsgBoxSign || m_bInitProcessing )
		MessageBox( SForOutput, sMyTitle, MB_OK | MB_ICONERROR );
}

bool CMentoSupplicantDlg::SendPackage()
{
	static int iErrorTimes=0;
	static int iLastState=IDT_DISCONNECT;

	WriteDebugInfo("SendPacket"," >> Step 0");
	if ( m_iState == IDT_DISCONNECT )
		return false;

	if ( iLastState == m_iState && m_iState != IDT_ACK_ECHO )
		iErrorTimes++;
	else
	{
		iLastState = m_iState;
		iErrorTimes = 0;
	}

	WriteDebugInfo("SendPacket"," >> Step 1");
	if ( iErrorTimes >= MAX_ERROR_REPEAT )
	{
		iErrorTimes = 0;
		switch( m_iState )
		{
		case IDT_FIND_SERVER:
			PrintOutput(" ** 烂实达,又找不到服务器了!!");
			break;
		case IDT_ACK_NAME:
			PrintOutput(" ** 用户名发送超过次数,现在重启认证!!");
			break;
		case IDT_ACK_PSWD:
			PrintOutput(" ** 密码发送超过次数,现在重启认证!!");
			break;
		case IDT_ACK_ECHO:
			return true;
		}
		WriteDebugInfo("SendPacket"," >> Step 1a");
		SendEndCertPacket();
		WriteDebugInfo("SendPacket"," >> Step 1b");
		DoStartCert();
		WriteDebugInfo("SendPacket"," >> Step 1c");
		return false;
	}

	WriteDebugInfo("SendPacket"," >> Step 2");
	switch ( m_iState )
	{
	case IDT_FIND_SERVER:			//寻找服务器
		if ( SendFindServerPacket() != PCAP_SUCCESS )
		{
			PrintOutput( " ** 不能寻找服务器!!" );
			WriteDebugInfo("SendPacket"," >> Step 2a");
			return false;
		}
		break;

	case IDT_ACK_NAME:				//以用户名应答
		if ( SendNamePacket() != PCAP_SUCCESS )
		{
			PrintOutput( " ** 发送用户名失败!!" );
			WriteDebugInfo("SendPacket"," >> Step 2b");
			return false;
		}
		break;

	case IDT_ACK_PSWD:				//以MD5计算得到的值应答
		if ( SendPasswordPacket() != PCAP_SUCCESS )
		{
			PrintOutput( " ** 发送密码失败!!" );
			WriteDebugInfo("SendPacket"," >> Step 2c");
			return false;
		}
		break;

	case IDT_ACK_ECHO:				//运行时echo包
		SendEchoPacket();
		WriteDebugInfo("SendPacket"," >> Step 2d");
		break;
	}

	WriteDebugInfo("SendPacket"," >> Step 3");
	return true;
}

void CMentoSupplicantDlg::SetBrandLabel(CString SForSet)
{
	m_BrandLabel.SetWindowText( SForSet );
}

void CMentoSupplicantDlg::OnAutoConnect() 
{
	UpdateData();
}

void CMentoSupplicantDlg::OnConnectMinimize() 
{
	UpdateData();
	
}

void CMentoSupplicantDlg::OnSelchangingOption(NMHDR* pNMHDR, LRESULT* pResult) 
{
	//关闭所有的组件显示
	GetDlgItem( IDC_OUTPUT_LIST )->ShowWindow( SW_HIDE );

	GetDlgItem( IDC_MODE_GROUP )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_MODE_STANDARD )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_MODE_STAR )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_SELF_ECHO_INTERVAL_CHECK )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_ECHOINTERVAL )->ShowWindow( SW_HIDE );

	GetDlgItem( IDC_RUNOPTION_GROUP )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_CONNECT_MINIMIZE )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_AUTO_CONNECT )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_STARTUP_RUN )->ShowWindow( SW_HIDE );

	GetDlgItem( IDC_CALL_GROUP )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_CALL_SHELLICON )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_CALL_HOTKEY )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_HOTKEY_SHOW )->ShowWindow( SW_HIDE );
	
	GetDlgItem( IDC_INTELLIGENCE_GROUP )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_INTELLIGENCE_RECONNECT )->ShowWindow( SW_HIDE );
	
	GetDlgItem( IDC_STATIC_IP)->ShowWindow(SW_HIDE);
	GetDlgItem( IDC_ARTIFICALADDRESS_GROUP )->ShowWindow( SW_HIDE );
    GetDlgItem( IDC_ARTIFICALADDRESS_ENABLE )->ShowWindow( SW_HIDE );
	GetDlgItem( IDC_IPADDRESS )->ShowWindow( SW_HIDE );
	

	*pResult = 0;
}

void CMentoSupplicantDlg::OnSelchangeOption(NMHDR* pNMHDR, LRESULT* pResult) 
{
	//显示当前的组件
	switch ( m_OptionTab.GetCurSel() )
	{
	case 0:	//查看输出
		GetDlgItem( IDC_OUTPUT_LIST )->ShowWindow( SW_SHOW );
		break;
	case 1:	//认证选项
		GetDlgItem( IDC_MODE_GROUP )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_MODE_STANDARD )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_MODE_STAR )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_SELF_ECHO_INTERVAL_CHECK )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_ECHOINTERVAL )->ShowWindow( SW_SHOW );
		break;
	case 2:	//运行选项
		GetDlgItem( IDC_RUNOPTION_GROUP )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_CONNECT_MINIMIZE )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_AUTO_CONNECT )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_STARTUP_RUN )->ShowWindow( SW_SHOW );
		break;
	case 3:	//激活选项
		GetDlgItem( IDC_CALL_GROUP )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_CALL_SHELLICON )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_CALL_HOTKEY )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_HOTKEY_SHOW )->ShowWindow( SW_SHOW );
		break;
	case 4:
		GetDlgItem( IDC_INTELLIGENCE_GROUP )->ShowWindow( SW_SHOW );
		GetDlgItem( IDC_INTELLIGENCE_RECONNECT )->ShowWindow( SW_SHOW );
		break;
	case 5:
		GetDlgItem( IDC_ARTIFICALADDRESS_GROUP )->ShowWindow( SW_SHOW );
        GetDlgItem( IDC_ARTIFICALADDRESS_ENABLE )->ShowWindow( SW_SHOW );
	    GetDlgItem( IDC_IPADDRESS )->ShowWindow( SW_SHOW );		
		GetDlgItem( IDC_STATIC_IP)->ShowWindow(SW_SHOW);
		
		UpdateData(false);
		break;
	}
	*pResult = 0;
}

void CMentoSupplicantDlg::OnErrspaceOutputList() 
{
	// TODO: Add your control notification handler code here
	while ( m_OutputCtl.DeleteString(0) != LB_ERR  );
}

LONG CMentoSupplicantDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
	switch(wParam)
	{
	case ICK_HOTKEY:
		OnRestore();
		break;
	}
	return 1;
}

void CMentoSupplicantDlg::OnDestroy() 
{
	if ( m_pMainCertThread )
		TerminateThread( m_pMainCertThread, 100);
	if ( m_pPingThread )
		TerminateThread( m_pPingThread, 100);

	CDialog::OnDestroy();
	if ( m_pNICs )
	{
		delete m_pNICs;
		m_pNICs = NULL;
	}
}

void CMentoSupplicantDlg::OnCallHotkey() 
{
	UpdateData();
	if ( m_iCallWay == 0 )
		m_HotKey.EnableWindow( false );
	else
		m_HotKey.EnableWindow( true );
}

⌨️ 快捷键说明

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