?? 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 + -