📄 mento supplicantdlg.cpp
字号:
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 + -