style: Format source code and support grouping client

This commit is contained in:
yuanyuanxiang
2025-10-15 04:32:59 +08:00
parent 77087d2e06
commit 6b81ad1f81
244 changed files with 43052 additions and 42562 deletions

View File

@@ -17,55 +17,57 @@
#include "IOCPUDPServer.h"
#pragma comment(lib, "Dbghelp.lib")
CMy2015RemoteApp* GetThisApp() {
return ((CMy2015RemoteApp*)AfxGetApp());
CMy2015RemoteApp* GetThisApp()
{
return ((CMy2015RemoteApp*)AfxGetApp());
}
config& GetThisCfg() {
config *cfg = GetThisApp()->GetCfg();
return *cfg;
config& GetThisCfg()
{
config *cfg = GetThisApp()->GetCfg();
return *cfg;
}
std::string GetMasterHash() {
static std::string hash(skCrypt(MASTER_HASH));
return hash;
std::string GetMasterHash()
{
static std::string hash(skCrypt(MASTER_HASH));
return hash;
}
/**
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪BUG<55><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹʱ<D6B9><CAB1><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>dump<6D>ļ<EFBFBD><C4BC><EFBFBD>dumpĿ¼.
*/
long WINAPI whenbuged(_EXCEPTION_POINTERS *excp)
{
// <20><>ȡdump<6D>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3>򴴽<EFBFBD>֮
char dump[_MAX_PATH], *p = dump;
GetModuleFileNameA(NULL, dump, _MAX_PATH);
while (*p) ++p;
while ('\\' != *p) --p;
strcpy(p + 1, "dump");
if (_access(dump, 0) == -1)
_mkdir(dump);
char curTime[64];// <20><>ǰdump<6D>ļ<EFBFBD>
time_t TIME(time(0));
strftime(curTime, 64, "\\YAMA_%Y-%m-%d %H%M%S.dmp", localtime(&TIME));
strcat(dump, curTime);
HANDLE hFile = ::CreateFileA(dump, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE != hFile)
{
MINIDUMP_EXCEPTION_INFORMATION einfo = {::GetCurrentThreadId(), excp, FALSE};
::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(),
hFile, MiniDumpWithFullMemory, &einfo, NULL, NULL);
::CloseHandle(hFile);
}
// <20><>ȡdump<6D>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3>򴴽<EFBFBD>֮
char dump[_MAX_PATH], *p = dump;
GetModuleFileNameA(NULL, dump, _MAX_PATH);
while (*p) ++p;
while ('\\' != *p) --p;
strcpy(p + 1, "dump");
if (_access(dump, 0) == -1)
_mkdir(dump);
char curTime[64];// <20><>ǰdump<6D>ļ<EFBFBD>
time_t TIME(time(0));
strftime(curTime, 64, "\\YAMA_%Y-%m-%d %H%M%S.dmp", localtime(&TIME));
strcat(dump, curTime);
HANDLE hFile = ::CreateFileA(dump, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE != hFile) {
MINIDUMP_EXCEPTION_INFORMATION einfo = {::GetCurrentThreadId(), excp, FALSE};
::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(),
hFile, MiniDumpWithFullMemory, &einfo, NULL, NULL);
::CloseHandle(hFile);
}
return EXCEPTION_EXECUTE_HANDLER;
return EXCEPTION_EXECUTE_HANDLER;
}
// CMy2015RemoteApp
BEGIN_MESSAGE_MAP(CMy2015RemoteApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
std::string GetPwdHash();
@@ -74,20 +76,20 @@ std::string GetPwdHash();
CMy2015RemoteApp::CMy2015RemoteApp()
{
// ֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// ֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> InitInstance <20><>
m_Mutex = NULL;
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> InitInstance <20><>
m_Mutex = NULL;
#ifdef _DEBUG
std::string masterHash(GetMasterHash());
m_iniFile = GetPwdHash() == masterHash ? new config : new iniFile;
std::string masterHash(GetMasterHash());
m_iniFile = GetPwdHash() == masterHash ? new config : new iniFile;
#else
m_iniFile = new iniFile;
m_iniFile = new iniFile;
#endif
srand(static_cast<unsigned int>(time(0)));
srand(static_cast<unsigned int>(time(0)));
}
@@ -100,95 +102,89 @@ CMy2015RemoteApp theApp;
BOOL CMy2015RemoteApp::InitInstance()
{
std::string masterHash(GetMasterHash());
std::string mu = GetPwdHash()==masterHash ? "MASTER.EXE" : "YAMA.EXE";
std::string masterHash(GetMasterHash());
std::string mu = GetPwdHash()==masterHash ? "MASTER.EXE" : "YAMA.EXE";
#ifndef _DEBUG
{
m_Mutex = CreateMutex(NULL, FALSE, mu.c_str());
if (ERROR_ALREADY_EXISTS == GetLastError())
{
CloseHandle(m_Mutex);
m_Mutex = NULL;
MessageBoxA(NULL, "һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
return FALSE;
}
}
{
m_Mutex = CreateMutex(NULL, FALSE, mu.c_str());
if (ERROR_ALREADY_EXISTS == GetLastError()) {
CloseHandle(m_Mutex);
m_Mutex = NULL;
MessageBoxA(NULL, "һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
return FALSE;
}
}
#endif
SetUnhandledExceptionFilter(&whenbuged);
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);
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);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows XP <20>ϵ<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>嵥ָ<E5B5A5><D6B8>Ҫ
// ʹ<><CAB9> ComCtl32.dll <20>汾 6 <20><><EFBFBD><EFBFBD><EFBFBD>߰汾<DFB0><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ӻ<EFBFBD><D3BB><EFBFBD>ʽ<EFBFBD><CABD>
//<2F><><EFBFBD><EFBFBD>Ҫ InitCommonControlsEx()<29><><EFBFBD><EFBFBD><EFBFBD>򣬽<EFBFBD><F2A3ACBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows XP <20>ϵ<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>嵥ָ<E5B5A5><D6B8>Ҫ
// ʹ<><CAB9> ComCtl32.dll <20>汾 6 <20><><EFBFBD><EFBFBD><EFBFBD>߰汾<DFB0><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ӻ<EFBFBD><D3BB><EFBFBD>ʽ<EFBFBD><CABD>
//<2F><><EFBFBD><EFBFBD>Ҫ InitCommonControlsEx()<29><><EFBFBD><EFBFBD><EFBFBD>򣬽<EFBFBD><F2A3ACBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
CWinApp::InitInstance();
AfxEnableControlContainer();
AfxEnableControlContainer();
// <20><><EFBFBD><EFBFBD> shell <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>κ<EFBFBD> shell <20><><EFBFBD><EFBFBD>ͼ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> shell <20>б<EFBFBD><D0B1><EFBFBD>ͼ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
CShellManager *pShellManager = new CShellManager;
// <20><><EFBFBD><EFBFBD> shell <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>κ<EFBFBD> shell <20><><EFBFBD><EFBFBD>ͼ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> shell <20>б<EFBFBD><D0B1><EFBFBD>ͼ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
CShellManager *pShellManager = new CShellManager;
// <20><>׼<EFBFBD><D7BC>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>δʹ<CEB4><CAB9><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD>ܲ<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>С
// <20><><EFBFBD>տ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>õ<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TODO: Ӧ<>ʵ<EFBFBD><CAB5>޸ĸ<DEB8><C4B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA>˾<EFBFBD><CBBE><EFBFBD><EFBFBD>֯<EFBFBD><D6AF>
SetRegistryKey(_T("YAMA"));
// <20><>׼<EFBFBD><D7BC>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>δʹ<CEB4><CAB9><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD>ܲ<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>С
// <20><><EFBFBD>տ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>õ<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TODO: Ӧ<>ʵ<EFBFBD><CAB5>޸ĸ<DEB8><C4B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA>˾<EFBFBD><CBBE><EFBFBD><EFBFBD>֯<EFBFBD><D6AF>
SetRegistryKey(_T("YAMA"));
CMy2015RemoteDlg dlg(nullptr);
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: <20>ڴ˷<DAB4><CBB7>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
}
else if (nResponse == IDCANCEL)
{
// TODO: <20>ڴ˷<DAB4><CBB7>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
}
CMy2015RemoteDlg dlg(nullptr);
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK) {
// TODO: <20>ڴ˷<DAB4><CBB7>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
} else if (nResponse == IDCANCEL) {
// TODO: <20>ڴ˷<DAB4><CBB7>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
}
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD> shell <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pShellManager != NULL)
{
delete pShellManager;
}
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD> shell <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pShellManager != NULL) {
delete pShellManager;
}
// <20><><EFBFBD>ڶԻ<DAB6><D4BB><EFBFBD><EFBFBD>ѹرգ<D8B1><D5A3><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD> FALSE <20>Ա<EFBFBD><D4B1>˳<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>á<EFBFBD>
return FALSE;
// <20><><EFBFBD>ڶԻ<DAB6><D4BB><EFBFBD><EFBFBD>ѹرգ<D8B1><D5A3><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD> FALSE <20>Ա<EFBFBD><D4B1>˳<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>á<EFBFBD>
return FALSE;
}
int CMy2015RemoteApp::ExitInstance()
{
if (m_Mutex)
{
CloseHandle(m_Mutex);
m_Mutex = NULL;
}
__try{
Delete();
}__except(EXCEPTION_EXECUTE_HANDLER){
}
if (m_Mutex) {
CloseHandle(m_Mutex);
m_Mutex = NULL;
}
__try {
Delete();
} __except(EXCEPTION_EXECUTE_HANDLER) {
}
SAFE_DELETE(m_iniFile);
SAFE_DELETE(m_iniFile);
return CWinApp::ExitInstance();
return CWinApp::ExitInstance();
}

View File

@@ -5,7 +5,7 @@
#pragma once
#ifndef __AFXWIN_H__
#error "<22>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>stdafx.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PCH <20>ļ<EFBFBD>"
#error "<22>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>stdafx.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PCH <20>ļ<EFBFBD>"
#endif
#include "resource.h" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -18,117 +18,126 @@
// <20>йش<D0B9><D8B4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2015Remote.cpp
//
// ServerPair:
// ServerPair:
// һ<><D2BB>SOCKET<45><54><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>: ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>TCP<43><50>UDP.
class ServerPair
{
private:
Server* m_tcpServer;
Server* m_udpServer;
Server* m_tcpServer;
Server* m_udpServer;
public:
ServerPair(int method=0) :
m_tcpServer(new IOCPServer),
m_udpServer(method ? (Server*)new IOCPKCPServer : new IOCPUDPServer) {}
virtual ~ServerPair() { SAFE_DELETE(m_tcpServer); SAFE_DELETE(m_udpServer); }
ServerPair(int method=0) :
m_tcpServer(new IOCPServer),
m_udpServer(method ? (Server*)new IOCPKCPServer : new IOCPUDPServer) {}
virtual ~ServerPair()
{
SAFE_DELETE(m_tcpServer);
SAFE_DELETE(m_udpServer);
}
BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) {
UINT ret1 = m_tcpServer->StartServer(NotifyProc, OffProc, uPort);
if (ret1) MessageBox(NULL, CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>: ") + std::to_string(uPort).c_str()
+ CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ") + std::to_string(ret1).c_str(), "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
UINT ret2 = m_udpServer->StartServer(NotifyProc, OffProc, uPort);
if (ret2) MessageBox(NULL, CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>: ") + std::to_string(uPort).c_str()
+ CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ") + std::to_string(ret2).c_str(), "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
return (ret1 == 0 || ret2 == 0);
}
BOOL StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort)
{
UINT ret1 = m_tcpServer->StartServer(NotifyProc, OffProc, uPort);
if (ret1) MessageBox(NULL, CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>: ") + std::to_string(uPort).c_str()
+ CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ") + std::to_string(ret1).c_str(), "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
UINT ret2 = m_udpServer->StartServer(NotifyProc, OffProc, uPort);
if (ret2) MessageBox(NULL, CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>: ") + std::to_string(uPort).c_str()
+ CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ") + std::to_string(ret2).c_str(), "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
return (ret1 == 0 || ret2 == 0);
}
void UpdateMaxConnection(int maxConn) {
if (m_tcpServer) m_tcpServer->UpdateMaxConnection(maxConn);
if (m_udpServer) m_udpServer->UpdateMaxConnection(maxConn);
}
void UpdateMaxConnection(int maxConn)
{
if (m_tcpServer) m_tcpServer->UpdateMaxConnection(maxConn);
if (m_udpServer) m_udpServer->UpdateMaxConnection(maxConn);
}
void Destroy() {
if (m_tcpServer) m_tcpServer->Destroy();
if (m_udpServer) m_udpServer->Destroy();
}
void Destroy()
{
if (m_tcpServer) m_tcpServer->Destroy();
if (m_udpServer) m_udpServer->Destroy();
}
void Disconnect(CONTEXT_OBJECT* ctx) {
if (m_tcpServer) m_tcpServer->Disconnect(ctx);
if (m_udpServer) m_udpServer->Disconnect(ctx);
}
void Disconnect(CONTEXT_OBJECT* ctx)
{
if (m_tcpServer) m_tcpServer->Disconnect(ctx);
if (m_udpServer) m_udpServer->Disconnect(ctx);
}
};
class CMy2015RemoteApp : public CWinApp
{
private:
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD><C8A1>
config* m_iniFile = nullptr;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
std::vector<ServerPair*> m_iocpServer;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE m_Mutex = nullptr;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD><C8A1>
config* m_iniFile = nullptr;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
std::vector<ServerPair*> m_iocpServer;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE m_Mutex = nullptr;
public:
CMy2015RemoteApp();
CMy2015RemoteApp();
CImageList m_pImageList_Large; //ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
CImageList m_pImageList_Small; //ϵͳСͼ<D0A1><CDBC>
CImageList m_pImageList_Large; //ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
CImageList m_pImageList_Small; //ϵͳСͼ<D0A1><CDBC>
virtual BOOL InitInstance();
virtual BOOL InitInstance();
config* GetCfg() const {
return m_iniFile;
}
config* GetCfg() const
{
return m_iniFile;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0
// nPortʾ<74><CABE>: 6543;7543
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, const std::string& uPort, int maxConn, const std::string& method) {
bool succeed = false;
auto list = StringToVector(uPort, ';');
auto methods = StringToVector(method, ';', list.size());
for (int i=0; i<list.size(); ++i)
{
int port = std::atoi(list[i].c_str());
auto svr = new ServerPair(atoi(methods[i].c_str()));
BOOL ret = svr->StartServer(NotifyProc, OffProc, port);
if (ret == FALSE) {
SAFE_DELETE(svr);
continue;
}
svr->UpdateMaxConnection(maxConn);
succeed = true;
m_iocpServer.push_back(svr);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>0
// nPortʾ<74><CABE>: 6543;7543
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, const std::string& uPort, int maxConn, const std::string& method)
{
bool succeed = false;
auto list = StringToVector(uPort, ';');
auto methods = StringToVector(method, ';', list.size());
for (int i=0; i<list.size(); ++i) {
int port = std::atoi(list[i].c_str());
auto svr = new ServerPair(atoi(methods[i].c_str()));
BOOL ret = svr->StartServer(NotifyProc, OffProc, port);
if (ret == FALSE) {
SAFE_DELETE(svr);
continue;
}
svr->UpdateMaxConnection(maxConn);
succeed = true;
m_iocpServer.push_back(svr);
}
return succeed ? 0 : -1;
}
return succeed ? 0 : -1;
}
// <20>ͷŷ<CDB7><C5B7><EFBFBD><EFBFBD><EFBFBD> SOCKET
void Destroy() {
for (int i=0; i<m_iocpServer.size(); ++i)
{
m_iocpServer[i]->Destroy();
}
}
// <20>ͷŷ<CDB7><C5B7><EFBFBD><EFBFBD><EFBFBD> SOCKET
void Destroy()
{
for (int i=0; i<m_iocpServer.size(); ++i) {
m_iocpServer[i]->Destroy();
}
}
// <20>ͷŷ<CDB7><C5B7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
void Delete() {
for (int i = 0; i < m_iocpServer.size(); ++i)
{
SAFE_DELETE(m_iocpServer[i]);
}
m_iocpServer.clear();
}
// <20>ͷŷ<CDB7><C5B7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
void Delete()
{
for (int i = 0; i < m_iocpServer.size(); ++i) {
SAFE_DELETE(m_iocpServer[i]);
}
m_iocpServer.clear();
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void UpdateMaxConnection(int maxConn) {
for (int i = 0; i < m_iocpServer.size(); ++i)
{
m_iocpServer[i]->UpdateMaxConnection(maxConn);
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void UpdateMaxConnection(int maxConn)
{
for (int i = 0; i < m_iocpServer.size(); ++i) {
m_iocpServer[i]->UpdateMaxConnection(maxConn);
}
}
DECLARE_MESSAGE_MAP()
virtual int ExitInstance();
DECLARE_MESSAGE_MAP()
virtual int ExitInstance();
};
extern CMy2015RemoteApp theApp;

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -14,12 +14,13 @@
#define CLIENT_EXIT_WITH_SERVER 0
typedef struct DllInfo {
std::string Name;
Buffer* Data;
~DllInfo() {
SAFE_DELETE(Data);
}
}DllInfo;
std::string Name;
Buffer* Data;
~DllInfo()
{
SAFE_DELETE(Data);
}
} DllInfo;
#define ID_DYNAMIC_MENU_BASE 36500
@@ -27,48 +28,57 @@ typedef struct DllInfo {
#include <unordered_map>
#include <fstream>
#include "CGridDialog.h"
#include <set>
enum {
MAP_NOTE,
MAP_LOCATION,
MAP_LEVEL,
MAP_NOTE,
MAP_LOCATION,
MAP_LEVEL,
};
struct _ClientValue
{
char Note[64];
char Location[64];
char Level;
char Reserved[127]; // Ԥ<><D4A4>
_ClientValue() {
memset(this, 0, sizeof(_ClientValue));
}
_ClientValue(const CString& loc, const CString& s) {
memset(this, 0, sizeof(_ClientValue));
strcpy_s(Note, s.GetString());
strcpy_s(Location, loc.GetString());
}
void UpdateNote(const CString& s) {
strcpy_s(Note, s.GetString());
}
void UpdateLocation(const CString& loc) {
strcpy_s(Location, loc.GetString());
}
void UpdateLevel(int level) {
Level = level;
}
const char* GetNote() const {
return Note;
}
const char* GetLocation() const {
return Location;
}
int GetLevel() const {
return Level;
}
int GetLength() const {
return sizeof(_ClientValue);
}
struct _ClientValue {
char Note[64];
char Location[64];
char Level;
char Reserved[127]; // Ԥ<><D4A4>
_ClientValue()
{
memset(this, 0, sizeof(_ClientValue));
}
_ClientValue(const CString& loc, const CString& s)
{
memset(this, 0, sizeof(_ClientValue));
strcpy_s(Note, s.GetString());
strcpy_s(Location, loc.GetString());
}
void UpdateNote(const CString& s)
{
strcpy_s(Note, s.GetString());
}
void UpdateLocation(const CString& loc)
{
strcpy_s(Location, loc.GetString());
}
void UpdateLevel(int level)
{
Level = level;
}
const char* GetNote() const
{
return Note;
}
const char* GetLocation() const
{
return Location;
}
int GetLevel() const
{
return Level;
}
int GetLength() const
{
return sizeof(_ClientValue);
}
};
typedef uint64_t ClientKey;
@@ -85,227 +95,232 @@ void LoadFromFile(ComputerNoteMap& data, const std::string& filename);
//////////////////////////////////////////////////////////////////////////
enum
{
PAYLOAD_DLL_X86 = 0, // 32λ DLL
PAYLOAD_DLL_X64 = 1, // 64λ DLL
PAYLOAD_MAXTYPE
enum {
PAYLOAD_DLL_X86 = 0, // 32λ DLL
PAYLOAD_DLL_X64 = 1, // 64λ DLL
PAYLOAD_MAXTYPE
};
// CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
class CMy2015RemoteDlg : public CDialogEx
{
protected:
ComputerNoteMap m_ClientMap;
CString GetClientMapData(ClientKey key, int typ) {
EnterCriticalSection(&m_cs);
auto f = m_ClientMap.find(key);
CString r;
if (f != m_ClientMap.end()) {
switch (typ)
{
case MAP_NOTE:
r = f->second.GetNote();
break;
case MAP_LOCATION:
r = f->second.GetLocation();
break;
default:
break;
}
}
LeaveCriticalSection(&m_cs);
return r;
}
void SetClientMapData(ClientKey key, int typ, const char* value) {
EnterCriticalSection(&m_cs);
switch (typ)
{
case MAP_NOTE:
m_ClientMap[key].UpdateNote(value);
break;
case MAP_LOCATION:
m_ClientMap[key].UpdateLocation(value);
break;
default:
break;
}
LeaveCriticalSection(&m_cs);
}
// <20><><EFBFBD><EFBFBD>
ComputerNoteMap m_ClientMap;
CString GetClientMapData(ClientKey key, int typ)
{
EnterCriticalSection(&m_cs);
auto f = m_ClientMap.find(key);
CString r;
if (f != m_ClientMap.end()) {
switch (typ) {
case MAP_NOTE:
r = f->second.GetNote();
break;
case MAP_LOCATION:
r = f->second.GetLocation();
break;
default:
break;
}
}
LeaveCriticalSection(&m_cs);
return r;
}
void SetClientMapData(ClientKey key, int typ, const char* value)
{
EnterCriticalSection(&m_cs);
switch (typ) {
case MAP_NOTE:
m_ClientMap[key].UpdateNote(value);
break;
case MAP_LOCATION:
m_ClientMap[key].UpdateLocation(value);
break;
default:
break;
}
LeaveCriticalSection(&m_cs);
}
// <20><><EFBFBD><EFBFBD>
public:
CMy2015RemoteDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
~CMy2015RemoteDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_MY2015REMOTE_DIALOG };
CMy2015RemoteDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
~CMy2015RemoteDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_MY2015REMOTE_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
// ʵ<><CAB5>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
// ʵ<><CAB5>
protected:
HICON m_hIcon;
void* m_tinyDLL;
std::string m_superPass;
HICON m_hIcon;
void* m_tinyDLL;
std::string m_superPass;
// <20><><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>Ϣӳ<CFA2><EFBFBD><E4BAAF>
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
// <20><><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>Ϣӳ<CFA2><EFBFBD><E4BAAF>
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
void SortByColumn(int nColumn);
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
template<class T, int id, int Show = SW_SHOW> LRESULT OpenDialog(WPARAM wParam, LPARAM lParam)
{
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam;
T* Dlg = new T(this, ContextObject->GetServer(), ContextObject);
BOOL isGrid = id == IDD_DIALOG_SCREEN_SPY;
BOOL ok = (isGrid&&m_gridDlg) ? m_gridDlg->HasSlot() : FALSE;
Dlg->Create(id, ok ? m_gridDlg : GetDesktopWindow());
Dlg->ShowWindow(Show);
if (ok) {
m_gridDlg->AddChild((CDialog*)Dlg);
LONG style = ::GetWindowLong(Dlg->GetSafeHwnd(), GWL_STYLE);
style &= ~(WS_CAPTION | WS_SIZEBOX); // ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>С
::SetWindowLong(Dlg->GetSafeHwnd(), GWL_STYLE, style);
::SetWindowPos(Dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
m_gridDlg->ShowWindow(isGrid ? SW_SHOWMAXIMIZED : SW_HIDE);
}
void SortByColumn(int nColumn);
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
template<class T, int id, int Show = SW_SHOW> LRESULT OpenDialog(WPARAM wParam, LPARAM lParam)
{
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)lParam;
T* Dlg = new T(this, ContextObject->GetServer(), ContextObject);
BOOL isGrid = id == IDD_DIALOG_SCREEN_SPY;
BOOL ok = (isGrid&&m_gridDlg) ? m_gridDlg->HasSlot() : FALSE;
Dlg->Create(id, ok ? m_gridDlg : GetDesktopWindow());
Dlg->ShowWindow(Show);
if (ok) {
m_gridDlg->AddChild((CDialog*)Dlg);
LONG style = ::GetWindowLong(Dlg->GetSafeHwnd(), GWL_STYLE);
style &= ~(WS_CAPTION | WS_SIZEBOX); // ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>С
::SetWindowLong(Dlg->GetSafeHwnd(), GWL_STYLE, style);
::SetWindowPos(Dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
m_gridDlg->ShowWindow(isGrid ? SW_SHOWMAXIMIZED : SW_HIDE);
}
ContextObject->hWnd = Dlg->GetSafeHwnd();
ContextObject->hDlg = Dlg;
ContextObject->hWnd = Dlg->GetSafeHwnd();
ContextObject->hDlg = Dlg;
return 0;
}
VOID InitControl(); //<2F><>ʼ<EFBFBD>ؼ<EFBFBD>
VOID TestOnline(); //<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing,
CString ver, CString startTime, const std::vector<std::string>& v, CONTEXT_OBJECT* ContextObject);
VOID ShowMessage(CString strType, CString strMsg);
VOID CreatStatusBar();
VOID CreateToolBar();
VOID CreateNotifyBar();
VOID CreateSolidMenu();
int m_nMaxConnection;
BOOL Activate(const std::string& nPort, int nMaxConnection, const std::string& method);
void UpdateActiveWindow(CONTEXT_OBJECT* ctx);
void SendMasterSettings(CONTEXT_OBJECT* ctx);
VOID SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL, bool is64Bit);
Buffer* m_ServerDLL[PAYLOAD_MAXTYPE];
Buffer* m_ServerBin[PAYLOAD_MAXTYPE];
MasterSettings m_settings;
static BOOL CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject);
static BOOL CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject);
VOID MessageHandle(CONTEXT_OBJECT* ContextObject);
VOID SendSelectedCommand(PBYTE szBuffer, ULONG ulLength);
// <20><>ʾ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CWnd* m_pFloatingTip = nullptr;
CListCtrl m_CList_Online;
CListCtrl m_CList_Message;
return 0;
}
VOID InitControl(); //<2F><>ʼ<EFBFBD>ؼ<EFBFBD>
VOID TestOnline(); //<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
VOID AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing,
CString ver, CString startTime, const std::vector<std::string>& v, CONTEXT_OBJECT* ContextObject);
VOID ShowMessage(CString strType, CString strMsg);
VOID CreatStatusBar();
VOID CreateToolBar();
VOID CreateNotifyBar();
VOID CreateSolidMenu();
int m_nMaxConnection;
BOOL Activate(const std::string& nPort, int nMaxConnection, const std::string& method);
void UpdateActiveWindow(CONTEXT_OBJECT* ctx);
void SendMasterSettings(CONTEXT_OBJECT* ctx);
VOID SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL, bool is64Bit);
Buffer* m_ServerDLL[PAYLOAD_MAXTYPE];
Buffer* m_ServerBin[PAYLOAD_MAXTYPE];
MasterSettings m_settings;
static BOOL CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject);
static BOOL CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject);
VOID MessageHandle(CONTEXT_OBJECT* ContextObject);
VOID SendSelectedCommand(PBYTE szBuffer, ULONG ulLength);
// <20><>ʾ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CWnd* m_pFloatingTip = nullptr;
CListCtrl m_CList_Online;
CListCtrl m_CList_Message;
std::set<context*> m_HostList;
std::set<std::string> m_GroupList;
std::string m_selectedGroup;
void LoadListData(const std::string& group);
void DeletePopupWindow();
void DeletePopupWindow();
CStatusBar m_StatusBar; //״̬<D7B4><CCAC>
CTrueColorToolBar m_ToolBar;
CGridDialog * m_gridDlg = NULL;
std::vector<DllInfo*> m_DllList;
NOTIFYICONDATA m_Nid;
HANDLE m_hExit;
CRITICAL_SECTION m_cs;
BOOL isClosed;
CMenu m_MainMenu;
CBitmap m_bmOnline[17];
uint64_t m_superID;
enum {
STATUS_UNKNOWN = -1,
STATUS_RUN = 0,
STATUS_STOP = 1,
STATUS_EXIT = 2,
};
HANDLE m_hFRPThread = NULL;
int m_frpStatus = STATUS_RUN;
static DWORD WINAPI StartFrpClient(LPVOID param);
void ApplyFrpSettings();
bool CheckValid(int trail = 14);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnClose();
void Release();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnOnlineMessage();
afx_msg void OnOnlineDelete();
afx_msg void OnOnlineUpdate();
afx_msg void OnAbout();
afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
afx_msg void OnNotifyShow();
afx_msg void OnNotifyExit();
afx_msg void OnMainSet();
afx_msg void OnMainExit();
afx_msg void OnOnlineCmdManager();
afx_msg void OnOnlineProcessManager();
afx_msg void OnOnlineWindowManager();
afx_msg void OnOnlineDesktopManager();
afx_msg void OnOnlineAudioManager();
afx_msg void OnOnlineVideoManager();
afx_msg void OnOnlineFileManager();
afx_msg void OnOnlineServerManager();
afx_msg void OnOnlineRegisterManager();
afx_msg VOID OnOnlineKeyboardManager();
afx_msg void OnOnlineBuildClient();
afx_msg LRESULT OnUserToOnlineList(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnUserOfflineMsg(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenScreenSpyDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenFileManagerDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenTalkDialog(WPARAM wPrarm,LPARAM lParam);
afx_msg LRESULT OnOpenShellDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenSystemDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenAudioDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenServicesDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenKeyboardDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenHideScreenDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenMachineManagerDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenProxyDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenChatDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenDecryptDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenFileMgrDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenDrawingBoard(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT UPXProcResult(WPARAM wParam, LPARAM lParam);
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnOnlineShare();
afx_msg void OnToolAuth();
afx_msg void OnToolGenMaster();
afx_msg void OnMainProxy();
afx_msg void OnOnlineHostnote();
afx_msg void OnHelpImportant();
afx_msg void OnHelpFeedback();
afx_msg void OnDynamicSubMenu(UINT nID);
afx_msg void OnOnlineVirtualDesktop();
afx_msg void OnOnlineGrayDesktop();
afx_msg void OnOnlineRemoteDesktop();
afx_msg void OnOnlineH264Desktop();
afx_msg void OnWhatIsThis();
afx_msg void OnOnlineAuthorize();
void OnListClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOnlineUnauthorize();
afx_msg void OnToolRequestAuth();
afx_msg LRESULT OnPasswordCheck(WPARAM wParam, LPARAM lParam);
afx_msg void OnToolInputPassword();
afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam);
afx_msg void OnToolGenShellcode();
afx_msg void OnOnlineAssignTo();
afx_msg void OnNMCustomdrawMessage(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOnlineAddWatch();
afx_msg void OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOnlineRunAsAdmin();
afx_msg LRESULT OnShowErrMessage(WPARAM wParam, LPARAM lParam);
afx_msg void OnMainWallet();
afx_msg void OnToolRcedit();
afx_msg void OnOnlineUninstall();
afx_msg void OnOnlinePrivateScreen();
CStatusBar m_StatusBar; //״̬<D7B4><CCAC>
CTrueColorToolBar m_ToolBar;
CGridDialog * m_gridDlg = NULL;
std::vector<DllInfo*> m_DllList;
NOTIFYICONDATA m_Nid;
HANDLE m_hExit;
CRITICAL_SECTION m_cs;
BOOL isClosed;
CMenu m_MainMenu;
CBitmap m_bmOnline[17];
uint64_t m_superID;
enum {
STATUS_UNKNOWN = -1,
STATUS_RUN = 0,
STATUS_STOP = 1,
STATUS_EXIT = 2,
};
HANDLE m_hFRPThread = NULL;
int m_frpStatus = STATUS_RUN;
static DWORD WINAPI StartFrpClient(LPVOID param);
void ApplyFrpSettings();
bool CheckValid(int trail = 14);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnClose();
void Release();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnOnlineMessage();
afx_msg void OnOnlineDelete();
afx_msg void OnOnlineUpdate();
afx_msg void OnAbout();
afx_msg void OnIconNotify(WPARAM wParam,LPARAM lParam);
afx_msg void OnNotifyShow();
afx_msg void OnNotifyExit();
afx_msg void OnMainSet();
afx_msg void OnMainExit();
afx_msg void OnOnlineCmdManager();
afx_msg void OnOnlineProcessManager();
afx_msg void OnOnlineWindowManager();
afx_msg void OnOnlineDesktopManager();
afx_msg void OnOnlineAudioManager();
afx_msg void OnOnlineVideoManager();
afx_msg void OnOnlineFileManager();
afx_msg void OnOnlineServerManager();
afx_msg void OnOnlineRegisterManager();
afx_msg VOID OnOnlineKeyboardManager();
afx_msg void OnOnlineBuildClient();
afx_msg LRESULT OnUserToOnlineList(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnUserOfflineMsg(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenScreenSpyDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenFileManagerDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenTalkDialog(WPARAM wPrarm,LPARAM lParam);
afx_msg LRESULT OnOpenShellDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenSystemDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenAudioDialog(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenServicesDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnHandleMessage(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenKeyboardDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenHideScreenDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenMachineManagerDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenProxyDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenChatDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenDecryptDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenFileMgrDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenDrawingBoard(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT UPXProcResult(WPARAM wParam, LPARAM lParam);
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnOnlineShare();
afx_msg void OnToolAuth();
afx_msg void OnToolGenMaster();
afx_msg void OnMainProxy();
afx_msg void OnOnlineHostnote();
afx_msg void OnHelpImportant();
afx_msg void OnHelpFeedback();
afx_msg void OnDynamicSubMenu(UINT nID);
afx_msg void OnOnlineVirtualDesktop();
afx_msg void OnOnlineGrayDesktop();
afx_msg void OnOnlineRemoteDesktop();
afx_msg void OnOnlineH264Desktop();
afx_msg void OnWhatIsThis();
afx_msg void OnOnlineAuthorize();
void OnListClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOnlineUnauthorize();
afx_msg void OnToolRequestAuth();
afx_msg LRESULT OnPasswordCheck(WPARAM wParam, LPARAM lParam);
afx_msg void OnToolInputPassword();
afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam);
afx_msg void OnToolGenShellcode();
afx_msg void OnOnlineAssignTo();
afx_msg void OnNMCustomdrawMessage(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOnlineAddWatch();
afx_msg void OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOnlineRunAsAdmin();
afx_msg LRESULT OnShowErrMessage(WPARAM wParam, LPARAM lParam);
afx_msg void OnMainWallet();
afx_msg void OnToolRcedit();
afx_msg void OnOnlineUninstall();
afx_msg void OnOnlinePrivateScreen();
CTabCtrl m_GroupTab;
afx_msg void OnSelchangeGroupTab(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnObfsShellcode();
};

View File

@@ -258,6 +258,7 @@
<ClInclude Include="..\..\common\encrypt.h" />
<ClInclude Include="..\..\common\ikcp.h" />
<ClInclude Include="..\..\common\iniFile.h" />
<ClInclude Include="..\..\common\obfs.h" />
<ClInclude Include="2015Remote.h" />
<ClInclude Include="2015RemoteDlg.h" />
<ClInclude Include="adapter.h" />

View File

@@ -122,6 +122,7 @@
<ClInclude Include="CGridDialog.h" />
<ClInclude Include="CWalletDlg.h" />
<ClInclude Include="CRcEditDlg.h" />
<ClInclude Include="..\..\common\obfs.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="2015Remote.rc" />

View File

@@ -12,33 +12,33 @@
IMPLEMENT_DYNAMIC(CAudioDlg, CDialog)
CAudioDlg::CAudioDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO)
, m_bSend(FALSE)
: DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO)
, m_bSend(FALSE)
{
m_bIsWorking = TRUE;
m_bThreadRun = FALSE;
m_bIsWorking = TRUE;
m_bThreadRun = FALSE;
m_hWorkThread = NULL;
m_nTotalRecvBytes = 0;
m_hWorkThread = NULL;
m_nTotalRecvBytes = 0;
}
CAudioDlg::~CAudioDlg()
{
m_bIsWorking = FALSE;
while (m_bThreadRun)
Sleep(50);
m_bIsWorking = FALSE;
while (m_bThreadRun)
Sleep(50);
}
void CAudioDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_CHECK, m_bSend);
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_CHECK, m_bSend);
}
BEGIN_MESSAGE_MAP(CAudioDlg, CDialog)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_CHECK, &CAudioDlg::OnBnClickedCheck)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_CHECK, &CAudioDlg::OnBnClickedCheck)
END_MESSAGE_MAP()
@@ -47,87 +47,83 @@ END_MESSAGE_MAP()
BOOL CAudioDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog::OnInitDialog();
SetIcon(m_hIcon,FALSE);
SetIcon(m_hIcon,FALSE);
CString strString;
strString.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(strString);
CString strString;
strString.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(strString);
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox
m_hWorkThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL);
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox
m_hWorkThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL);
m_bThreadRun = m_hWorkThread ? TRUE : FALSE;
m_bThreadRun = m_hWorkThread ? TRUE : FALSE;
GetDlgItem(IDC_CHECK)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK)->EnableWindow(TRUE);
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
DWORD CAudioDlg::WorkThread(LPVOID lParam)
{
CAudioDlg *This = (CAudioDlg *)lParam;
CAudioDlg *This = (CAudioDlg *)lParam;
while (This->m_bIsWorking)
{
if (!This->m_bSend)
{
WAIT_n(This->m_bIsWorking, 1, 50);
continue;
}
DWORD dwBufferSize = 0;
LPBYTE szBuffer = This->m_AudioObject.GetRecordBuffer(&dwBufferSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (This->m_bIsWorking) {
if (!This->m_bSend) {
WAIT_n(This->m_bIsWorking, 1, 50);
continue;
}
DWORD dwBufferSize = 0;
LPBYTE szBuffer = This->m_AudioObject.GetRecordBuffer(&dwBufferSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (szBuffer != NULL && dwBufferSize > 0)
This->m_ContextObject->Send2Client(szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ
}
This->m_bThreadRun = FALSE;
if (szBuffer != NULL && dwBufferSize > 0)
This->m_ContextObject->Send2Client(szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ
}
This->m_bThreadRun = FALSE;
return 0;
return 0;
}
void CAudioDlg::OnReceiveComplete(void)
{
m_nTotalRecvBytes += m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; //1000+ =1000 1
CString strString;
strString.Format("Receive %d KBytes", m_nTotalRecvBytes / 1024);
SetDlgItemText(IDC_TIPS, strString);
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
{
case TOKEN_AUDIO_DATA:
{
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
m_AudioObject.PlayBuffer(tmp.Buf(), tmp.length()); //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
m_nTotalRecvBytes += m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; //1000+ =1000 1
CString strString;
strString.Format("Receive %d KBytes", m_nTotalRecvBytes / 1024);
SetDlgItemText(IDC_TIPS, strString);
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0)) {
case TOKEN_AUDIO_DATA: {
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
m_AudioObject.PlayBuffer(tmp.Buf(), tmp.length()); //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
}
void CAudioDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
m_bIsWorking = FALSE;
WaitForSingleObject(m_hWorkThread, INFINITE);
DialogBase::OnClose();
m_bIsWorking = FALSE;
WaitForSingleObject(m_hWorkThread, INFINITE);
DialogBase::OnClose();
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
void CAudioDlg::OnBnClickedCheck()
{
UpdateData(true);
UpdateData(true);
}

View File

@@ -7,31 +7,31 @@
class CAudioDlg : public DialogBase
{
DECLARE_DYNAMIC(CAudioDlg)
DECLARE_DYNAMIC(CAudioDlg)
public:
CAudioDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CAudioDlg();
CAudioDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CAudioDlg();
DWORD m_nTotalRecvBytes;
BOOL m_bIsWorking;
BOOL m_bThreadRun;
HANDLE m_hWorkThread;
CAudio m_AudioObject;
DWORD m_nTotalRecvBytes;
BOOL m_bIsWorking;
BOOL m_bThreadRun;
HANDLE m_hWorkThread;
CAudio m_AudioObject;
static DWORD WINAPI WorkThread(LPVOID lParam);
static DWORD WINAPI WorkThread(LPVOID lParam);
void CAudioDlg::OnReceiveComplete(void);
void CAudioDlg::OnReceiveComplete(void);
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_AUDIO };
enum { IDD = IDD_DIALOG_AUDIO };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
BOOL m_bSend; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnBnClickedCheck();
BOOL m_bSend; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnBnClickedCheck();
};

View File

@@ -9,251 +9,238 @@
CBuffer::CBuffer(void)
{
m_ulMaxLength = 0;
m_ulMaxLength = 0;
m_Ptr = m_Base = NULL;
m_Ptr = m_Base = NULL;
InitializeCriticalSection(&m_cs);
InitializeCriticalSection(&m_cs);
}
CBuffer::~CBuffer(void)
{
if (m_Base)
{
VirtualFree(m_Base, 0, MEM_RELEASE);
m_Base = NULL;
}
if (m_Base) {
VirtualFree(m_Base, 0, MEM_RELEASE);
m_Base = NULL;
}
DeleteCriticalSection(&m_cs);
DeleteCriticalSection(&m_cs);
m_Base = m_Ptr = NULL;
m_ulMaxLength = 0;
m_Base = m_Ptr = NULL;
m_ulMaxLength = 0;
}
ULONG CBuffer::RemoveCompletedBuffer(ULONG ulLength)
{
EnterCriticalSection(&m_cs);
EnterCriticalSection(&m_cs);
if (ulLength > m_ulMaxLength) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȱ<EFBFBD><C8B1>ڴ<EFBFBD><DAB4>ij<EFBFBD><C4B3>Ȼ<EFBFBD><C8BB><EFBFBD>
{
LeaveCriticalSection(&m_cs);
return 0;
}
if (ulLength > (m_Ptr - m_Base)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȼ<EFBFBD><C8BB><EFBFBD>
{
ulLength = m_Ptr - m_Base;
}
if (ulLength > m_ulMaxLength) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȱ<EFBFBD><C8B1>ڴ<EFBFBD><DAB4>ij<EFBFBD><C4B3>Ȼ<EFBFBD><C8BB><EFBFBD>
LeaveCriticalSection(&m_cs);
return 0;
}
if (ulLength > (m_Ptr - m_Base)) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD> <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȼ<EFBFBD><C8BB><EFBFBD>
ulLength = m_Ptr - m_Base;
}
if (ulLength)
{
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
if (ulLength) {
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
m_Ptr -= ulLength;
}
m_Ptr -= ulLength;
}
DeAllocateBuffer(m_Ptr - m_Base);
LeaveCriticalSection(&m_cs);
DeAllocateBuffer(m_Ptr - m_Base);
LeaveCriticalSection(&m_cs);
return ulLength;
return ulLength;
}
ULONG CBuffer::ReadBuffer(PBYTE Buffer, ULONG ulLength)
{
EnterCriticalSection(&m_cs);
EnterCriticalSection(&m_cs);
if (ulLength > m_ulMaxLength)
{
LeaveCriticalSection(&m_cs);
return 0;
}
if (ulLength > m_ulMaxLength) {
LeaveCriticalSection(&m_cs);
return 0;
}
if (ulLength > (m_Ptr - m_Base))
{
ulLength = m_Ptr - m_Base;
}
if (ulLength > (m_Ptr - m_Base)) {
ulLength = m_Ptr - m_Base;
}
if (ulLength)
{
CopyMemory(Buffer,m_Base,ulLength);
if (ulLength) {
CopyMemory(Buffer,m_Base,ulLength);
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
m_Ptr -= ulLength;
}
MoveMemory(m_Base,m_Base+ulLength, m_ulMaxLength - ulLength);
m_Ptr -= ulLength;
}
DeAllocateBuffer(m_Ptr - m_Base);
DeAllocateBuffer(m_Ptr - m_Base);
LeaveCriticalSection(&m_cs);
return ulLength;
LeaveCriticalSection(&m_cs);
return ulLength;
}
// ˽<><CBBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG CBuffer::DeAllocateBuffer(ULONG ulLength)
ULONG CBuffer::DeAllocateBuffer(ULONG ulLength)
{
if (ulLength < (m_Ptr - m_Base))
return 0;
if (ulLength < (m_Ptr - m_Base))
return 0;
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
if (m_ulMaxLength <= ulNewMaxLength)
{
return 0;
}
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
if (m_ulMaxLength <= ulNewMaxLength) {
return 0;
}
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
ULONG ulv1 = m_Ptr - m_Base; //<2F><>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
CopyMemory(NewBase,m_Base,ulv1);
ULONG ulv1 = m_Ptr - m_Base; //<2F><>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
CopyMemory(NewBase,m_Base,ulv1);
VirtualFree(m_Base,0,MEM_RELEASE);
VirtualFree(m_Base,0,MEM_RELEASE);
m_Base = NewBase;
m_Base = NewBase;
m_Ptr = m_Base + ulv1;
m_Ptr = m_Base + ulv1;
m_ulMaxLength = ulNewMaxLength;
m_ulMaxLength = ulNewMaxLength;
return m_ulMaxLength;
return m_ulMaxLength;
}
BOOL CBuffer::WriteBuffer(PBYTE Buffer, ULONG ulLength)
{
EnterCriticalSection(&m_cs);
EnterCriticalSection(&m_cs);
if (ReAllocateBuffer(ulLength + (m_Ptr - m_Base)) == -1)//10 +1 1024
{
LeaveCriticalSection(&m_cs);
return false;
}
if (ReAllocateBuffer(ulLength + (m_Ptr - m_Base)) == -1) { //10 +1 1024
LeaveCriticalSection(&m_cs);
return false;
}
CopyMemory(m_Ptr,Buffer,ulLength);
CopyMemory(m_Ptr,Buffer,ulLength);
m_Ptr+=ulLength;
LeaveCriticalSection(&m_cs);
return TRUE;
m_Ptr+=ulLength;
LeaveCriticalSection(&m_cs);
return TRUE;
}
// ˽<><CBBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG CBuffer::ReAllocateBuffer(ULONG ulLength)
{
if (ulLength < m_ulMaxLength)
return 0;
if (ulLength < m_ulMaxLength)
return 0;
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
if (NewBase == NULL)
{
return -1;
}
ULONG ulNewMaxLength = (ULONG)ceil(ulLength / F_PAGE_ALIGNMENT) * U_PAGE_ALIGNMENT;
PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE);
if (NewBase == NULL) {
return -1;
}
ULONG ulv1 = m_Ptr - m_Base; //ԭ<>ȵ<EFBFBD><C8B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
CopyMemory(NewBase,m_Base,ulv1);
ULONG ulv1 = m_Ptr - m_Base; //ԭ<>ȵ<EFBFBD><C8B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
if (m_Base)
{
VirtualFree(m_Base,0,MEM_RELEASE);
}
m_Base = NewBase;
m_Ptr = m_Base + ulv1; //1024
CopyMemory(NewBase,m_Base,ulv1);
m_ulMaxLength = ulNewMaxLength; //2048
if (m_Base) {
VirtualFree(m_Base,0,MEM_RELEASE);
}
m_Base = NewBase;
m_Ptr = m_Base + ulv1; //1024
return m_ulMaxLength;
m_ulMaxLength = ulNewMaxLength; //2048
return m_ulMaxLength;
}
VOID CBuffer::ClearBuffer()
{
EnterCriticalSection(&m_cs);
m_Ptr = m_Base;
EnterCriticalSection(&m_cs);
m_Ptr = m_Base;
DeAllocateBuffer(1024);
LeaveCriticalSection(&m_cs);
DeAllocateBuffer(1024);
LeaveCriticalSection(&m_cs);
}
ULONG CBuffer::GetBufferLength() // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
{
EnterCriticalSection(&m_cs);
if (m_Base == NULL)
{
LeaveCriticalSection(&m_cs);
return 0;
}
ULONG len = m_Ptr - m_Base;
LeaveCriticalSection(&m_cs);
EnterCriticalSection(&m_cs);
if (m_Base == NULL) {
LeaveCriticalSection(&m_cs);
return 0;
}
ULONG len = m_Ptr - m_Base;
LeaveCriticalSection(&m_cs);
return len;
return len;
}
std::string CBuffer::Skip(ULONG ulPos) {
if (ulPos == 0)
return "";
std::string CBuffer::Skip(ULONG ulPos)
{
if (ulPos == 0)
return "";
EnterCriticalSection(&m_cs);
std::string ret(m_Base, m_Base + ulPos);
MoveMemory(m_Base, m_Base + ulPos, m_ulMaxLength - ulPos);
m_Ptr -= ulPos;
EnterCriticalSection(&m_cs);
std::string ret(m_Base, m_Base + ulPos);
MoveMemory(m_Base, m_Base + ulPos, m_ulMaxLength - ulPos);
m_Ptr -= ulPos;
LeaveCriticalSection(&m_cs);
return ret;
LeaveCriticalSection(&m_cs);
return ret;
}
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. ֻ<><D6BB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>.
LPBYTE CBuffer::GetBuffer(ULONG ulPos)
{
EnterCriticalSection(&m_cs);
if (m_Base==NULL || ulPos >= (m_Ptr - m_Base))
{
LeaveCriticalSection(&m_cs);
return NULL;
}
LPBYTE result = m_Base + ulPos;
LeaveCriticalSection(&m_cs);
EnterCriticalSection(&m_cs);
if (m_Base==NULL || ulPos >= (m_Ptr - m_Base)) {
LeaveCriticalSection(&m_cs);
return NULL;
}
LPBYTE result = m_Base + ulPos;
LeaveCriticalSection(&m_cs);
return result;
return result;
}
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>õ<EFBFBD>Buffer<65><72><EFBFBD><EFBFBD>.
Buffer CBuffer::GetMyBuffer(ULONG ulPos)
{
EnterCriticalSection(&m_cs);
ULONG len = m_Ptr - m_Base;
if (m_Base == NULL || ulPos >= len)
{
LeaveCriticalSection(&m_cs);
return Buffer();
}
Buffer result = Buffer(m_Base+ulPos, len - ulPos);
LeaveCriticalSection(&m_cs);
EnterCriticalSection(&m_cs);
ULONG len = m_Ptr - m_Base;
if (m_Base == NULL || ulPos >= len) {
LeaveCriticalSection(&m_cs);
return Buffer();
}
Buffer result = Buffer(m_Base+ulPos, len - ulPos);
LeaveCriticalSection(&m_cs);
return result;
return result;
}
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ֵ.
BYTE CBuffer::GetBYTE(ULONG ulPos) {
EnterCriticalSection(&m_cs);
if (m_Base == NULL || ulPos >= (m_Ptr - m_Base))
{
LeaveCriticalSection(&m_cs);
return NULL;
}
BYTE p = *(m_Base + ulPos);
LeaveCriticalSection(&m_cs);
BYTE CBuffer::GetBYTE(ULONG ulPos)
{
EnterCriticalSection(&m_cs);
if (m_Base == NULL || ulPos >= (m_Ptr - m_Base)) {
LeaveCriticalSection(&m_cs);
return NULL;
}
BYTE p = *(m_Base + ulPos);
LeaveCriticalSection(&m_cs);
return p;
return p;
}
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6>̰߳<DFB3>ȫ<EFBFBD><C8AB>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>.
BOOL CBuffer::CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos) {
EnterCriticalSection(&m_cs);
ULONG len = m_Ptr - m_Base;
if (m_Base == NULL || len - ulPos < nLen)
{
LeaveCriticalSection(&m_cs);
return FALSE;
}
memcpy(pDst, m_Base+ulPos, nLen);
LeaveCriticalSection(&m_cs);
return TRUE;
BOOL CBuffer::CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos)
{
EnterCriticalSection(&m_cs);
ULONG len = m_Ptr - m_Base;
if (m_Base == NULL || len - ulPos < nLen) {
LeaveCriticalSection(&m_cs);
return FALSE;
}
memcpy(pDst, m_Base+ulPos, nLen);
LeaveCriticalSection(&m_cs);
return TRUE;
}

View File

@@ -3,96 +3,112 @@
#include <string>
// Buffer <20><><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>.
class Buffer {
class Buffer
{
private:
PBYTE buf;
ULONG len;
ULONG padding;
std::string md5;
ULONG *ref;
void AddRef() {
(*ref)++;
}
void DelRef() {
(*ref)--;
}
PBYTE buf;
ULONG len;
ULONG padding;
std::string md5;
ULONG *ref;
void AddRef()
{
(*ref)++;
}
void DelRef()
{
(*ref)--;
}
public:
LPBYTE &Buf() {
return buf;
}
~Buffer() {
DelRef();
if (*ref == 0) {
if (buf!=NULL)
{
delete[] buf;
buf = NULL;
}
delete ref;
ref = NULL;
}
}
Buffer():buf(NULL), len(0), ref(new ULONG(1)), padding(0) {
LPBYTE &Buf()
{
return buf;
}
~Buffer()
{
DelRef();
if (*ref == 0) {
if (buf!=NULL) {
delete[] buf;
buf = NULL;
}
delete ref;
ref = NULL;
}
}
Buffer():buf(NULL), len(0), ref(new ULONG(1)), padding(0)
{
}
Buffer(const BYTE * b, int n, int padding=0, const std::string& md5="") :
len(n), ref(new ULONG(1)), padding(padding), md5(md5){
buf = new BYTE[n];
memcpy(buf, b, n);
}
Buffer(Buffer& o) {
o.AddRef();
buf = o.buf;
len = o.len;
ref = o.ref;
}
Buffer operator =(Buffer &o) {
o.AddRef();
buf = o.buf;
len = o.len;
ref = o.ref;
return *this;
}
char* c_str() const {
return (char*)buf;
}
ULONG length(bool noPadding=false)const {
return noPadding ? len - padding : len;
}
std::string MD5() const {
return md5;
}
}
Buffer(const BYTE * b, int n, int padding=0, const std::string& md5="") :
len(n), ref(new ULONG(1)), padding(padding), md5(md5)
{
buf = new BYTE[n];
memcpy(buf, b, n);
}
Buffer(Buffer& o)
{
o.AddRef();
buf = o.buf;
len = o.len;
ref = o.ref;
}
Buffer operator =(Buffer &o)
{
o.AddRef();
buf = o.buf;
len = o.len;
ref = o.ref;
return *this;
}
char* c_str() const
{
return (char*)buf;
}
ULONG length(bool noPadding=false)const
{
return noPadding ? len - padding : len;
}
std::string MD5() const
{
return md5;
}
};
class CBuffer
{
public:
CBuffer(void);
~CBuffer(void);
CBuffer(void);
~CBuffer(void);
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
ULONG GetBufferLength(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
ULONG GetBufferLen() { return GetBufferLength(); }
VOID ClearBuffer();
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
BOOL Write(PBYTE Buffer, ULONG ulLength) {
return WriteBuffer(Buffer, ulLength);
}
BOOL WriteBuffer(CBuffer& buf) {
return WriteBuffer(buf.GetBuffer(), buf.GetBufferLen());
}
LPBYTE GetBuffer(ULONG ulPos=0);
Buffer GetMyBuffer(ULONG ulPos);
BYTE GetBYTE(ULONG ulPos);
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos);
ULONG RemoveCompletedBuffer(ULONG ulLength);
std::string Skip(ULONG ulPos);
ULONG ReadBuffer(PBYTE Buffer, ULONG ulLength);
ULONG GetBufferLength(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
ULONG GetBufferLen()
{
return GetBufferLength();
}
VOID ClearBuffer();
BOOL WriteBuffer(PBYTE Buffer, ULONG ulLength);
BOOL Write(PBYTE Buffer, ULONG ulLength)
{
return WriteBuffer(Buffer, ulLength);
}
BOOL WriteBuffer(CBuffer& buf)
{
return WriteBuffer(buf.GetBuffer(), buf.GetBufferLen());
}
LPBYTE GetBuffer(ULONG ulPos=0);
Buffer GetMyBuffer(ULONG ulPos);
BYTE GetBYTE(ULONG ulPos);
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos);
ULONG RemoveCompletedBuffer(ULONG ulLength);
std::string Skip(ULONG ulPos);
protected:
PBYTE m_Base;
PBYTE m_Ptr;
ULONG m_ulMaxLength;
CRITICAL_SECTION m_cs;
ULONG DeAllocateBuffer(ULONG ulLength); // ˽<><CBBD>
ULONG ReAllocateBuffer(ULONG ulLength); // ˽<><CBBD>
PBYTE m_Base;
PBYTE m_Ptr;
ULONG m_ulMaxLength;
CRITICAL_SECTION m_cs;
ULONG DeAllocateBuffer(ULONG ulLength); // ˽<><CBBD>
ULONG ReAllocateBuffer(ULONG ulLength); // ˽<><CBBD>
};

View File

@@ -11,14 +11,13 @@
#include <wincrypt.h>
#include <ntstatus.h>
enum Index
{
IndexTestRun_DLL,
IndexTestRun_MemDLL,
IndexTestRun_InjSC,
IndexGhost,
IndexServerDll,
OTHER_ITEM
enum Index {
IndexTestRun_DLL,
IndexTestRun_MemDLL,
IndexTestRun_InjSC,
IndexGhost,
IndexServerDll,
OTHER_ITEM
};
// CBuildDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
@@ -31,38 +30,40 @@ std::string GetPwdHash();
int MemoryFind(const char *szBuffer, const char *Key, int iBufferSize, int iKeySize);
LPBYTE ReadResource(int resourceId, DWORD &dwSize) {
dwSize = 0;
auto id = resourceId;
HRSRC hResource = FindResourceA(NULL, MAKEINTRESOURCE(id), "BINARY");
if (hResource == NULL) {
return NULL;
}
// <20><>ȡ<EFBFBD><C8A1>Դ<EFBFBD>Ĵ<EFBFBD>С
dwSize = SizeofResource(NULL, hResource);
LPBYTE ReadResource(int resourceId, DWORD &dwSize)
{
dwSize = 0;
auto id = resourceId;
HRSRC hResource = FindResourceA(NULL, MAKEINTRESOURCE(id), "BINARY");
if (hResource == NULL) {
return NULL;
}
// <20><>ȡ<EFBFBD><C8A1>Դ<EFBFBD>Ĵ<EFBFBD>С
dwSize = SizeofResource(NULL, hResource);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
HGLOBAL hLoadedResource = LoadResource(NULL, hResource);
if (hLoadedResource == NULL) {
return NULL;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><D6B8>
LPVOID pData = LockResource(hLoadedResource);
if (pData == NULL) {
return NULL;
}
auto r = new BYTE[dwSize];
memcpy(r, pData, dwSize);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
HGLOBAL hLoadedResource = LoadResource(NULL, hResource);
if (hLoadedResource == NULL) {
return NULL;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><D6B8>
LPVOID pData = LockResource(hLoadedResource);
if (pData == NULL) {
return NULL;
}
auto r = new BYTE[dwSize];
memcpy(r, pData, dwSize);
return r;
return r;
}
CBuildDlg::CBuildDlg(CWnd* pParent)
: CDialog(CBuildDlg::IDD, pParent)
, m_strIP(_T(""))
, m_strPort(_T(""))
, m_strFindden(FLAG_FINDEN)
: CDialog(CBuildDlg::IDD, pParent)
, m_strIP(_T(""))
, m_strPort(_T(""))
, m_strFindden(FLAG_FINDEN)
, m_sGroupName(_T("default"))
{
}
@@ -73,24 +74,27 @@ CBuildDlg::~CBuildDlg()
void CBuildDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_IP, m_strIP);
DDX_Text(pDX, IDC_EDIT_PORT, m_strPort);
DDX_Control(pDX, IDC_COMBO_EXE, m_ComboExe);
DDX_Control(pDX, IDC_STATIC_OTHER_ITEM, m_OtherItem);
DDX_Control(pDX, IDC_COMBO_BITS, m_ComboBits);
DDX_Control(pDX, IDC_COMBO_RUNTYPE, m_ComboRunType);
DDX_Control(pDX, IDC_COMBO_PROTO, m_ComboProto);
DDX_Control(pDX, IDC_COMBO_ENCRYPT, m_ComboEncrypt);
DDX_Control(pDX, IDC_COMBO_COMPRESS, m_ComboCompress);
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_IP, m_strIP);
DDX_Text(pDX, IDC_EDIT_PORT, m_strPort);
DDX_Control(pDX, IDC_COMBO_EXE, m_ComboExe);
DDX_Control(pDX, IDC_STATIC_OTHER_ITEM, m_OtherItem);
DDX_Control(pDX, IDC_COMBO_BITS, m_ComboBits);
DDX_Control(pDX, IDC_COMBO_RUNTYPE, m_ComboRunType);
DDX_Control(pDX, IDC_COMBO_PROTO, m_ComboProto);
DDX_Control(pDX, IDC_COMBO_ENCRYPT, m_ComboEncrypt);
DDX_Control(pDX, IDC_COMBO_COMPRESS, m_ComboCompress);
DDX_Control(pDX, IDC_EDIT_GROUPNAME, m_EditGroup);
DDX_Text(pDX, IDC_EDIT_GROUPNAME, m_sGroupName);
DDV_MaxChars(pDX, m_sGroupName, 23);
}
BEGIN_MESSAGE_MAP(CBuildDlg, CDialog)
ON_BN_CLICKED(IDOK, &CBuildDlg::OnBnClickedOk)
ON_CBN_SELCHANGE(IDC_COMBO_EXE, &CBuildDlg::OnCbnSelchangeComboExe)
ON_COMMAND(ID_HELP_PARAMETERS, &CBuildDlg::OnHelpParameters)
ON_COMMAND(ID_HELP_FINDDEN, &CBuildDlg::OnHelpFindden)
ON_BN_CLICKED(IDOK, &CBuildDlg::OnBnClickedOk)
ON_CBN_SELCHANGE(IDC_COMBO_EXE, &CBuildDlg::OnCbnSelchangeComboExe)
ON_COMMAND(ID_HELP_PARAMETERS, &CBuildDlg::OnHelpParameters)
ON_COMMAND(ID_HELP_FINDDEN, &CBuildDlg::OnHelpFindden)
END_MESSAGE_MAP()
@@ -100,364 +104,353 @@ std::string ReleaseUPX();
void run_upx_async(HWND hwnd, const std::string& upx, const std::string& file, bool isCompress);
bool MakeShellcode(LPBYTE& compressedBuffer, int& ulTotalSize, LPBYTE originBuffer,
int ulOriginalLength, bool align = false);
int ulOriginalLength, bool align = false);
BOOL WriteBinaryToFile(const char* path, const char* data, ULONGLONG size);
std::string ReleaseEXE(int resID, const char* name) {
DWORD dwSize = 0;
LPBYTE data = ReadResource(resID, dwSize);
if (!data)
return "";
std::string ReleaseEXE(int resID, const char* name)
{
DWORD dwSize = 0;
LPBYTE data = ReadResource(resID, dwSize);
if (!data)
return "";
char path[MAX_PATH];
DWORD len = GetModuleFileNameA(NULL, path, MAX_PATH);
std::string curExe = path;
GET_FILEPATH(path, name);
BOOL r = WriteBinaryToFile(path, (char*)data, dwSize);
SAFE_DELETE_ARRAY(data);
char path[MAX_PATH];
DWORD len = GetModuleFileNameA(NULL, path, MAX_PATH);
std::string curExe = path;
GET_FILEPATH(path, name);
BOOL r = WriteBinaryToFile(path, (char*)data, dwSize);
SAFE_DELETE_ARRAY(data);
return r ? path : "";
return r ? path : "";
}
typedef struct SCInfo
{
unsigned char aes_key[16];
unsigned char aes_iv[16];
unsigned char data[4 * 1024 * 1024];
int len;
}SCInfo;
typedef struct SCInfo {
unsigned char aes_key[16];
unsigned char aes_iv[16];
unsigned char data[4 * 1024 * 1024];
int len;
} SCInfo;
#define GetAddr(mod, name) GetProcAddress(GetModuleHandleA(mod), name)
bool MYLoadLibrary(const char* name) {
char kernel[] = { 'k','e','r','n','e','l','3','2',0 };
char load[] = { 'L','o','a','d','L','i','b','r','a','r','y','A',0 };
typedef HMODULE(WINAPI* LoadLibraryF)(LPCSTR lpLibFileName);
if (!GetModuleHandleA(name)) {
LoadLibraryF LoadLibraryA = (LoadLibraryF)GetAddr(kernel, load);
return LoadLibraryA(name);
}
return true;
bool MYLoadLibrary(const char* name)
{
char kernel[] = { 'k','e','r','n','e','l','3','2',0 };
char load[] = { 'L','o','a','d','L','i','b','r','a','r','y','A',0 };
typedef HMODULE(WINAPI* LoadLibraryF)(LPCSTR lpLibFileName);
if (!GetModuleHandleA(name)) {
LoadLibraryF LoadLibraryA = (LoadLibraryF)GetAddr(kernel, load);
return LoadLibraryA(name);
}
return true;
}
void generate_random_iv(unsigned char* iv, size_t len) {
typedef HMODULE(WINAPI* LoadLibraryF)(LPCSTR lpLibFileName);
typedef NTSTATUS(WINAPI* BCryptGenRandomF)(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG);
char crypt[] = { 'b','c','r','y','p','t',0 };
char name[] = { 'B','C','r','y','p','t','G','e','n','R','a','n','d','o','m',0 };
MYLoadLibrary(crypt);
BCryptGenRandomF BCryptGenRandom = (BCryptGenRandomF)GetAddr(crypt, name);
BCryptGenRandom(NULL, iv, len, BCRYPT_USE_SYSTEM_PREFERRED_RNG);
void generate_random_iv(unsigned char* iv, size_t len)
{
typedef HMODULE(WINAPI* LoadLibraryF)(LPCSTR lpLibFileName);
typedef NTSTATUS(WINAPI* BCryptGenRandomF)(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG);
char crypt[] = { 'b','c','r','y','p','t',0 };
char name[] = { 'B','C','r','y','p','t','G','e','n','R','a','n','d','o','m',0 };
MYLoadLibrary(crypt);
BCryptGenRandomF BCryptGenRandom = (BCryptGenRandomF)GetAddr(crypt, name);
BCryptGenRandom(NULL, iv, len, BCRYPT_USE_SYSTEM_PREFERRED_RNG);
}
void CBuildDlg::OnBnClickedOk()
{
UpdateData(TRUE);
if (m_strIP.IsEmpty() || atoi(m_strPort) <= 0)
return;
UpdateData(TRUE);
if (m_strIP.IsEmpty() || atoi(m_strPort) <= 0)
return;
BYTE* szBuffer = NULL;
DWORD dwFileSize = 0;
int index = m_ComboExe.GetCurSel(), typ=index;
int is64bit = m_ComboBits.GetCurSel() == 0;
if (index == IndexTestRun_InjSC && !is64bit) {
MessageBox("Shellcode ֻ<><D6BB><EFBFBD><EFBFBD>64λ<34><CEBB><EFBFBD>±<EFBFBD>ע<EFBFBD>룬ע<EBA3AC><D7A2><EFBFBD><EFBFBD>Ҳֻ<D2B2><D6BB><EFBFBD><EFBFBD>64λ!", "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
return;
}
int startup = Startup_DLL;
CString file;
switch (index)
{
case IndexTestRun_DLL: case IndexTestRun_MemDLL: case IndexTestRun_InjSC:
file = "TestRun.exe";
typ = index == IndexTestRun_DLL ? CLIENT_TYPE_DLL : CLIENT_TYPE_MEMDLL;
startup = std::map<int, int>{
{IndexTestRun_DLL, Startup_DLL},{IndexTestRun_MemDLL, Startup_MEMDLL},{IndexTestRun_InjSC, Startup_InjSC},
}[index];
szBuffer = ReadResource(is64bit ? IDR_TESTRUN_X64 : IDR_TESTRUN_X86, dwFileSize);
break;
case IndexGhost:
file = "ghost.exe";
typ = CLIENT_TYPE_ONE;
szBuffer = ReadResource(is64bit ? IDR_GHOST_X64 : IDR_GHOST_X86, dwFileSize);
break;
case IndexServerDll:
file = "ServerDll.dll";
typ = CLIENT_TYPE_DLL;
szBuffer = ReadResource(is64bit ? IDR_SERVERDLL_X64 : IDR_SERVERDLL_X86, dwFileSize);
break;
case OTHER_ITEM: {
m_OtherItem.GetWindowTextA(file);
typ = -1;
if (file != "δѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>") {
CFile File;
File.Open(file, CFile::modeRead | CFile::typeBinary);
dwFileSize = File.GetLength();
if (dwFileSize > 0) {
szBuffer = new BYTE[dwFileSize];
File.Read(szBuffer, dwFileSize);
}
File.Close();
}
break;
}
default:
break;
}
if (szBuffer == NULL)
{
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!", "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
return;
}
//////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ//////////////////////
CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "127.0.0.1", "", typ, false, DLL_VERSION, 0, startup, HeaderEncV0 };
if(m_strFindden.GetLength())
memcpy(g_ConnectAddress.szFlag, m_strFindden.GetBuffer(), min(sizeof(g_ConnectAddress.szFlag), m_strFindden.GetLength()));
g_ConnectAddress.SetAdminId(GetMasterHash().c_str());
g_ConnectAddress.SetServer(m_strIP, atoi(m_strPort));
g_ConnectAddress.runningType = m_ComboRunType.GetCurSel();
g_ConnectAddress.protoType = m_ComboProto.GetCurSel();
g_ConnectAddress.iHeaderEnc = m_ComboEncrypt.GetCurSel();
memcpy(g_ConnectAddress.pwdHash, GetPwdHash().c_str(), sizeof(g_ConnectAddress.pwdHash));
BYTE* szBuffer = NULL;
DWORD dwFileSize = 0;
int index = m_ComboExe.GetCurSel(), typ=index;
int is64bit = m_ComboBits.GetCurSel() == 0;
if (index == IndexTestRun_InjSC && !is64bit) {
MessageBox("Shellcode ֻ<><D6BB><EFBFBD><EFBFBD>64λ<34><CEBB><EFBFBD>±<EFBFBD>ע<EFBFBD>룬ע<EBA3AC><D7A2><EFBFBD><EFBFBD>Ҳֻ<D2B2><D6BB><EFBFBD><EFBFBD>64λ!", "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
return;
}
int startup = Startup_DLL;
CString file;
switch (index) {
case IndexTestRun_DLL:
case IndexTestRun_MemDLL:
case IndexTestRun_InjSC:
file = "TestRun.exe";
typ = index == IndexTestRun_DLL ? CLIENT_TYPE_DLL : CLIENT_TYPE_MEMDLL;
startup = std::map<int, int> {
{IndexTestRun_DLL, Startup_DLL},{IndexTestRun_MemDLL, Startup_MEMDLL},{IndexTestRun_InjSC, Startup_InjSC},
} [index];
szBuffer = ReadResource(is64bit ? IDR_TESTRUN_X64 : IDR_TESTRUN_X86, dwFileSize);
break;
case IndexGhost:
file = "ghost.exe";
typ = CLIENT_TYPE_ONE;
szBuffer = ReadResource(is64bit ? IDR_GHOST_X64 : IDR_GHOST_X86, dwFileSize);
break;
case IndexServerDll:
file = "ServerDll.dll";
typ = CLIENT_TYPE_DLL;
szBuffer = ReadResource(is64bit ? IDR_SERVERDLL_X64 : IDR_SERVERDLL_X86, dwFileSize);
break;
case OTHER_ITEM: {
m_OtherItem.GetWindowTextA(file);
typ = -1;
if (file != "δѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>") {
CFile File;
File.Open(file, CFile::modeRead | CFile::typeBinary);
dwFileSize = File.GetLength();
if (dwFileSize > 0) {
szBuffer = new BYTE[dwFileSize];
File.Read(szBuffer, dwFileSize);
}
File.Close();
}
break;
}
default:
break;
}
if (szBuffer == NULL) {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!", "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
return;
}
//////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ//////////////////////
CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN, "127.0.0.1", "", typ, false, DLL_VERSION, 0, startup, HeaderEncV0 };
if(m_strFindden.GetLength())
memcpy(g_ConnectAddress.szFlag, m_strFindden.GetBuffer(), min(sizeof(g_ConnectAddress.szFlag), m_strFindden.GetLength()));
g_ConnectAddress.SetAdminId(GetMasterHash().c_str());
g_ConnectAddress.SetServer(m_strIP, atoi(m_strPort));
g_ConnectAddress.runningType = m_ComboRunType.GetCurSel();
g_ConnectAddress.protoType = m_ComboProto.GetCurSel();
g_ConnectAddress.iHeaderEnc = m_ComboEncrypt.GetCurSel();
memcpy(g_ConnectAddress.pwdHash, GetPwdHash().c_str(), sizeof(g_ConnectAddress.pwdHash));
memcpy(g_ConnectAddress.szGroupName, m_sGroupName, m_sGroupName.GetLength());
if (!g_ConnectAddress.IsValid()) {
SAFE_DELETE_ARRAY(szBuffer);
return;
}
if (startup != Startup_InjSC)
g_ConnectAddress.Encrypt();
try
{
// <20><><EFBFBD>±<EFBFBD>ʶ
char* ptr = (char*)szBuffer, *end = (char*)szBuffer + dwFileSize;
bool bFind = false;
int bufSize = dwFileSize;
while (ptr < end) {
int iOffset = MemoryFind(ptr, (char*)g_ConnectAddress.Flag(), bufSize, g_ConnectAddress.FlagLen());
if (iOffset == -1)
break;
if (!g_ConnectAddress.IsValid()) {
SAFE_DELETE_ARRAY(szBuffer);
return;
}
if (startup != Startup_InjSC)
g_ConnectAddress.Encrypt();
try {
// <20><><EFBFBD>±<EFBFBD>ʶ
char* ptr = (char*)szBuffer, *end = (char*)szBuffer + dwFileSize;
bool bFind = false;
int bufSize = dwFileSize;
while (ptr < end) {
int iOffset = MemoryFind(ptr, (char*)g_ConnectAddress.Flag(), bufSize, g_ConnectAddress.FlagLen());
if (iOffset == -1)
break;
CONNECT_ADDRESS* dst = (CONNECT_ADDRESS*)(ptr + iOffset);
auto result = strlen(dst->szBuildDate) ? compareDates(dst->szBuildDate, g_ConnectAddress.szBuildDate) : -1;
if (result > 0) {
MessageBox("<EFBFBD>ͻ<EFBFBD><EFBFBD>˰汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>!\r\n" + file, "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
return;
}
if (result != -2 && result <= 0)// <20>ͻ<EFBFBD><CDBB>˰汾<CBB0><E6B1BE><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>
{
bFind = true;
auto master = GetMasterId();
memcpy(ptr + iOffset, &(g_ConnectAddress.ModifyFlag(master.c_str())), sizeof(g_ConnectAddress));
}
ptr += iOffset + sizeof(g_ConnectAddress);
bufSize -= iOffset + sizeof(g_ConnectAddress);
}
if (!bFind) {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD>Ϣ!\r\n" + file, "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
SAFE_DELETE_ARRAY(szBuffer);
return;
}
CONNECT_ADDRESS* dst = (CONNECT_ADDRESS*)(ptr + iOffset);
auto result = strlen(dst->szBuildDate) ? compareDates(dst->szBuildDate, g_ConnectAddress.szBuildDate) : -1;
if (result > 0) {
MessageBox("<EFBFBD>ͻ<EFBFBD><EFBFBD>˰汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>!\r\n" + file, "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
return;
}
if (result != -2 && result <= 0) { // <20>ͻ<EFBFBD><CDBB>˰汾<CBB0><E6B1BE><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>
bFind = true;
auto master = GetMasterId();
memcpy(ptr + iOffset, &(g_ConnectAddress.ModifyFlag(master.c_str())), sizeof(g_ConnectAddress));
}
ptr += iOffset + sizeof(g_ConnectAddress);
bufSize -= iOffset + sizeof(g_ConnectAddress);
}
if (!bFind) {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD>Ϣ!\r\n" + file, "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
SAFE_DELETE_ARRAY(szBuffer);
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
char path[_MAX_PATH], * p = path;
GetModuleFileNameA(NULL, path, sizeof(path));
while (*p) ++p;
while ('\\' != *p) --p;
strcpy(p + 1, file.GetString());
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
char path[_MAX_PATH], * p = path;
GetModuleFileNameA(NULL, path, sizeof(path));
while (*p) ++p;
while ('\\' != *p) --p;
strcpy(p + 1, file.GetString());
CString strSeverFile = typ != -1 ? path : file;
DeleteFileA(strSeverFile);
CFile File;
BOOL r=File.Open(strSeverFile,CFile::typeBinary|CFile::modeCreate|CFile::modeWrite);
if (!r) {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴴽<EFBFBD>ʧ<EFBFBD><EFBFBD>!\r\n" + strSeverFile, "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
SAFE_DELETE_ARRAY(szBuffer);
return;
}
File.Write(szBuffer, dwFileSize);
File.Close();
CString tip = index == IndexTestRun_DLL ? "\r\n<EFBFBD><EFBFBD>ʾ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"ServerDll.dll\"<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>" : "";
tip += g_ConnectAddress.protoType==PROTO_KCP ? "\n<EFBFBD><EFBFBD>ʾ: ʹ<><CAB9>KCPЭ<50><D0AD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>񣬱<EFBFBD><F1A3ACB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDPЭ<50><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<CEAA><31>" : "";
std::string upx;
if(m_ComboCompress.GetCurSel() == CLIENT_COMPRESS_UPX) upx = ReleaseUPX();
if (!upx.empty())
{
run_upx_async(GetParent()->GetSafeHwnd(), upx, strSeverFile.GetString(), true);
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UPXѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>\r\n<EFBFBD>ļ<EFBFBD>λ<EFBFBD><EFBFBD>: " + strSeverFile + tip, "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
} else {
if (m_ComboCompress.GetCurSel() == CLIENT_COMPRESS_SC) {
DWORD dwSize = 0;
LPBYTE data = ReadResource(is64bit ? IDR_SCLOADER_X64 : IDR_SCLOADER_X86, dwSize);
if (data) {
int iOffset = MemoryFind((char*)data, (char*)g_ConnectAddress.Flag(), dwSize, g_ConnectAddress.FlagLen());
if (iOffset != -1) {
SCInfo* sc = (SCInfo*)(data + iOffset);
LPBYTE srcData = (LPBYTE)szBuffer;
int srcLen = dwFileSize;
if (MakeShellcode(srcData, srcLen, (LPBYTE)szBuffer, dwFileSize, true)) {
generate_random_iv(sc->aes_key, 16);
generate_random_iv(sc->aes_iv, 16);
std::string key, iv;
for (int i = 0; i < 16; ++i) key += std::to_string(sc->aes_key[i]) + " ";
for (int i = 0; i < 16; ++i) iv += std::to_string(sc->aes_iv[i]) + " ";
Mprintf("AES_KEY: %s, AES_IV: %s\n", key.c_str(), iv.c_str());
CString strSeverFile = typ != -1 ? path : file;
DeleteFileA(strSeverFile);
CFile File;
BOOL r=File.Open(strSeverFile,CFile::typeBinary|CFile::modeCreate|CFile::modeWrite);
if (!r) {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴴽<EFBFBD>ʧ<EFBFBD><EFBFBD>!\r\n" + strSeverFile, "<EFBFBD><EFBFBD>ʾ", MB_ICONWARNING);
SAFE_DELETE_ARRAY(szBuffer);
return;
}
File.Write(szBuffer, dwFileSize);
File.Close();
CString tip = index == IndexTestRun_DLL ? "\r\n<EFBFBD><EFBFBD>ʾ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"ServerDll.dll\"<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>" : "";
tip += g_ConnectAddress.protoType==PROTO_KCP ? "\n<EFBFBD><EFBFBD>ʾ: ʹ<><CAB9>KCPЭ<50><D0AD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>񣬱<EFBFBD><F1A3ACB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDPЭ<50><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<CEAA><31>" : "";
std::string upx;
if(m_ComboCompress.GetCurSel() == CLIENT_COMPRESS_UPX) upx = ReleaseUPX();
if (!upx.empty()) {
run_upx_async(GetParent()->GetSafeHwnd(), upx, strSeverFile.GetString(), true);
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UPXѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>\r\n<EFBFBD>ļ<EFBFBD>λ<EFBFBD><EFBFBD>: " + strSeverFile + tip, "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
} else {
if (m_ComboCompress.GetCurSel() == CLIENT_COMPRESS_SC) {
DWORD dwSize = 0;
LPBYTE data = ReadResource(is64bit ? IDR_SCLOADER_X64 : IDR_SCLOADER_X86, dwSize);
if (data) {
int iOffset = MemoryFind((char*)data, (char*)g_ConnectAddress.Flag(), dwSize, g_ConnectAddress.FlagLen());
if (iOffset != -1) {
SCInfo* sc = (SCInfo*)(data + iOffset);
LPBYTE srcData = (LPBYTE)szBuffer;
int srcLen = dwFileSize;
if (MakeShellcode(srcData, srcLen, (LPBYTE)szBuffer, dwFileSize, true)) {
generate_random_iv(sc->aes_key, 16);
generate_random_iv(sc->aes_iv, 16);
std::string key, iv;
for (int i = 0; i < 16; ++i) key += std::to_string(sc->aes_key[i]) + " ";
for (int i = 0; i < 16; ++i) iv += std::to_string(sc->aes_iv[i]) + " ";
Mprintf("AES_KEY: %s, AES_IV: %s\n", key.c_str(), iv.c_str());
struct AES_ctx ctx;
AES_init_ctx_iv(&ctx, sc->aes_key, sc->aes_iv);
AES_CBC_encrypt_buffer(&ctx, srcData, srcLen);
if (srcLen <= 4 * 1024 * 1024) {
memcpy(sc->data, srcData, srcLen);
sc->len = srcLen;
}
SAFE_DELETE_ARRAY(srcData);
PathRenameExtension(strSeverFile.GetBuffer(MAX_PATH), _T(".exe"));
strSeverFile.ReleaseBuffer();
BOOL r = WriteBinaryToFile(strSeverFile.GetString(), (char*)data, dwSize);
}
}
}
SAFE_DELETE_ARRAY(data);
}
MessageBox("<EFBFBD><EFBFBD><EFBFBD>ɳɹ<EFBFBD>! <20>ļ<EFBFBD>λ<EFBFBD><CEBB>:\r\n" + strSeverFile + tip, "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
}
SAFE_DELETE_ARRAY(szBuffer);
if (index == IndexTestRun_DLL) return;
}
catch (CMemoryException* e)
{
char err[100];
e->GetErrorMessage(err, sizeof(err));
MessageBox("<EFBFBD>ڴ<EFBFBD><EFBFBD>쳣:" + CString(err), "<EFBFBD>", MB_ICONERROR);
}
catch (CFileException* e)
{
char err[100];
e->GetErrorMessage(err, sizeof(err));
MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD>쳣:" + CString(err), "<EFBFBD>", MB_ICONERROR);
}
catch (CException* e)
{
char err[100];
e->GetErrorMessage(err, sizeof(err));
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣:" + CString(err), "<EFBFBD>", MB_ICONERROR);
}
struct AES_ctx ctx;
AES_init_ctx_iv(&ctx, sc->aes_key, sc->aes_iv);
AES_CBC_encrypt_buffer(&ctx, srcData, srcLen);
if (srcLen <= 4 * 1024 * 1024) {
memcpy(sc->data, srcData, srcLen);
sc->len = srcLen;
}
SAFE_DELETE_ARRAY(srcData);
PathRenameExtension(strSeverFile.GetBuffer(MAX_PATH), _T(".exe"));
strSeverFile.ReleaseBuffer();
BOOL r = WriteBinaryToFile(strSeverFile.GetString(), (char*)data, dwSize);
}
}
}
SAFE_DELETE_ARRAY(data);
}
MessageBox("<EFBFBD><EFBFBD><EFBFBD>ɳɹ<EFBFBD>! <20>ļ<EFBFBD>λ<EFBFBD><CEBB>:\r\n" + strSeverFile + tip, "<EFBFBD><EFBFBD>ʾ", MB_ICONINFORMATION);
}
SAFE_DELETE_ARRAY(szBuffer);
if (index == IndexTestRun_DLL) return;
} catch (CMemoryException* e) {
char err[100];
e->GetErrorMessage(err, sizeof(err));
MessageBox("<EFBFBD>ڴ<EFBFBD><EFBFBD>쳣:" + CString(err), "<EFBFBD>", MB_ICONERROR);
} catch (CFileException* e) {
char err[100];
e->GetErrorMessage(err, sizeof(err));
MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD>쳣:" + CString(err), "<EFBFBD>", MB_ICONERROR);
} catch (CException* e) {
char err[100];
e->GetErrorMessage(err, sizeof(err));
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣:" + CString(err), "<EFBFBD>", MB_ICONERROR);
}
SAFE_DELETE_ARRAY(szBuffer);
CDialog::OnOK();
SAFE_DELETE_ARRAY(szBuffer);
CDialog::OnOK();
}
BOOL CBuildDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog::OnInitDialog();
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_IP);
pEdit->LimitText(99);
m_ComboExe.InsertString(IndexTestRun_DLL, "TestRun - <20><><EFBFBD><EFBFBD>DLL");
m_ComboExe.InsertString(IndexTestRun_MemDLL, "TestRun - <20>ڴ<EFBFBD>DLL");
m_ComboExe.InsertString(IndexTestRun_InjSC, "TestRun - ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>");
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_IP);
pEdit->LimitText(99);
m_ComboExe.InsertString(IndexTestRun_DLL, "TestRun - <20><><EFBFBD><EFBFBD>DLL");
m_ComboExe.InsertString(IndexTestRun_MemDLL, "TestRun - <20>ڴ<EFBFBD>DLL");
m_ComboExe.InsertString(IndexTestRun_InjSC, "TestRun - ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>");
m_ComboExe.InsertString(IndexGhost, "ghost.exe");
m_ComboExe.InsertString(IndexServerDll, "ServerDll.dll");
m_ComboExe.InsertString(OTHER_ITEM, CString("ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"));
m_ComboExe.SetCurSel(IndexTestRun_MemDLL);
m_ComboExe.InsertString(IndexGhost, "ghost.exe");
m_ComboExe.InsertString(IndexServerDll, "ServerDll.dll");
m_ComboExe.InsertString(OTHER_ITEM, CString("ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"));
m_ComboExe.SetCurSel(IndexTestRun_MemDLL);
m_ComboBits.InsertString(0, "64λ");
m_ComboBits.InsertString(1, "32λ");
m_ComboBits.SetCurSel(0);
m_ComboBits.InsertString(0, "64λ");
m_ComboBits.InsertString(1, "32λ");
m_ComboBits.SetCurSel(0);
m_ComboRunType.InsertString(RUNNING_RANDOM, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboRunType.InsertString(RUNNING_PARALLEL, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboRunType.SetCurSel(RUNNING_RANDOM);
m_ComboRunType.InsertString(RUNNING_RANDOM, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboRunType.InsertString(RUNNING_PARALLEL, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboRunType.SetCurSel(RUNNING_RANDOM);
m_ComboProto.InsertString(PROTO_TCP, "TCP");
m_ComboProto.InsertString(PROTO_UDP, "UDP");
m_ComboProto.InsertString(PROTO_HTTP, "HTTP");
m_ComboProto.InsertString(PROTO_RANDOM, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboProto.InsertString(PROTO_KCP, "KCP");
m_ComboProto.SetCurSel(PROTO_TCP);
m_ComboProto.InsertString(PROTO_TCP, "TCP");
m_ComboProto.InsertString(PROTO_UDP, "UDP");
m_ComboProto.InsertString(PROTO_HTTP, "HTTP");
m_ComboProto.InsertString(PROTO_RANDOM, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboProto.InsertString(PROTO_KCP, "KCP");
m_ComboProto.SetCurSel(PROTO_TCP);
m_ComboEncrypt.InsertString(PROTOCOL_SHINE, "Shine");
m_ComboEncrypt.InsertString(PROTOCOL_HELL, "HELL");
m_ComboEncrypt.SetCurSel(PROTOCOL_SHINE);
m_ComboEncrypt.InsertString(PROTOCOL_SHINE, "Shine");
m_ComboEncrypt.InsertString(PROTOCOL_HELL, "HELL");
m_ComboEncrypt.SetCurSel(PROTOCOL_SHINE);
m_ComboCompress.InsertString(CLIENT_COMPRESS_NONE, "<EFBFBD><EFBFBD>");
m_ComboCompress.InsertString(CLIENT_COMPRESS_UPX, "UPX");
m_ComboCompress.InsertString(CLIENT_COMPRESS_SC, "SHELLCODE");
m_ComboCompress.SetCurSel(CLIENT_COMPRESS_NONE);
m_ComboCompress.InsertString(CLIENT_COMPRESS_NONE, "<EFBFBD><EFBFBD>");
m_ComboCompress.InsertString(CLIENT_COMPRESS_UPX, "UPX");
m_ComboCompress.InsertString(CLIENT_COMPRESS_SC, "SHELLCODE");
m_ComboCompress.SetCurSel(CLIENT_COMPRESS_NONE);
m_OtherItem.ShowWindow(SW_HIDE);
m_OtherItem.ShowWindow(SW_HIDE);
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CBuildDlg::OnCbnSelchangeComboExe()
{
auto n = m_ComboExe.GetCurSel();
if (n == OTHER_ITEM)
{
CComPtr<IShellFolder> spDesktop;
HRESULT hr = SHGetDesktopFolder(&spDesktop);
if (FAILED(hr)) {
MessageBox("Explorer δ<><CEB4>ȷ<EFBFBD><C8B7>ʼ<EFBFBD><CABC>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>", "<EFBFBD><EFBFBD>ʾ");
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ļ<EFBFBD><C4BC><EFBFBD>
CFileDialog fileDlg(TRUE, _T("dll"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("All Files (*.*)|*.*|DLL Files (*.dll)|*.dll|EXE Files (*.exe)|*.exe|"), AfxGetMainWnd());
int ret = 0;
try {
ret = fileDlg.DoModal();
}
catch (...) {
MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>", "<EFBFBD><EFBFBD>ʾ");
return;
}
if (ret == IDOK)
{
CString name = fileDlg.GetPathName();
auto n = m_ComboExe.GetCurSel();
if (n == OTHER_ITEM) {
CComPtr<IShellFolder> spDesktop;
HRESULT hr = SHGetDesktopFolder(&spDesktop);
if (FAILED(hr)) {
MessageBox("Explorer δ<><CEB4>ȷ<EFBFBD><C8B7>ʼ<EFBFBD><CABC>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>", "<EFBFBD><EFBFBD>ʾ");
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ļ<EFBFBD><C4BC><EFBFBD>
CFileDialog fileDlg(TRUE, _T("dll"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("All Files (*.*)|*.*|DLL Files (*.dll)|*.dll|EXE Files (*.exe)|*.exe|"), AfxGetMainWnd());
int ret = 0;
try {
ret = fileDlg.DoModal();
} catch (...) {
MessageBox("<EFBFBD>ļ<EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ԡ<EFBFBD>", "<EFBFBD><EFBFBD>ʾ");
return;
}
if (ret == IDOK) {
CString name = fileDlg.GetPathName();
m_OtherItem.SetWindowTextA(name);
CFile File;
BOOL ret = File.Open(name, CFile::modeRead | CFile::typeBinary);
if (ret) {
int dwFileSize = File.GetLength();
LPBYTE szBuffer = new BYTE[dwFileSize];
File.Read(szBuffer, dwFileSize);
File.Close();
m_strIP = "127.0.0.1";
m_strPort = "6543";
UpdateData(FALSE);
SAFE_DELETE_ARRAY(szBuffer);
}
}
else {
m_OtherItem.SetWindowTextA("δѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
}
m_OtherItem.ShowWindow(SW_SHOW);
}
else {
m_OtherItem.SetWindowTextA("");
m_OtherItem.ShowWindow(SW_HIDE);
}
m_OtherItem.SetWindowTextA(name);
CFile File;
BOOL ret = File.Open(name, CFile::modeRead | CFile::typeBinary);
if (ret) {
int dwFileSize = File.GetLength();
LPBYTE szBuffer = new BYTE[dwFileSize];
File.Read(szBuffer, dwFileSize);
File.Close();
m_strIP = "127.0.0.1";
m_strPort = "6543";
UpdateData(FALSE);
SAFE_DELETE_ARRAY(szBuffer);
}
} else {
m_OtherItem.SetWindowTextA("δѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
}
m_OtherItem.ShowWindow(SW_SHOW);
} else {
m_OtherItem.SetWindowTextA("");
m_OtherItem.ShowWindow(SW_HIDE);
}
}
void CBuildDlg::OnHelpParameters()
{
CString url = _T("https://github.com/yuanyuanxiang/SimpleRemoter/wiki#<23><><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD>");
ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWNORMAL);
CString url = _T("https://github.com/yuanyuanxiang/SimpleRemoter/wiki#<23><><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD>");
ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWNORMAL);
}
void CBuildDlg::OnHelpFindden()
{
CInputDialog dlg(this);
dlg.m_str = m_strFindden;
dlg.Init("<EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>ʶ", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>ʶ<EFBFBD><EFBFBD>Ϣ:");
if (dlg.DoModal() == IDOK) {
m_strFindden = dlg.m_str;
}
CInputDialog dlg(this);
dlg.m_str = m_strFindden;
dlg.Init("<EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>ʶ", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>ʶ<EFBFBD><EFBFBD>Ϣ:");
if (dlg.DoModal() == IDOK) {
m_strFindden = dlg.m_str;
}
}

View File

@@ -10,34 +10,36 @@ std::string ReleaseEXE(int resID, const char* name);
class CBuildDlg : public CDialog
{
DECLARE_DYNAMIC(CBuildDlg)
DECLARE_DYNAMIC(CBuildDlg)
public:
CBuildDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CBuildDlg();
CBuildDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CBuildDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_BUILD };
enum { IDD = IDD_DIALOG_BUILD };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CString m_strIP;
CString m_strPort;
afx_msg void OnBnClickedOk();
virtual BOOL OnInitDialog();
CComboBox m_ComboExe;
CString m_strIP;
CString m_strPort;
afx_msg void OnBnClickedOk();
virtual BOOL OnInitDialog();
CComboBox m_ComboExe;
afx_msg void OnCbnSelchangeComboExe();
CStatic m_OtherItem;
CComboBox m_ComboBits;
CComboBox m_ComboRunType;
CComboBox m_ComboProto;
CComboBox m_ComboEncrypt;
afx_msg void OnHelpParameters();
CComboBox m_ComboCompress;
CString m_strFindden;
afx_msg void OnHelpFindden();
afx_msg void OnCbnSelchangeComboExe();
CStatic m_OtherItem;
CComboBox m_ComboBits;
CComboBox m_ComboRunType;
CComboBox m_ComboProto;
CComboBox m_ComboEncrypt;
afx_msg void OnHelpParameters();
CComboBox m_ComboCompress;
CString m_strFindden;
afx_msg void OnHelpFindden();
CEdit m_EditGroup;
CString m_sGroupName;
};

View File

@@ -6,335 +6,329 @@
IMPLEMENT_DYNAMIC(CDrawingBoard, CDialog)
CDrawingBoard::CDrawingBoard(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: DialogBase(IDD_DRAWING_BOARD, pParent, IOCPServer, ContextObject, IDI_ICON_DRAWING),
m_bDrawing(false)
: DialogBase(IDD_DRAWING_BOARD, pParent, IOCPServer, ContextObject, IDI_ICON_DRAWING),
m_bDrawing(false)
{
m_bTopMost = true;
m_bTransport = true;
m_bMoving = false;
m_bSizing = false;
m_pInputEdit = nullptr;
m_bTopMost = true;
m_bTransport = true;
m_bMoving = false;
m_bSizing = false;
m_pInputEdit = nullptr;
}
CDrawingBoard::~CDrawingBoard()
{
if (m_pInputEdit != nullptr) {
m_pInputEdit->DestroyWindow();
delete m_pInputEdit;
m_pInputEdit = nullptr;
}
if (m_font.GetSafeHandle())
m_font.DeleteObject();
if (m_pen.GetSafeHandle())
m_pen.DeleteObject();
if (m_pInputEdit != nullptr) {
m_pInputEdit->DestroyWindow();
delete m_pInputEdit;
m_pInputEdit = nullptr;
}
if (m_font.GetSafeHandle())
m_font.DeleteObject();
if (m_pen.GetSafeHandle())
m_pen.DeleteObject();
}
void CDrawingBoard::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CDrawingBoard, CDialog)
ON_WM_CLOSE()
ON_WM_SIZE()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_WINDOWPOSCHANGED()
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_DRAWING_TOPMOST, &CDrawingBoard::OnDrawingTopmost)
ON_COMMAND(ID_DRAWING_TRANSPORT, &CDrawingBoard::OnDrawingTransport)
ON_COMMAND(ID_DRAWING_MOVE, &CDrawingBoard::OnDrawingMove)
ON_COMMAND(ID_DRAWING_SIZE, &CDrawingBoard::OnDrawingSize)
ON_COMMAND(IDM_CLEAR_DRAWING, &CDrawingBoard::OnDrawingClear)
ON_COMMAND(ID_DRAWING_TEXT, &CDrawingBoard::OnDrawingText)
ON_WM_CLOSE()
ON_WM_SIZE()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_WINDOWPOSCHANGED()
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_DRAWING_TOPMOST, &CDrawingBoard::OnDrawingTopmost)
ON_COMMAND(ID_DRAWING_TRANSPORT, &CDrawingBoard::OnDrawingTransport)
ON_COMMAND(ID_DRAWING_MOVE, &CDrawingBoard::OnDrawingMove)
ON_COMMAND(ID_DRAWING_SIZE, &CDrawingBoard::OnDrawingSize)
ON_COMMAND(IDM_CLEAR_DRAWING, &CDrawingBoard::OnDrawingClear)
ON_COMMAND(ID_DRAWING_TEXT, &CDrawingBoard::OnDrawingText)
END_MESSAGE_MAP()
void CDrawingBoard::OnReceiveComplete()
{
// 接收时处理逻辑(暂空)
// 接收时处理逻辑(暂空)
}
void CDrawingBoard::OnClose()
{
CancelIO();
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DialogBase::OnClose();
CancelIO();
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DialogBase::OnClose();
}
void CDrawingBoard::OnPaint()
{
CPaintDC dc(this);
CPaintDC dc(this);
CPen* pOldPen = dc.SelectObject(&m_pen);
CPen* pOldPen = dc.SelectObject(&m_pen);
for (const auto& path : m_paths)
{
if (path.size() < 2) continue;
for (const auto& path : m_paths) {
if (path.size() < 2) continue;
dc.MoveTo(path[0]);
for (size_t i = 1; i < path.size(); ++i)
dc.LineTo(path[i]);
}
dc.MoveTo(path[0]);
for (size_t i = 1; i < path.size(); ++i)
dc.LineTo(path[i]);
}
if (m_bDrawing && m_currentPath.size() >= 2)
{
dc.MoveTo(m_currentPath[0]);
for (size_t i = 1; i < m_currentPath.size(); ++i)
dc.LineTo(m_currentPath[i]);
}
if (m_bDrawing && m_currentPath.size() >= 2) {
dc.MoveTo(m_currentPath[0]);
for (size_t i = 1; i < m_currentPath.size(); ++i)
dc.LineTo(m_currentPath[i]);
}
CFont* pOldFont = dc.SelectObject(&m_font);
dc.SetTextColor(RGB(0, 0, 0));
dc.SetBkMode(TRANSPARENT);
CFont* pOldFont = dc.SelectObject(&m_font);
dc.SetTextColor(RGB(0, 0, 0));
dc.SetBkMode(TRANSPARENT);
for (const auto& entry : m_Texts)
dc.TextOut(entry.first.x, entry.first.y, entry.second);
for (const auto& entry : m_Texts)
dc.TextOut(entry.first.x, entry.first.y, entry.second);
dc.SelectObject(pOldFont);
dc.SelectObject(pOldFont);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldPen);
}
void CDrawingBoard::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bDrawing = true;
m_currentPath.clear();
m_currentPath.push_back(point);
m_bDrawing = true;
m_currentPath.clear();
m_currentPath.push_back(point);
SetCapture();
SetCapture();
}
void CDrawingBoard::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bDrawing)
{
m_currentPath.push_back(point);
Invalidate(FALSE);
if (m_bDrawing) {
m_currentPath.push_back(point);
Invalidate(FALSE);
// 发送当前点
BYTE pkg[1 + sizeof(POINT)] = { CMD_DRAW_POINT };
memcpy(pkg + 1, &point, sizeof(POINT));
m_ContextObject->Send2Client((BYTE*)pkg, sizeof(pkg));
}
// 发送当前点
BYTE pkg[1 + sizeof(POINT)] = { CMD_DRAW_POINT };
memcpy(pkg + 1, &point, sizeof(POINT));
m_ContextObject->Send2Client((BYTE*)pkg, sizeof(pkg));
}
}
void CDrawingBoard::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_bDrawing)
{
m_bDrawing = false;
m_currentPath.push_back(point);
ReleaseCapture();
if (m_bDrawing) {
m_bDrawing = false;
m_currentPath.push_back(point);
ReleaseCapture();
m_paths.push_back(m_currentPath);
Invalidate();
m_paths.push_back(m_currentPath);
Invalidate();
// 发送结束命令,表示当前路径完成
BYTE endCmd = CMD_DRAW_END;
m_ContextObject->Send2Client(&endCmd, 1);
}
// 发送结束命令,表示当前路径完成
BYTE endCmd = CMD_DRAW_END;
m_ContextObject->Send2Client(&endCmd, 1);
}
}
void CDrawingBoard::OnWindowPosChanged(WINDOWPOS* lpwndpos)
{
CDialog::OnWindowPosChanged(lpwndpos);
if (!m_bMoving) return;
CDialog::OnWindowPosChanged(lpwndpos);
if (!m_bMoving) return;
CRect rect;
GetWindowRect(&rect); // 获取当前窗口屏幕位置
BYTE pkg[1 + sizeof(CRect)] = { CMD_MOVEWINDOW };
if (!m_bSizing) {
rect.right = rect.left;
rect.bottom = rect.top;
}
memcpy(pkg + 1, &rect, sizeof(CRect));
m_ContextObject->Send2Client((BYTE*)pkg, sizeof(pkg));
CRect rect;
GetWindowRect(&rect); // 获取当前窗口屏幕位置
BYTE pkg[1 + sizeof(CRect)] = { CMD_MOVEWINDOW };
if (!m_bSizing) {
rect.right = rect.left;
rect.bottom = rect.top;
}
memcpy(pkg + 1, &rect, sizeof(CRect));
m_ContextObject->Send2Client((BYTE*)pkg, sizeof(pkg));
}
void CDrawingBoard::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (!m_bSizing) return;
CDialog::OnSize(nType, cx, cy);
if (!m_bSizing) return;
// 发送新的窗口尺寸到客户端
int sizeData[2] = { cx, cy };
BYTE pkg[sizeof(sizeData) + 1] = { CMD_SET_SIZE };
memcpy(pkg + 1, &sizeData, sizeof(sizeData));
m_ContextObject->Send2Client((PBYTE)pkg, sizeof(pkg));
// 发送新的窗口尺寸到客户端
int sizeData[2] = { cx, cy };
BYTE pkg[sizeof(sizeData) + 1] = { CMD_SET_SIZE };
memcpy(pkg + 1, &sizeData, sizeof(sizeData));
m_ContextObject->Send2Client((PBYTE)pkg, sizeof(pkg));
}
void CDrawingBoard::OnDrawingTopmost()
{
m_bTopMost = !m_bTopMost;
BYTE cmd[2] = { CMD_TOPMOST, m_bTopMost };
m_ContextObject->Send2Client((PBYTE)cmd, sizeof(cmd));
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int n = m_bTopMost ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_TOPMOST, MF_BYCOMMAND | n);
m_bTopMost = !m_bTopMost;
BYTE cmd[2] = { CMD_TOPMOST, m_bTopMost };
m_ContextObject->Send2Client((PBYTE)cmd, sizeof(cmd));
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int n = m_bTopMost ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_TOPMOST, MF_BYCOMMAND | n);
}
void CDrawingBoard::OnDrawingTransport()
{
m_bTransport = !m_bTransport;
BYTE cmd[2] = { CMD_TRANSPORT, m_bTransport ? 150 : 255 };
m_ContextObject->Send2Client((PBYTE)cmd, sizeof(cmd));
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int n = m_bTransport ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_TRANSPORT, MF_BYCOMMAND | n);
m_bTransport = !m_bTransport;
BYTE cmd[2] = { CMD_TRANSPORT, m_bTransport ? 150 : 255 };
m_ContextObject->Send2Client((PBYTE)cmd, sizeof(cmd));
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int n = m_bTransport ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_TRANSPORT, MF_BYCOMMAND | n);
}
void CDrawingBoard::OnDrawingMove()
{
m_bMoving = !m_bMoving;
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int cmd = m_bMoving ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_MOVE, MF_BYCOMMAND | cmd);
m_bMoving = !m_bMoving;
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int cmd = m_bMoving ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_MOVE, MF_BYCOMMAND | cmd);
}
void CDrawingBoard::OnDrawingSize()
{
m_bSizing = !m_bSizing;
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int cmd = m_bSizing ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_SIZE, MF_BYCOMMAND | cmd);
m_bSizing = !m_bSizing;
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
int cmd = m_bSizing ? MF_CHECKED : MF_UNCHECKED;
::CheckMenuItem(hMenu, ID_DRAWING_SIZE, MF_BYCOMMAND | cmd);
}
BOOL CDrawingBoard::OnInitDialog()
{
DialogBase::OnInitDialog();
DialogBase::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
CString str;
str.Format("%s - 画板演示", m_IPAddress);
SetWindowText(str);
CString str;
str.Format("%s - 画板演示", m_IPAddress);
SetWindowText(str);
m_font.CreateFont(
20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T("Arial"));
m_font.CreateFont(
20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T("Arial"));
m_pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
m_pen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
::CheckMenuItem(hMenu, ID_DRAWING_TOPMOST, MF_BYCOMMAND | MF_CHECKED);
::CheckMenuItem(hMenu, ID_DRAWING_TRANSPORT, MF_BYCOMMAND | MF_CHECKED);
HMENU hMenu = ::GetMenu(this->GetSafeHwnd());
::CheckMenuItem(hMenu, ID_DRAWING_TOPMOST, MF_BYCOMMAND | MF_CHECKED);
::CheckMenuItem(hMenu, ID_DRAWING_TRANSPORT, MF_BYCOMMAND | MF_CHECKED);
return TRUE;
return TRUE;
}
void CDrawingBoard::OnDrawingClear()
{
m_paths.clear();
m_currentPath.clear();
m_Texts.clear();
BYTE cmd[2] = { CMD_DRAW_CLEAR, 0 };
m_ContextObject->Send2Client((PBYTE)cmd, sizeof(cmd));
if (m_hWnd && IsWindow(m_hWnd))
::InvalidateRect(m_hWnd, NULL, TRUE); // 重绘整个窗口,清除痕迹
m_paths.clear();
m_currentPath.clear();
m_Texts.clear();
BYTE cmd[2] = { CMD_DRAW_CLEAR, 0 };
m_ContextObject->Send2Client((PBYTE)cmd, sizeof(cmd));
if (m_hWnd && IsWindow(m_hWnd))
::InvalidateRect(m_hWnd, NULL, TRUE); // 重绘整个窗口,清除痕迹
}
void CDrawingBoard::OnRButtonDown(UINT nFlags, CPoint point)
{
m_RightClickPos = point; // 记录鼠标点
ClientToScreen(&m_RightClickPos); // 变为屏幕坐标
m_RightClickPos = point; // 记录鼠标点
ClientToScreen(&m_RightClickPos); // 变为屏幕坐标
CMenu menu;
menu.LoadMenu(IDR_MENU_POPUP);
CMenu* pSubMenu = menu.GetSubMenu(0);
CMenu menu;
menu.LoadMenu(IDR_MENU_POPUP);
CMenu* pSubMenu = menu.GetSubMenu(0);
if (pSubMenu)
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, m_RightClickPos.x, m_RightClickPos.y, this);
if (pSubMenu)
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, m_RightClickPos.x, m_RightClickPos.y, this);
CDialog::OnRButtonDown(nFlags, point);
CDialog::OnRButtonDown(nFlags, point);
}
void CDrawingBoard::OnDrawingText()
{
if (m_pInputEdit != nullptr) {
m_pInputEdit->DestroyWindow();
delete m_pInputEdit;
m_pInputEdit = nullptr;
}
if (m_pInputEdit != nullptr) {
m_pInputEdit->DestroyWindow();
delete m_pInputEdit;
m_pInputEdit = nullptr;
}
CPoint ptClient = m_RightClickPos;
ScreenToClient(&ptClient);
CPoint ptClient = m_RightClickPos;
ScreenToClient(&ptClient);
m_pInputEdit = new CEdit();
m_pInputEdit->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
CRect(ptClient.x, ptClient.y, ptClient.x + 200, ptClient.y + 25),
this, 1234); // 控件 ID 可自定
m_pInputEdit->SetFocus();
m_pInputEdit = new CEdit();
m_pInputEdit->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
CRect(ptClient.x, ptClient.y, ptClient.x + 200, ptClient.y + 25),
this, 1234); // 控件 ID 可自定
m_pInputEdit->SetFocus();
}
BOOL CDrawingBoard::PreTranslateMessage(MSG* pMsg)
{
if (m_pInputEdit && pMsg->hwnd == m_pInputEdit->m_hWnd)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
CString strText;
m_pInputEdit->GetWindowText(strText);
if (m_pInputEdit && pMsg->hwnd == m_pInputEdit->m_hWnd) {
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) {
CString strText;
m_pInputEdit->GetWindowText(strText);
// TODO: 将文字位置和内容加入列表并触发绘图
if (!strText.IsEmpty()) {
CPoint ptClient = m_RightClickPos;
ScreenToClient(&ptClient);
m_Texts.push_back(std::make_pair(ptClient, strText));
SendTextsToRemote(ptClient, strText);
}
// TODO: 将文字位置和内容加入列表并触发绘图
if (!strText.IsEmpty()) {
CPoint ptClient = m_RightClickPos;
ScreenToClient(&ptClient);
m_Texts.push_back(std::make_pair(ptClient, strText));
SendTextsToRemote(ptClient, strText);
}
m_pInputEdit->DestroyWindow();
delete m_pInputEdit;
m_pInputEdit = nullptr;
m_pInputEdit->DestroyWindow();
delete m_pInputEdit;
m_pInputEdit = nullptr;
return TRUE; // 吞掉回车
}
}
return CDialog::PreTranslateMessage(pMsg);
return TRUE; // 吞掉回车
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CDrawingBoard::SendTextsToRemote(const CPoint& pt, const CString& text)
{
if (text.IsEmpty()) return;
if (text.IsEmpty()) return;
// 1. 转换为 UTF-8
// CString 是 TCHAR 类型,若项目是多字节字符集,则需先转为宽字符
// 1. 转换为 UTF-8
// CString 是 TCHAR 类型,若项目是多字节字符集,则需先转为宽字符
#ifdef _UNICODE
LPCWSTR lpWideStr = text;
LPCWSTR lpWideStr = text;
#else
// 从 ANSI 转为宽字符
int wideLen = MultiByteToWideChar(CP_ACP, 0, text, -1, NULL, 0);
std::wstring wideStr(wideLen, 0);
MultiByteToWideChar(CP_ACP, 0, text, -1, &wideStr[0], wideLen);
LPCWSTR lpWideStr = wideStr.c_str();
// 从 ANSI 转为宽字符
int wideLen = MultiByteToWideChar(CP_ACP, 0, text, -1, NULL, 0);
std::wstring wideStr(wideLen, 0);
MultiByteToWideChar(CP_ACP, 0, text, -1, &wideStr[0], wideLen);
LPCWSTR lpWideStr = wideStr.c_str();
#endif
int utf8Len = WideCharToMultiByte(CP_UTF8, 0, lpWideStr, -1, NULL, 0, NULL, NULL);
if (utf8Len <= 1) return; // 空或失败
int utf8Len = WideCharToMultiByte(CP_UTF8, 0, lpWideStr, -1, NULL, 0, NULL, NULL);
if (utf8Len <= 1) return; // 空或失败
std::vector<char> utf8Text(utf8Len - 1); // 去掉末尾的 \0
WideCharToMultiByte(CP_UTF8, 0, lpWideStr, -1, utf8Text.data(), utf8Len - 1, NULL, NULL);
std::vector<char> utf8Text(utf8Len - 1); // 去掉末尾的 \0
WideCharToMultiByte(CP_UTF8, 0, lpWideStr, -1, utf8Text.data(), utf8Len - 1, NULL, NULL);
// 2. 构造发送 buffer
std::vector<char> buffer;
buffer.push_back(CMD_DRAW_TEXT); // 自定义命令码
// 2. 构造发送 buffer
std::vector<char> buffer;
buffer.push_back(CMD_DRAW_TEXT); // 自定义命令码
buffer.insert(buffer.end(), (char*)&pt, (char*)&pt + sizeof(CPoint));
buffer.insert(buffer.end(), utf8Text.begin(), utf8Text.end());
buffer.insert(buffer.end(), (char*)&pt, (char*)&pt + sizeof(CPoint));
buffer.insert(buffer.end(), utf8Text.begin(), utf8Text.end());
// 3. 发送
m_ContextObject->Send2Client((LPBYTE)buffer.data(), (ULONG)buffer.size());
// 3. 发送
m_ContextObject->Send2Client((LPBYTE)buffer.data(), (ULONG)buffer.size());
}

View File

@@ -6,56 +6,56 @@
class CDrawingBoard : public DialogBase
{
DECLARE_DYNAMIC(CDrawingBoard)
DECLARE_DYNAMIC(CDrawingBoard)
public:
CDrawingBoard(CWnd* pParent = nullptr, Server* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
virtual ~CDrawingBoard();
CDrawingBoard(CWnd* pParent = nullptr, Server* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
virtual ~CDrawingBoard();
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DRAWING_BOARD };
enum { IDD = IDD_DRAWING_BOARD };
#endif
VOID OnReceiveComplete();
VOID OnReceiveComplete();
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual void DoDataExchange(CDataExchange* pDX);
void OnClose();
void OnClose();
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
BOOL PreTranslateMessage(MSG* pMsg);
BOOL PreTranslateMessage(MSG* pMsg);
void SendTextsToRemote(const CPoint& pt, const CString& inputText);
void SendTextsToRemote(const CPoint& pt, const CString& inputText);
private:
bool m_bTopMost; // 置顶
bool m_bTransport; // 半透明
bool m_bMoving; // 位置跟随
bool m_bSizing; // 大小跟随
bool m_bDrawing; // 是否正在绘图
std::vector<CPoint> m_currentPath; // 当前路径点
std::vector<std::vector<CPoint>> m_paths; // 所有路径
CPoint m_RightClickPos; // 右键点击位置
CEdit* m_pInputEdit = nullptr; // 类成员变量
std::vector<std::pair<CPoint, CString>> m_Texts;
CFont m_font; // 添加字体成员
CPen m_pen; // 画笔
bool m_bTopMost; // 置顶
bool m_bTransport; // 半透明
bool m_bMoving; // 位置跟随
bool m_bSizing; // 大小跟随
bool m_bDrawing; // 是否正在绘图
std::vector<CPoint> m_currentPath; // 当前路径点
std::vector<std::vector<CPoint>> m_paths; // 所有路径
CPoint m_RightClickPos; // 右键点击位置
CEdit* m_pInputEdit = nullptr; // 类成员变量
std::vector<std::pair<CPoint, CString>> m_Texts;
CFont m_font; // 添加字体成员
CPen m_pen; // 画笔
public:
afx_msg void OnDrawingTopmost();
afx_msg void OnDrawingTransport();
afx_msg void OnDrawingMove();
afx_msg void OnDrawingSize();
virtual BOOL OnInitDialog();
afx_msg void OnDrawingClear();
afx_msg void OnDrawingText();
afx_msg void OnDrawingTopmost();
afx_msg void OnDrawingTransport();
afx_msg void OnDrawingMove();
afx_msg void OnDrawingSize();
virtual BOOL OnInitDialog();
afx_msg void OnDrawingClear();
afx_msg void OnDrawingText();
};

View File

@@ -4,9 +4,9 @@
#include "Resource.h"
BEGIN_MESSAGE_MAP(CGridDialog, CDialog)
ON_WM_SIZE()
ON_WM_LBUTTONDBLCLK()
ON_MESSAGE(WM_CHILD_CLOSED, &CGridDialog::OnChildClosed)
ON_WM_SIZE()
ON_WM_LBUTTONDBLCLK()
ON_MESSAGE(WM_CHILD_CLOSED, &CGridDialog::OnChildClosed)
END_MESSAGE_MAP()
CGridDialog::CGridDialog() : CDialog()
@@ -15,215 +15,205 @@ CGridDialog::CGridDialog() : CDialog()
BOOL CGridDialog::OnInitDialog()
{
m_hIcon = ::LoadIconA(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
SetIcon(m_hIcon, FALSE);
m_hIcon = ::LoadIconA(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
SetIcon(m_hIcon, FALSE);
CDialog::OnInitDialog();
return TRUE;
CDialog::OnInitDialog();
return TRUE;
}
void CGridDialog::SetGrid(int rows, int cols)
{
m_rows = rows;
m_cols = cols;
m_max = rows * cols;
LayoutChildren();
m_rows = rows;
m_cols = cols;
m_max = rows * cols;
LayoutChildren();
}
BOOL CGridDialog::AddChild(CDialog* pDlg)
{
if (!pDlg || !::IsWindow(pDlg->GetSafeHwnd()) || m_children.size() >= m_max)
return FALSE;
if (!pDlg || !::IsWindow(pDlg->GetSafeHwnd()) || m_children.size() >= m_max)
return FALSE;
pDlg->SetParent(this);
pDlg->ShowWindow(SW_SHOW);
pDlg->SetParent(this);
pDlg->ShowWindow(SW_SHOW);
// ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>С
LONG style = ::GetWindowLong(pDlg->GetSafeHwnd(), GWL_STYLE);
style &= ~(WS_CAPTION | WS_THICKFRAME | WS_SIZEBOX | WS_BORDER);
::SetWindowLong(pDlg->GetSafeHwnd(), GWL_STYLE, style);
::SetWindowPos(pDlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
// ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>С
LONG style = ::GetWindowLong(pDlg->GetSafeHwnd(), GWL_STYLE);
style &= ~(WS_CAPTION | WS_THICKFRAME | WS_SIZEBOX | WS_BORDER);
::SetWindowLong(pDlg->GetSafeHwnd(), GWL_STYLE, style);
::SetWindowPos(pDlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
m_children.push_back(pDlg);
LayoutChildren();
return TRUE;
m_children.push_back(pDlg);
LayoutChildren();
return TRUE;
}
void CGridDialog::RemoveChild(CDialog* pDlg)
{
auto it = std::find(m_children.begin(), m_children.end(), pDlg);
if (it != m_children.end())
{
(*it)->ShowWindow(SW_HIDE);
(*it)->SetParent(nullptr);
m_children.erase(it);
auto it = std::find(m_children.begin(), m_children.end(), pDlg);
if (it != m_children.end()) {
(*it)->ShowWindow(SW_HIDE);
(*it)->SetParent(nullptr);
m_children.erase(it);
// ɾ<><C9BE> m_origState <20>ж<EFBFBD>Ӧ<EFBFBD><D3A6>Ŀ
auto itState = m_origState.find(pDlg);
if (itState != m_origState.end())
m_origState.erase(itState);
// ɾ<><C9BE> m_origState <20>ж<EFBFBD>Ӧ<EFBFBD><D3A6>Ŀ
auto itState = m_origState.find(pDlg);
if (itState != m_origState.end())
m_origState.erase(itState);
// <20><><EFBFBD><EFBFBD><EFBFBD>رյ<D8B1><D5B5>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>󻯴<EFBFBD><F3BBAFB4>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD> m_pMaxChild
if (m_pMaxChild == pDlg)
m_pMaxChild = nullptr;
// <20><><EFBFBD><EFBFBD><EFBFBD>رյ<D8B1><D5B5>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>󻯴<EFBFBD><F3BBAFB4>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD> m_pMaxChild
if (m_pMaxChild == pDlg)
m_pMaxChild = nullptr;
LayoutChildren();
}
LayoutChildren();
}
}
LRESULT CGridDialog::OnChildClosed(WPARAM wParam, LPARAM lParam)
{
CDialog* pDlg = (CDialog*)wParam;
RemoveChild(pDlg);
return 0;
CDialog* pDlg = (CDialog*)wParam;
RemoveChild(pDlg);
return 0;
}
void CGridDialog::LayoutChildren()
{
if (m_children.size() == 0) {
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
if (m_parentStyle != 0)
{
::SetWindowLong(m_hWnd, GWL_STYLE, m_parentStyle);
::SetWindowPos(m_hWnd, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
m_parentStyle = 0;
}
ShowWindow(SW_HIDE);
return;
}
if (m_children.size() == 0) {
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
if (m_parentStyle != 0) {
::SetWindowLong(m_hWnd, GWL_STYLE, m_parentStyle);
::SetWindowPos(m_hWnd, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
m_parentStyle = 0;
}
ShowWindow(SW_HIDE);
return;
}
if (m_rows <= 0 || m_cols <= 0 || m_children.empty() || m_pMaxChild != nullptr)
return;
if (m_rows <= 0 || m_cols <= 0 || m_children.empty() || m_pMaxChild != nullptr)
return;
CRect rcClient;
GetClientRect(&rcClient);
CRect rcClient;
GetClientRect(&rcClient);
int w = rcClient.Width() / m_cols;
int h = rcClient.Height() / m_rows;
int w = rcClient.Width() / m_cols;
int h = rcClient.Height() / m_rows;
for (size_t i = 0; i < m_children.size(); ++i)
{
int r = (int)i / m_cols;
int c = (int)i % m_cols;
for (size_t i = 0; i < m_children.size(); ++i) {
int r = (int)i / m_cols;
int c = (int)i % m_cols;
if (r >= m_rows)
break; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if (r >= m_rows)
break; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
int x = c * w;
int y = r * h;
int x = c * w;
int y = r * h;
m_children[i]->MoveWindow(x, y, w, h, TRUE);
m_children[i]->ShowWindow(SW_SHOW);
}
m_children[i]->MoveWindow(x, y, w, h, TRUE);
m_children[i]->ShowWindow(SW_SHOW);
}
}
void CGridDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CDialog::OnSize(nType, cx, cy);
if (m_pMaxChild == nullptr) {
LayoutChildren();
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
CRect rcClient;
GetClientRect(&rcClient);
m_pMaxChild->MoveWindow(rcClient, TRUE);
}
if (m_pMaxChild == nullptr) {
LayoutChildren();
} else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
CRect rcClient;
GetClientRect(&rcClient);
m_pMaxChild->MoveWindow(rcClient, TRUE);
}
}
void CGridDialog::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>󻯵<EFBFBD><F3BBAFB5>Ӵ<EFBFBD><D3B4>ڣ<EFBFBD>˫<EFBFBD><CBAB><EFBFBD>κεط<CEB5><D8B7><EFBFBD><EFBFBD>ָ<EFBFBD>
if (m_pMaxChild != nullptr)
{
// <20>ָ<EFBFBD><D6B8>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>λ<EFBFBD><CEBB>
for (auto& kv : m_origState)
{
CDialog* dlg = kv.first;
const ChildState& state = kv.second;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>󻯵<EFBFBD><F3BBAFB5>Ӵ<EFBFBD><D3B4>ڣ<EFBFBD>˫<EFBFBD><CBAB><EFBFBD>κεط<CEB5><D8B7><EFBFBD><EFBFBD>ָ<EFBFBD>
if (m_pMaxChild != nullptr) {
// <20>ָ<EFBFBD><D6B8>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>λ<EFBFBD><CEBB>
for (auto& kv : m_origState) {
CDialog* dlg = kv.first;
const ChildState& state = kv.second;
::SetWindowLong(dlg->GetSafeHwnd(), GWL_STYLE, state.style);
::SetWindowPos(dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
::SetWindowLong(dlg->GetSafeHwnd(), GWL_STYLE, state.style);
::SetWindowPos(dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
dlg->MoveWindow(state.rect, TRUE);
dlg->ShowWindow(SW_SHOW);
}
dlg->MoveWindow(state.rect, TRUE);
dlg->ShowWindow(SW_SHOW);
}
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
if (m_parentStyle != 0)
{
::SetWindowLong(m_hWnd, GWL_STYLE, m_parentStyle);
::SetWindowPos(m_hWnd, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
m_parentStyle = 0;
}
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
if (m_parentStyle != 0) {
::SetWindowLong(m_hWnd, GWL_STYLE, m_parentStyle);
::SetWindowPos(m_hWnd, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
m_parentStyle = 0;
}
// ˢ<>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD>
m_pMaxChild = nullptr;
m_origState.clear();
LayoutChildren();
return; // <20>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// ˢ<>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD>
m_pMaxChild = nullptr;
m_origState.clear();
LayoutChildren();
return; // <20>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>߼<EFBFBD><DFBC>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (auto dlg : m_children)
{
CRect rc;
dlg->GetWindowRect(&rc);
ScreenToClient(&rc);
// û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>߼<EFBFBD><DFBC>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (auto dlg : m_children) {
CRect rc;
dlg->GetWindowRect(&rc);
ScreenToClient(&rc);
if (rc.PtInRect(point))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ԭʼ״̬
m_origState.clear();
for (auto d : m_children)
{
ChildState state;
d->GetWindowRect(&state.rect);
ScreenToClient(&state.rect);
state.style = ::GetWindowLong(d->GetSafeHwnd(), GWL_STYLE);
m_origState[d] = state;
}
if (rc.PtInRect(point)) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ԭʼ״̬
m_origState.clear();
for (auto d : m_children) {
ChildState state;
d->GetWindowRect(&state.rect);
ScreenToClient(&state.rect);
state.style = ::GetWindowLong(d->GetSafeHwnd(), GWL_STYLE);
m_origState[d] = state;
}
// <20><><EFBFBD>󻯵<EFBFBD><F3BBAFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
LONG style = m_origState[dlg].style;
style |= (WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
::SetWindowLong(dlg->GetSafeHwnd(), GWL_STYLE, style);
::SetWindowPos(dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
// <20><><EFBFBD>󻯵<EFBFBD><F3BBAFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
LONG style = m_origState[dlg].style;
style |= (WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
::SetWindowLong(dlg->GetSafeHwnd(), GWL_STYLE, style);
::SetWindowPos(dlg->GetSafeHwnd(), nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
// <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
if (m_parentStyle == 0)
m_parentStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
LONG parentStyle = m_parentStyle & ~(WS_CAPTION | WS_THICKFRAME);
::SetWindowLong(m_hWnd, GWL_STYLE, parentStyle);
::SetWindowPos(m_hWnd, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
// <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
if (m_parentStyle == 0)
m_parentStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
LONG parentStyle = m_parentStyle & ~(WS_CAPTION | WS_THICKFRAME);
::SetWindowLong(m_hWnd, GWL_STYLE, parentStyle);
::SetWindowPos(m_hWnd, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
// ȫ<><C8AB><EFBFBD><EFBFBD>ʾ<EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
CRect rcClient;
GetClientRect(&rcClient);
dlg->MoveWindow(rcClient, TRUE);
m_pMaxChild = dlg;
// ȫ<><C8AB><EFBFBD><EFBFBD>ʾ<EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
CRect rcClient;
GetClientRect(&rcClient);
dlg->MoveWindow(rcClient, TRUE);
m_pMaxChild = dlg;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
for (auto d : m_children)
if (d != dlg) d->ShowWindow(SW_HIDE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
for (auto d : m_children)
if (d != dlg) d->ShowWindow(SW_HIDE);
break;
}
}
break;
}
}
CDialog::OnLButtonDblClk(nFlags, point);
CDialog::OnLButtonDblClk(nFlags, point);
}
BOOL CGridDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
return TRUE;// <20><><EFBFBD><EFBFBD>Enter<65><72>ESC<53>رնԻ<D5B6>
}
return CDialog::PreTranslateMessage(pMsg);
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
return TRUE;// <20><><EFBFBD><EFBFBD>Enter<65><72>ESC<53>رնԻ<D5B6>
}
return CDialog::PreTranslateMessage(pMsg);
}

View File

@@ -8,39 +8,40 @@
class CGridDialog : public CDialog
{
public:
CGridDialog();
CGridDialog();
BOOL AddChild(CDialog* pDlg); // <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ӶԻ<D3B6><D4BB><EFBFBD>
void RemoveChild(CDialog* pDlg); // <20><>̬<EFBFBD>Ƴ<EFBFBD><C6B3>ӶԻ<D3B6><D4BB><EFBFBD>
void SetGrid(int rows, int cols); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void LayoutChildren(); // <20><><EFBFBD><EFBFBD>
BOOL HasSlot() const {
return m_children.size() < m_max;
}
BOOL AddChild(CDialog* pDlg); // <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ӶԻ<D3B6><D4BB><EFBFBD>
void RemoveChild(CDialog* pDlg); // <20><>̬<EFBFBD>Ƴ<EFBFBD><C6B3>ӶԻ<D3B6><D4BB><EFBFBD>
void SetGrid(int rows, int cols); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void LayoutChildren(); // <20><><EFBFBD><EFBFBD>
BOOL HasSlot() const
{
return m_children.size() < m_max;
}
protected:
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg LRESULT OnChildClosed(WPARAM wParam, LPARAM lParam);
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg LRESULT OnChildClosed(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
private:
HICON m_hIcon;
int m_rows = 0;
int m_cols = 0;
int m_max = 0;
std::vector<CDialog*> m_children;
HICON m_hIcon;
int m_rows = 0;
int m_cols = 0;
int m_max = 0;
std::vector<CDialog*> m_children;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDialog* m_pMaxChild = nullptr; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>󻯵<EFBFBD><F3BBAFB5>ӶԻ<D3B6><D4BB><EFBFBD>
LONG m_parentStyle = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC>ʽ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDialog* m_pMaxChild = nullptr; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>󻯵<EFBFBD><F3BBAFB5>ӶԻ<D3B6><D4BB><EFBFBD>
LONG m_parentStyle = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC>ʽ
struct ChildState {
CRect rect; // ԭʼλ<CABC><CEBB>
LONG style; // ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
};
std::map<CDialog*, ChildState> m_origState;
struct ChildState {
CRect rect; // ԭʼλ<CABC><CEBB>
LONG style; // ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
};
std::map<CDialog*, ChildState> m_origState;
};

View File

@@ -16,23 +16,27 @@ IMPLEMENT_DYNAMIC(CPasswordDlg, CDialogEx)
// 密码的哈希值
char g_MasterID[_MAX_PATH] = { "61f04dd637a74ee34493fc1025de2c131022536da751c29e3ff4e9024d8eec43" };
std::string GetPwdHash(){
static auto id = std::string(g_MasterID).substr(0, 64);
return id;
std::string GetPwdHash()
{
static auto id = std::string(g_MasterID).substr(0, 64);
return id;
}
const Validation * GetValidation(int offset){
return (Validation*)(g_MasterID + offset);
const Validation * GetValidation(int offset)
{
return (Validation*)(g_MasterID + offset);
}
std::string GetMasterId() {
static auto id = std::string(g_MasterID).substr(0, 16);
return id;
std::string GetMasterId()
{
static auto id = std::string(g_MasterID).substr(0, 16);
return id;
}
std::string GetHMAC(int offset) {
const Validation * v= (Validation*)(g_MasterID + offset);
return v->Checksum;
std::string GetHMAC(int offset)
{
const Validation * v= (Validation*)(g_MasterID + offset);
return v->Checksum;
}
extern "C" void shrink64to32(const char* input64, char* output32); // output32 必须至少 33 字节
@@ -45,42 +49,44 @@ extern "C" void shrink32to4(const char* input32, char* output4); // output4
#pragma comment(lib, "lib/shrink.lib")
#endif
bool WritePwdHash(char* target, const std::string & pwdHash, const Validation& verify) {
char output32[33], output4[5];
shrink64to32(pwdHash.c_str(), output32);
shrink32to4(output32, output4);
if (output32[0] == 0 || output4[0] == 0)
return false;
memcpy(target, pwdHash.c_str(), pwdHash.length());
memcpy(target + 64, output32, 32);
memcpy(target + 96, output4, 4);
bool WritePwdHash(char* target, const std::string & pwdHash, const Validation& verify)
{
char output32[33], output4[5];
shrink64to32(pwdHash.c_str(), output32);
shrink32to4(output32, output4);
if (output32[0] == 0 || output4[0] == 0)
return false;
memcpy(target, pwdHash.c_str(), pwdHash.length());
memcpy(target + 64, output32, 32);
memcpy(target + 96, output4, 4);
#ifdef _DEBUG
ASSERT(IsPwdHashValid(target));
ASSERT(IsPwdHashValid(target));
#endif
memcpy(target+100, &verify, sizeof(verify));
return true;
memcpy(target+100, &verify, sizeof(verify));
return true;
}
bool IsPwdHashValid(const char* hash) {
const char* ptr = hash ? hash : g_MasterID;
if (ptr == GetMasterHash())
return true;
std::string pwdHash(ptr, 64), s1(ptr +64, 32), s2(ptr +96, 4);
char output32[33], output4[5];
shrink64to32(pwdHash.c_str(), output32);
shrink32to4(output32, output4);
if (memcmp(output32, s1.c_str(), 32) || memcmp(output4, s2.c_str(), 4))
return false;
bool IsPwdHashValid(const char* hash)
{
const char* ptr = hash ? hash : g_MasterID;
if (ptr == GetMasterHash())
return true;
std::string pwdHash(ptr, 64), s1(ptr +64, 32), s2(ptr +96, 4);
char output32[33], output4[5];
shrink64to32(pwdHash.c_str(), output32);
shrink32to4(output32, output4);
if (memcmp(output32, s1.c_str(), 32) || memcmp(output4, s2.c_str(), 4))
return false;
return true;
return true;
}
CPasswordDlg::CPasswordDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_PASSWORD, pParent)
, m_sDeviceID(_T(""))
, m_sPassword(_T(""))
: CDialogEx(IDD_DIALOG_PASSWORD, pParent)
, m_sDeviceID(_T(""))
, m_sPassword(_T(""))
{
m_hIcon = nullptr;
m_hIcon = nullptr;
}
CPasswordDlg::~CPasswordDlg()
@@ -89,13 +95,13 @@ CPasswordDlg::~CPasswordDlg()
void CPasswordDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_DEVICEID, m_EditDeviceID);
DDX_Control(pDX, IDC_EDIT_DEVICEPWD, m_EditPassword);
DDX_Text(pDX, IDC_EDIT_DEVICEID, m_sDeviceID);
DDV_MaxChars(pDX, m_sDeviceID, 19);
DDX_Text(pDX, IDC_EDIT_DEVICEPWD, m_sPassword);
DDV_MaxChars(pDX, m_sPassword, 42);
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_DEVICEID, m_EditDeviceID);
DDX_Control(pDX, IDC_EDIT_DEVICEPWD, m_EditPassword);
DDX_Text(pDX, IDC_EDIT_DEVICEID, m_sDeviceID);
DDV_MaxChars(pDX, m_sDeviceID, 19);
DDX_Text(pDX, IDC_EDIT_DEVICEPWD, m_sPassword);
DDV_MaxChars(pDX, m_sPassword, 42);
}
@@ -105,14 +111,14 @@ END_MESSAGE_MAP()
BOOL CPasswordDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_PASSWORD));
SetIcon(m_hIcon, FALSE);
// TODO: 在此添加额外的初始化
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_PASSWORD));
SetIcon(m_hIcon, FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
@@ -121,13 +127,13 @@ BOOL CPasswordDlg::OnInitDialog()
IMPLEMENT_DYNAMIC(CPwdGenDlg, CDialogEx)
CPwdGenDlg::CPwdGenDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_KEYGEN, pParent)
, m_sDeviceID(_T(""))
, m_sPassword(_T(""))
, m_sUserPwd(_T(""))
, m_ExpireTm(COleDateTime::GetCurrentTime())
, m_StartTm(COleDateTime::GetCurrentTime())
, m_nHostNum(2)
: CDialogEx(IDD_DIALOG_KEYGEN, pParent)
, m_sDeviceID(_T(""))
, m_sPassword(_T(""))
, m_sUserPwd(_T(""))
, m_ExpireTm(COleDateTime::GetCurrentTime())
, m_StartTm(COleDateTime::GetCurrentTime())
, m_nHostNum(2)
{
}
@@ -138,71 +144,71 @@ CPwdGenDlg::~CPwdGenDlg()
void CPwdGenDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_DEVICEID, m_EditDeviceID);
DDX_Control(pDX, IDC_EDIT_DEVICEPWD, m_EditPassword);
DDX_Control(pDX, IDC_EDIT_USERPWD, m_EditUserPwd);
DDX_Text(pDX, IDC_EDIT_DEVICEID, m_sDeviceID);
DDV_MaxChars(pDX, m_sDeviceID, 19);
DDX_Text(pDX, IDC_EDIT_DEVICEPWD, m_sPassword);
DDV_MaxChars(pDX, m_sPassword, 42);
DDX_Text(pDX, IDC_EDIT_USERPWD, m_sUserPwd);
DDV_MaxChars(pDX, m_sUserPwd, 24);
DDX_Control(pDX, IDC_EXPIRE_DATE, m_PwdExpireDate);
DDX_DateTimeCtrl(pDX, IDC_EXPIRE_DATE, m_ExpireTm);
DDX_Control(pDX, IDC_START_DATE, m_StartDate);
DDX_DateTimeCtrl(pDX, IDC_START_DATE, m_StartTm);
DDX_Control(pDX, IDC_EDIT_HOSTNUM, m_EditHostNum);
DDX_Text(pDX, IDC_EDIT_HOSTNUM, m_nHostNum);
DDV_MinMaxInt(pDX, m_nHostNum, 2, 10000);
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_DEVICEID, m_EditDeviceID);
DDX_Control(pDX, IDC_EDIT_DEVICEPWD, m_EditPassword);
DDX_Control(pDX, IDC_EDIT_USERPWD, m_EditUserPwd);
DDX_Text(pDX, IDC_EDIT_DEVICEID, m_sDeviceID);
DDV_MaxChars(pDX, m_sDeviceID, 19);
DDX_Text(pDX, IDC_EDIT_DEVICEPWD, m_sPassword);
DDV_MaxChars(pDX, m_sPassword, 42);
DDX_Text(pDX, IDC_EDIT_USERPWD, m_sUserPwd);
DDV_MaxChars(pDX, m_sUserPwd, 24);
DDX_Control(pDX, IDC_EXPIRE_DATE, m_PwdExpireDate);
DDX_DateTimeCtrl(pDX, IDC_EXPIRE_DATE, m_ExpireTm);
DDX_Control(pDX, IDC_START_DATE, m_StartDate);
DDX_DateTimeCtrl(pDX, IDC_START_DATE, m_StartTm);
DDX_Control(pDX, IDC_EDIT_HOSTNUM, m_EditHostNum);
DDX_Text(pDX, IDC_EDIT_HOSTNUM, m_nHostNum);
DDV_MinMaxInt(pDX, m_nHostNum, 2, 10000);
}
BEGIN_MESSAGE_MAP(CPwdGenDlg, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON_GENKEY, &CPwdGenDlg::OnBnClickedButtonGenkey)
ON_BN_CLICKED(IDC_BUTTON_GENKEY, &CPwdGenDlg::OnBnClickedButtonGenkey)
END_MESSAGE_MAP()
void CPwdGenDlg::OnBnClickedButtonGenkey()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_sUserPwd.IsEmpty())return;
std::string pwdHash = hashSHA256(m_sUserPwd.GetString());
if (pwdHash != GetPwdHash()) {
Mprintf("hashSHA256 [%s]: %s\n", m_sUserPwd, pwdHash.c_str());
MessageBoxA("您输入的密码不正确,无法生成口令!", "提示", MB_OK | MB_ICONWARNING);
m_sUserPwd.Empty();
return;
}
CString strBeginDate = m_StartTm.Format("%Y%m%d");
CString strEndDate = m_ExpireTm.Format("%Y%m%d");
CString hostNum;
hostNum.Format("%04d", m_nHostNum);
// 密码形式20250209 - 20350209: SHA256: HostNum
std::string password = std::string(strBeginDate.GetString()) + " - " + strEndDate.GetBuffer() + ": " + GetPwdHash() + ": " + hostNum.GetBuffer();
std::string finalKey = deriveKey(password, m_sDeviceID.GetString());
std::string fixedKey = strBeginDate.GetString() + std::string("-") + strEndDate.GetBuffer() + std::string("-") + hostNum.GetString() + "-" +
getFixedLengthID(finalKey);
m_EditPassword.SetWindowTextA(fixedKey.c_str());
std::string hardwareID = getHardwareID();
std::string hashedID = hashSHA256(hardwareID);
std::string deviceID = getFixedLengthID(hashedID);
if (deviceID == m_sDeviceID.GetString()) { // 授权的是当前主控程序
auto settings = "settings", pwdKey = "Password";
THIS_CFG.SetStr(settings, pwdKey, fixedKey.c_str());
}
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (m_sUserPwd.IsEmpty())return;
std::string pwdHash = hashSHA256(m_sUserPwd.GetString());
if (pwdHash != GetPwdHash()) {
Mprintf("hashSHA256 [%s]: %s\n", m_sUserPwd, pwdHash.c_str());
MessageBoxA("您输入的密码不正确,无法生成口令!", "提示", MB_OK | MB_ICONWARNING);
m_sUserPwd.Empty();
return;
}
CString strBeginDate = m_StartTm.Format("%Y%m%d");
CString strEndDate = m_ExpireTm.Format("%Y%m%d");
CString hostNum;
hostNum.Format("%04d", m_nHostNum);
// 密码形式20250209 - 20350209: SHA256: HostNum
std::string password = std::string(strBeginDate.GetString()) + " - " + strEndDate.GetBuffer() + ": " + GetPwdHash() + ": " + hostNum.GetBuffer();
std::string finalKey = deriveKey(password, m_sDeviceID.GetString());
std::string fixedKey = strBeginDate.GetString() + std::string("-") + strEndDate.GetBuffer() + std::string("-") + hostNum.GetString() + "-" +
getFixedLengthID(finalKey);
m_EditPassword.SetWindowTextA(fixedKey.c_str());
std::string hardwareID = getHardwareID();
std::string hashedID = hashSHA256(hardwareID);
std::string deviceID = getFixedLengthID(hashedID);
if (deviceID == m_sDeviceID.GetString()) { // 授权的是当前主控程序
auto settings = "settings", pwdKey = "Password";
THIS_CFG.SetStr(settings, pwdKey, fixedKey.c_str());
}
}
BOOL CPwdGenDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_PASSWORD));
SetIcon(m_hIcon, FALSE);
// TODO: 在此添加额外的初始化
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_PASSWORD));
SetIcon(m_hIcon, FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

View File

@@ -22,58 +22,58 @@ bool WritePwdHash(char* target, const std::string& pwdHash, const Validation &ve
class CPasswordDlg : public CDialogEx
{
DECLARE_DYNAMIC(CPasswordDlg)
DECLARE_DYNAMIC(CPasswordDlg)
public:
CPasswordDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CPasswordDlg();
CPasswordDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CPasswordDlg();
enum { IDD = IDD_DIALOG_PASSWORD };
enum { IDD = IDD_DIALOG_PASSWORD };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
HICON m_hIcon;
CEdit m_EditDeviceID;
CEdit m_EditPassword;
CString m_sDeviceID;
CString m_sPassword;
virtual BOOL OnInitDialog();
HICON m_hIcon;
CEdit m_EditDeviceID;
CEdit m_EditPassword;
CString m_sDeviceID;
CString m_sPassword;
virtual BOOL OnInitDialog();
};
class CPwdGenDlg : public CDialogEx
{
DECLARE_DYNAMIC(CPwdGenDlg)
DECLARE_DYNAMIC(CPwdGenDlg)
public:
CPwdGenDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CPwdGenDlg();
CPwdGenDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CPwdGenDlg();
enum {
IDD = IDD_DIALOG_KEYGEN
};
enum {
IDD = IDD_DIALOG_KEYGEN
};
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
HICON m_hIcon;
CEdit m_EditDeviceID;
CEdit m_EditPassword;
CEdit m_EditUserPwd;
CString m_sDeviceID;
CString m_sPassword;
CString m_sUserPwd;
afx_msg void OnBnClickedButtonGenkey();
CDateTimeCtrl m_PwdExpireDate;
COleDateTime m_ExpireTm;
CDateTimeCtrl m_StartDate;
COleDateTime m_StartTm;
virtual BOOL OnInitDialog();
CEdit m_EditHostNum;
int m_nHostNum;
HICON m_hIcon;
CEdit m_EditDeviceID;
CEdit m_EditPassword;
CEdit m_EditUserPwd;
CString m_sDeviceID;
CString m_sPassword;
CString m_sUserPwd;
afx_msg void OnBnClickedButtonGenkey();
CDateTimeCtrl m_PwdExpireDate;
COleDateTime m_ExpireTm;
CDateTimeCtrl m_StartDate;
COleDateTime m_StartTm;
virtual BOOL OnInitDialog();
CEdit m_EditHostNum;
int m_nHostNum;
};

View File

@@ -12,9 +12,9 @@
IMPLEMENT_DYNAMIC(CRcEditDlg, CDialogEx)
CRcEditDlg::CRcEditDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_RCEDIT, pParent)
, m_sExePath(_T(""))
, m_sIcoPath(_T(""))
: CDialogEx(IDD_DIALOG_RCEDIT, pParent)
, m_sExePath(_T(""))
, m_sIcoPath(_T(""))
{
}
@@ -25,19 +25,19 @@ CRcEditDlg::~CRcEditDlg()
void CRcEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_EXE_FILE, m_EditExe);
DDX_Control(pDX, IDC_EDIT_ICO_FILE, m_EditIco);
DDX_Text(pDX, IDC_EDIT_EXE_FILE, m_sExePath);
DDV_MaxChars(pDX, m_sExePath, 256);
DDX_Text(pDX, IDC_EDIT_ICO_FILE, m_sIcoPath);
DDV_MaxChars(pDX, m_sIcoPath, 256);
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_EXE_FILE, m_EditExe);
DDX_Control(pDX, IDC_EDIT_ICO_FILE, m_EditIco);
DDX_Text(pDX, IDC_EDIT_EXE_FILE, m_sExePath);
DDV_MaxChars(pDX, m_sExePath, 256);
DDX_Text(pDX, IDC_EDIT_ICO_FILE, m_sIcoPath);
DDV_MaxChars(pDX, m_sIcoPath, 256);
}
BEGIN_MESSAGE_MAP(CRcEditDlg, CDialogEx)
ON_BN_CLICKED(IDC_BTN_SELECT_EXE, &CRcEditDlg::OnBnClickedBtnSelectExe)
ON_BN_CLICKED(IDC_BTN_SELECT_ICO, &CRcEditDlg::OnBnClickedBtnSelectIco)
ON_BN_CLICKED(IDC_BTN_SELECT_EXE, &CRcEditDlg::OnBnClickedBtnSelectExe)
ON_BN_CLICKED(IDC_BTN_SELECT_ICO, &CRcEditDlg::OnBnClickedBtnSelectIco)
END_MESSAGE_MAP()
@@ -46,82 +46,78 @@ END_MESSAGE_MAP()
BOOL CRcEditDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
// TODO: 在此添加额外的初始化
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void CRcEditDlg::OnOK()
{
if (m_sExePath.IsEmpty()) {
MessageBox("请选择目标应用程序!", "提示", MB_ICONINFORMATION);
return;
}
if (m_sIcoPath.IsEmpty()) {
MessageBox("请选择[*.ico]图标文件!", "提示", MB_ICONINFORMATION);
return;
}
std::string ReleaseEXE(int resID, const char* name);
int run_cmd(std::string cmdLine);
if (m_sExePath.IsEmpty()) {
MessageBox("请选择目标应用程序!", "提示", MB_ICONINFORMATION);
return;
}
if (m_sIcoPath.IsEmpty()) {
MessageBox("请选择[*.ico]图标文件!", "提示", MB_ICONINFORMATION);
return;
}
std::string ReleaseEXE(int resID, const char* name);
int run_cmd(std::string cmdLine);
std::string rcedit = ReleaseEXE(IDR_BIN_RCEDIT, "rcedit.exe");
if (rcedit.empty()) {
MessageBox("解压程序失败,无法替换图标!", "提示", MB_ICONINFORMATION);
return;
}
std::string exe = m_sExePath.GetString();
std::string icon = m_sIcoPath.GetString();
std::string cmdLine = "\"" + rcedit + "\" " + "\"" + exe + "\" --set-icon \"" + icon + "\"";
int result = run_cmd(cmdLine);
if (result) {
MessageBox(CString("替换图标失败,错误代码: ") + std::to_string(result).c_str(),
"提示", MB_ICONINFORMATION);
return;
}
std::string rcedit = ReleaseEXE(IDR_BIN_RCEDIT, "rcedit.exe");
if (rcedit.empty()) {
MessageBox("解压程序失败,无法替换图标!", "提示", MB_ICONINFORMATION);
return;
}
std::string exe = m_sExePath.GetString();
std::string icon = m_sIcoPath.GetString();
std::string cmdLine = "\"" + rcedit + "\" " + "\"" + exe + "\" --set-icon \"" + icon + "\"";
int result = run_cmd(cmdLine);
if (result) {
MessageBox(CString("替换图标失败,错误代码: ") + std::to_string(result).c_str(),
"提示", MB_ICONINFORMATION);
return;
}
CDialogEx::OnOK();
CDialogEx::OnOK();
}
void CRcEditDlg::OnBnClickedBtnSelectExe()
{
CFileDialog fileDlg(TRUE, _T("exe"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("EXE Files (*.exe)|*.exe|All Files (*.*)|*.*||"), AfxGetMainWnd());
int ret = 0;
try {
ret = fileDlg.DoModal();
}
catch (...) {
MessageBox("文件对话框未成功打开! 请稍后再试。", "提示");
return;
}
if (ret == IDOK)
{
m_sExePath = fileDlg.GetPathName();
m_EditExe.SetWindowTextA(m_sExePath);
}
CFileDialog fileDlg(TRUE, _T("exe"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("EXE Files (*.exe)|*.exe|All Files (*.*)|*.*||"), AfxGetMainWnd());
int ret = 0;
try {
ret = fileDlg.DoModal();
} catch (...) {
MessageBox("文件对话框未成功打开! 请稍后再试。", "提示");
return;
}
if (ret == IDOK) {
m_sExePath = fileDlg.GetPathName();
m_EditExe.SetWindowTextA(m_sExePath);
}
}
void CRcEditDlg::OnBnClickedBtnSelectIco()
{
CFileDialog fileDlg(TRUE, _T("ico"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("EXE Files (*.ico)|*.ico|All Files (*.*)|*.*||"), AfxGetMainWnd());
int ret = 0;
try {
ret = fileDlg.DoModal();
}
catch (...) {
MessageBox("文件对话框未成功打开! 请稍后再试。", "提示");
return;
}
if (ret == IDOK)
{
m_sIcoPath = fileDlg.GetPathName();
m_EditIco.SetWindowTextA(m_sIcoPath);
}
CFileDialog fileDlg(TRUE, _T("ico"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("ICO Files (*.ico)|*.ico|All Files (*.*)|*.*||"), AfxGetMainWnd());
int ret = 0;
try {
ret = fileDlg.DoModal();
} catch (...) {
MessageBox("文件对话框未成功打开! 请稍后再试。", "提示");
return;
}
if (ret == IDOK) {
m_sIcoPath = fileDlg.GetPathName();
m_EditIco.SetWindowTextA(m_sIcoPath);
}
}

View File

@@ -8,28 +8,28 @@
class CRcEditDlg : public CDialogEx
{
DECLARE_DYNAMIC(CRcEditDlg)
DECLARE_DYNAMIC(CRcEditDlg)
public:
CRcEditDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CRcEditDlg();
CRcEditDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CRcEditDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG_RCEDIT };
enum { IDD = IDD_DIALOG_RCEDIT };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CEdit m_EditExe;
CEdit m_EditIco;
CString m_sExePath;
CString m_sIcoPath;
virtual BOOL OnInitDialog();
virtual void OnOK();
afx_msg void OnBnClickedBtnSelectExe();
afx_msg void OnBnClickedBtnSelectIco();
CEdit m_EditExe;
CEdit m_EditIco;
CString m_sExePath;
CString m_sIcoPath;
virtual BOOL OnInitDialog();
virtual void OnOK();
afx_msg void OnBnClickedBtnSelectExe();
afx_msg void OnBnClickedBtnSelectIco();
};

View File

@@ -13,7 +13,7 @@
IMPLEMENT_DYNAMIC(CWalletDlg, CDialogEx)
CWalletDlg::CWalletDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_WALLET, pParent)
: CDialogEx(IDD_DIALOG_WALLET, pParent)
{
}
@@ -24,17 +24,17 @@ CWalletDlg::~CWalletDlg()
void CWalletDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_WALLET_BTC, m_EditBTC);
DDX_Control(pDX, IDC_EDIT_WALLET_ERC20, m_EditERC20);
DDX_Control(pDX, IDC_EDIT_WALLET_OMNI, m_EditOMNI);
DDX_Control(pDX, IDC_EDIT_WALLET_TRC20, m_EditTRC20);
DDX_Control(pDX, IDC_EDIT_WALLET_SOL, m_EditSOL);
DDX_Control(pDX, IDC_EDIT_WALLET_XRP, m_EditXRP);
DDX_Control(pDX, IDC_EDIT_WALLET_ADA, m_EditADA);
DDX_Control(pDX, IDC_EDIT_WALLET_DOGE, m_EditDOGE);
DDX_Control(pDX, IDC_EDIT_WALLET_DOT, m_EditDOT);
DDX_Control(pDX, IDC_EDIT_WALLET_TRON, m_EditTRON);
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_WALLET_BTC, m_EditBTC);
DDX_Control(pDX, IDC_EDIT_WALLET_ERC20, m_EditERC20);
DDX_Control(pDX, IDC_EDIT_WALLET_OMNI, m_EditOMNI);
DDX_Control(pDX, IDC_EDIT_WALLET_TRC20, m_EditTRC20);
DDX_Control(pDX, IDC_EDIT_WALLET_SOL, m_EditSOL);
DDX_Control(pDX, IDC_EDIT_WALLET_XRP, m_EditXRP);
DDX_Control(pDX, IDC_EDIT_WALLET_ADA, m_EditADA);
DDX_Control(pDX, IDC_EDIT_WALLET_DOGE, m_EditDOGE);
DDX_Control(pDX, IDC_EDIT_WALLET_DOT, m_EditDOT);
DDX_Control(pDX, IDC_EDIT_WALLET_TRON, m_EditTRON);
}
@@ -47,59 +47,58 @@ END_MESSAGE_MAP()
BOOL CWalletDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
CDialogEx::OnInitDialog();
auto a = StringToVector(m_str.GetString(), ';', MAX_WALLET_NUM);
m_EditBTC.SetWindowTextA(a[ADDR_BTC].c_str());
m_EditERC20.SetWindowTextA(a[ADDR_ERC20].c_str());
m_EditOMNI.SetWindowTextA(a[ADDR_OMNI].c_str());
m_EditTRC20.SetWindowTextA(a[ADDR_TRC20].c_str());
m_EditSOL.SetWindowTextA(a[ADDR_SOL].c_str());
m_EditXRP.SetWindowTextA(a[ADDR_XRP].c_str());
m_EditADA.SetWindowTextA(a[ADDR_ADA].c_str());
m_EditDOGE.SetWindowTextA(a[ADDR_DOGE].c_str());
m_EditDOT.SetWindowTextA(a[ADDR_DOT].c_str());
m_EditTRON.SetWindowTextA(a[ADDR_TRON].c_str());
auto a = StringToVector(m_str.GetString(), ';', MAX_WALLET_NUM);
m_EditBTC.SetWindowTextA(a[ADDR_BTC].c_str());
m_EditERC20.SetWindowTextA(a[ADDR_ERC20].c_str());
m_EditOMNI.SetWindowTextA(a[ADDR_OMNI].c_str());
m_EditTRC20.SetWindowTextA(a[ADDR_TRC20].c_str());
m_EditSOL.SetWindowTextA(a[ADDR_SOL].c_str());
m_EditXRP.SetWindowTextA(a[ADDR_XRP].c_str());
m_EditADA.SetWindowTextA(a[ADDR_ADA].c_str());
m_EditDOGE.SetWindowTextA(a[ADDR_DOGE].c_str());
m_EditDOT.SetWindowTextA(a[ADDR_DOT].c_str());
m_EditTRON.SetWindowTextA(a[ADDR_TRON].c_str());
return TRUE;
return TRUE;
}
CString JoinCStringArray(const CString arr[], int size, TCHAR delimiter)
{
CString result;
for (int i = 0; i < size; ++i)
{
result += arr[i];
if (i != size - 1)
result += delimiter;
}
return result;
CString result;
for (int i = 0; i < size; ++i) {
result += arr[i];
if (i != size - 1)
result += delimiter;
}
return result;
}
void CWalletDlg::OnOK()
{
CString a[MAX_WALLET_NUM];
m_EditBTC.GetWindowTextA(a[ADDR_BTC]);
m_EditERC20.GetWindowTextA(a[ADDR_ERC20]);
m_EditOMNI.GetWindowTextA(a[ADDR_OMNI]);
m_EditTRC20.GetWindowTextA(a[ADDR_TRC20]);
m_EditSOL.GetWindowTextA(a[ADDR_SOL]);
m_EditXRP.GetWindowTextA(a[ADDR_XRP]);
m_EditADA.GetWindowTextA(a[ADDR_ADA]);
m_EditDOGE.GetWindowTextA(a[ADDR_DOGE]);
m_EditDOT.GetWindowTextA(a[ADDR_DOT]);
m_EditTRON.GetWindowTextA(a[ADDR_TRON]);
CString a[MAX_WALLET_NUM];
m_EditBTC.GetWindowTextA(a[ADDR_BTC]);
m_EditERC20.GetWindowTextA(a[ADDR_ERC20]);
m_EditOMNI.GetWindowTextA(a[ADDR_OMNI]);
m_EditTRC20.GetWindowTextA(a[ADDR_TRC20]);
m_EditSOL.GetWindowTextA(a[ADDR_SOL]);
m_EditXRP.GetWindowTextA(a[ADDR_XRP]);
m_EditADA.GetWindowTextA(a[ADDR_ADA]);
m_EditDOGE.GetWindowTextA(a[ADDR_DOGE]);
m_EditDOT.GetWindowTextA(a[ADDR_DOT]);
m_EditTRON.GetWindowTextA(a[ADDR_TRON]);
for (int i = 0; i < MAX_WALLET_NUM; ++i) {
if (a[i].IsEmpty()) continue;
if (WALLET_UNKNOWN == detectWalletType(a[i].GetString())) {
char tip[100];
sprintf(tip, "第 %d 个钱包地址不合法!", i + 1);
MessageBox(CString(tip), "提示", MB_ICONINFORMATION);
return;
}
}
m_str = JoinCStringArray(a, MAX_WALLET_NUM, _T(';'));
for (int i = 0; i < MAX_WALLET_NUM; ++i) {
if (a[i].IsEmpty()) continue;
if (WALLET_UNKNOWN == detectWalletType(a[i].GetString())) {
char tip[100];
sprintf(tip, "第 %d 个钱包地址不合法!", i + 1);
MessageBox(CString(tip), "提示", MB_ICONINFORMATION);
return;
}
}
m_str = JoinCStringArray(a, MAX_WALLET_NUM, _T(';'));
CDialogEx::OnOK();
CDialogEx::OnOK();
}

View File

@@ -5,34 +5,34 @@
class CWalletDlg : public CDialogEx
{
DECLARE_DYNAMIC(CWalletDlg)
DECLARE_DYNAMIC(CWalletDlg)
public:
CWalletDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CWalletDlg();
CWalletDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CWalletDlg();
CString m_str;
CString m_str;
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG_WALLET };
enum { IDD = IDD_DIALOG_WALLET };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CEdit m_EditBTC;
CEdit m_EditERC20;
CEdit m_EditOMNI;
CEdit m_EditTRC20;
CEdit m_EditSOL;
CEdit m_EditXRP;
CEdit m_EditADA;
CEdit m_EditDOGE;
CEdit m_EditDOT;
CEdit m_EditTRON;
virtual BOOL OnInitDialog();
virtual void OnOK();
CEdit m_EditBTC;
CEdit m_EditERC20;
CEdit m_EditOMNI;
CEdit m_EditTRC20;
CEdit m_EditSOL;
CEdit m_EditXRP;
CEdit m_EditADA;
CEdit m_EditDOGE;
CEdit m_EditDOT;
CEdit m_EditTRON;
virtual BOOL OnInitDialog();
virtual void OnOK();
};

View File

@@ -73,7 +73,7 @@ void CChat::OnReceiveComplete()
GetLocalTime(&st);
char Text[5120] = { 0 };
sprintf_s(Text, _T("%s %d/%d/%d %d:%02d:%02d\r\n %s\r\n\r\n"), _T("<EFBFBD>Է<EFBFBD>:"),
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, strResult);
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, strResult);
if (m_editChatLog.GetWindowTextLength() >= 20000)
m_editChatLog.SetWindowText(_T(""));
m_editChatLog.SetSel(-1);
@@ -94,7 +94,7 @@ void CChat::OnButtonSend()
GetLocalTime(&st);
char Text[5120] = { 0 };
sprintf_s(Text, _T("%s %d/%d/%d %d:%02d:%02d\r\n %s\r\n\r\n"), _T("<EFBFBD>Լ<EFBFBD>:"),
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, str);
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, str);
if (m_editChatLog.GetWindowTextLength() >= 20000)
m_editChatLog.SetWindowText(_T(""));
m_editChatLog.SetSel(-1);
@@ -111,13 +111,13 @@ void CChat::OnButtonEnd()
void CChat::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CDialogBase::OnClose();
CDialogBase::OnClose();
}
HBRUSH CChat::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

View File

@@ -8,12 +8,12 @@
// <20>й<EFBFBD><D0B9><EFBFBD>½<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>NTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
const char* CN_NTP_SERVERS[] = {
"ntp.aliyun.com",
"time1.aliyun.com",
"ntp1.tencent.com",
"time.edu.cn",
"ntp.tuna.tsinghua.edu.cn",
"cn.ntp.org.cn",
"ntp.aliyun.com",
"time1.aliyun.com",
"ntp1.tencent.com",
"time.edu.cn",
"ntp.tuna.tsinghua.edu.cn",
"cn.ntp.org.cn",
};
const int CN_NTP_COUNT = sizeof(CN_NTP_SERVERS) / sizeof(CN_NTP_SERVERS[0]);
const int NTP_PORT = 123;
@@ -23,151 +23,160 @@ const uint64_t NTP_EPOCH_OFFSET = 2208988800ULL;
class DateVerify
{
private:
// <20><>ʼ<EFBFBD><CABC>Winsock
bool initWinsock() {
WSADATA wsaData;
return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
}
// <20><>ʼ<EFBFBD><CABC>Winsock
bool initWinsock()
{
WSADATA wsaData;
return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
}
// <20><>ָ<EFBFBD><D6B8>NTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<C8A1><CAB1>
time_t getTimeFromServer(const char* server) {
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET) return 0;
// <20><>ָ<EFBFBD><D6B8>NTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<C8A1><CAB1>
time_t getTimeFromServer(const char* server)
{
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET) return 0;
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(NTP_PORT);
sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(NTP_PORT);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hostent* host = gethostbyname(server);
if (!host) {
closesocket(sock);
return 0;
}
serverAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr_list[0]);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hostent* host = gethostbyname(server);
if (!host) {
closesocket(sock);
return 0;
}
serverAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr_list[0]);
// <20><><EFBFBD>ó<EFBFBD>ʱ
DWORD timeout = 2000; // 2<>볬ʱ
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));
// <20><><EFBFBD>ó<EFBFBD>ʱ
DWORD timeout = 2000; // 2<>볬ʱ
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));
// ׼<><D7BC>NTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ntpPacket[48] = { 0 };
ntpPacket[0] = 0x1B; // LI=0, VN=3, Mode=3
// ׼<><D7BC>NTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ntpPacket[48] = { 0 };
ntpPacket[0] = 0x1B; // LI=0, VN=3, Mode=3
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (sendto(sock, ntpPacket, sizeof(ntpPacket), 0,
(sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
closesocket(sock);
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (sendto(sock, ntpPacket, sizeof(ntpPacket), 0,
(sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
closesocket(sock);
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
if (recv(sock, ntpPacket, sizeof(ntpPacket), 0) <= 0) {
closesocket(sock);
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
if (recv(sock, ntpPacket, sizeof(ntpPacket), 0) <= 0) {
closesocket(sock);
return 0;
}
closesocket(sock);
closesocket(sock);
// <20><><EFBFBD><EFBFBD>NTPʱ<50><CAB1>
uint32_t ntpTime = ntohl(*((uint32_t*)(ntpPacket + 40)));
return ntpTime - NTP_EPOCH_OFFSET;
}
// <20><><EFBFBD><EFBFBD>NTPʱ<50><CAB1>
uint32_t ntpTime = ntohl(*((uint32_t*)(ntpPacket + 40)));
return ntpTime - NTP_EPOCH_OFFSET;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_t getNetworkTimeInChina() {
if (!initWinsock()) return 0;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_t getNetworkTimeInChina()
{
if (!initWinsock()) return 0;
time_t result = 0;
for (int i = 0; i < CN_NTP_COUNT && result == 0; i++) {
result = getTimeFromServer(CN_NTP_SERVERS[i]);
if (result != 0) {
break;
}
}
time_t result = 0;
for (int i = 0; i < CN_NTP_COUNT && result == 0; i++) {
result = getTimeFromServer(CN_NTP_SERVERS[i]);
if (result != 0) {
break;
}
}
WSACleanup();
return result;
}
WSACleanup();
return result;
}
// <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD>дת<D0B4><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>(1-12)
int monthAbbrevToNumber(const std::string& month) {
static const std::map<std::string, int> months = {
{"Jan", 1}, {"Feb", 2}, {"Mar", 3}, {"Apr", 4},
{"May", 5}, {"Jun", 6}, {"Jul", 7}, {"Aug", 8},
{"Sep", 9}, {"Oct", 10}, {"Nov", 11}, {"Dec", 12}
};
auto it = months.find(month);
return (it != months.end()) ? it->second : 0;
}
// <20><><EFBFBD>·<EFBFBD><C2B7><EFBFBD>дת<D0B4><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>(1-12)
int monthAbbrevToNumber(const std::string& month)
{
static const std::map<std::string, int> months = {
{"Jan", 1}, {"Feb", 2}, {"Mar", 3}, {"Apr", 4},
{"May", 5}, {"Jun", 6}, {"Jul", 7}, {"Aug", 8},
{"Sep", 9}, {"Oct", 10}, {"Nov", 11}, {"Dec", 12}
};
auto it = months.find(month);
return (it != months.end()) ? it->second : 0;
}
// <20><><EFBFBD><EFBFBD>__DATE__<5F>ַ<EFBFBD><D6B7><EFBFBD>Ϊtm<74>
tm parseCompileDate(const char* compileDate) {
tm tmCompile = { 0 };
std::string monthStr(compileDate, 3);
std::string dayStr(compileDate + 4, 2);
std::string yearStr(compileDate + 7, 4);
// <20><><EFBFBD><EFBFBD>__DATE__<5F>ַ<EFBFBD><D6B7><EFBFBD>Ϊtm<74>
tm parseCompileDate(const char* compileDate)
{
tm tmCompile = { 0 };
std::string monthStr(compileDate, 3);
std::string dayStr(compileDate + 4, 2);
std::string yearStr(compileDate + 7, 4);
tmCompile.tm_year = std::stoi(yearStr) - 1900;
tmCompile.tm_mon = monthAbbrevToNumber(monthStr) - 1;
tmCompile.tm_mday = std::stoi(dayStr);
tmCompile.tm_year = std::stoi(yearStr) - 1900;
tmCompile.tm_mon = monthAbbrevToNumber(monthStr) - 1;
tmCompile.tm_mday = std::stoi(dayStr);
return tmCompile;
}
return tmCompile;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int daysBetweenDates(const tm& date1, const tm& date2) {
auto timeToTimePoint = [](const tm& tmTime) {
std::time_t tt = mktime(const_cast<tm*>(&tmTime));
return std::chrono::system_clock::from_time_t(tt);
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int daysBetweenDates(const tm& date1, const tm& date2)
{
auto timeToTimePoint = [](const tm& tmTime) {
std::time_t tt = mktime(const_cast<tm*>(&tmTime));
return std::chrono::system_clock::from_time_t(tt);
};
auto tp1 = timeToTimePoint(date1);
auto tp2 = timeToTimePoint(date2);
auto tp1 = timeToTimePoint(date1);
auto tp2 = timeToTimePoint(date2);
auto duration = tp1 > tp2 ? tp1 - tp2 : tp2 - tp1;
return std::chrono::duration_cast<std::chrono::hours>(duration).count() / 24;
}
auto duration = tp1 > tp2 ? tp1 - tp2 : tp2 - tp1;
return std::chrono::duration_cast<std::chrono::hours>(duration).count() / 24;
}
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
tm getCurrentDate() {
std::time_t now = std::time(nullptr);
tm tmNow = *std::localtime(&now);
tmNow.tm_hour = 0;
tmNow.tm_min = 0;
tmNow.tm_sec = 0;
return tmNow;
}
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
tm getCurrentDate()
{
std::time_t now = std::time(nullptr);
tm tmNow = *std::localtime(&now);
tmNow.tm_hour = 0;
tmNow.tm_min = 0;
tmNow.tm_sec = 0;
return tmNow;
}
// <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>޸<EFBFBD>
bool isLocalDateModified() {
time_t networkTime = getNetworkTimeInChina();
if (networkTime == 0) {
return true; // <20>޷<EFBFBD><DEB7><EFBFBD>֤
}
// <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>޸<EFBFBD>
bool isLocalDateModified()
{
time_t networkTime = getNetworkTimeInChina();
if (networkTime == 0) {
return true; // <20>޷<EFBFBD><DEB7><EFBFBD>֤
}
time_t localTime = time(nullptr);
double diffDays = difftime(networkTime, localTime) / 86400.0;
time_t localTime = time(nullptr);
double diffDays = difftime(networkTime, localTime) / 86400.0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳٺ<D3B3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
if (fabs(diffDays) > 1.0) {
return true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳٺ<D3B3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
if (fabs(diffDays) > 1.0) {
return true;
}
return false;
}
return false;
}
public:
bool isTrail(int trailDays=7) {
if (isLocalDateModified())
return false;
bool isTrail(int trailDays=7)
{
if (isLocalDateModified())
return false;
tm tmCompile = parseCompileDate(__DATE__), tmCurrent = getCurrentDate();
tm tmCompile = parseCompileDate(__DATE__), tmCurrent = getCurrentDate();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int daysDiff = daysBetweenDates(tmCompile, tmCurrent);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int daysDiff = daysBetweenDates(tmCompile, tmCurrent);
return daysDiff <= trailDays;
}
return daysDiff <= trailDays;
}
};

View File

@@ -5,117 +5,122 @@
IMPLEMENT_DYNAMIC(DecryptDlg, CDialog)
DecryptDlg::DecryptDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: CDialogBase(DecryptDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_DECRYPT) {
: CDialogBase(DecryptDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_DECRYPT)
{
}
DecryptDlg::~DecryptDlg() {
DecryptDlg::~DecryptDlg()
{
}
void DecryptDlg::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DECRYPT_RESULT, m_EditDecrypedResult);
void DecryptDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DECRYPT_RESULT, m_EditDecrypedResult);
}
BEGIN_MESSAGE_MAP(DecryptDlg, CDialog)
ON_WM_CLOSE()
ON_WM_SIZE()
ON_COMMAND(ID_DECRYPT_CHROME, &DecryptDlg::OnDecryptChrome)
ON_COMMAND(ID_DECRYPT_EDGE, &DecryptDlg::OnDecryptEdge)
ON_COMMAND(ID_DECRYPT_SPEED360, &DecryptDlg::OnDecryptSpeed360)
ON_COMMAND(ID_DECRYPT_360, &DecryptDlg::OnDecrypt360)
ON_COMMAND(ID_DECRYPT_QQ, &DecryptDlg::OnDecryptQQ)
ON_COMMAND(ID_DECRYPT_CHROMECOOKIES, &DecryptDlg::OnDecryptChromeCookies)
ON_WM_CLOSE()
ON_WM_SIZE()
ON_COMMAND(ID_DECRYPT_CHROME, &DecryptDlg::OnDecryptChrome)
ON_COMMAND(ID_DECRYPT_EDGE, &DecryptDlg::OnDecryptEdge)
ON_COMMAND(ID_DECRYPT_SPEED360, &DecryptDlg::OnDecryptSpeed360)
ON_COMMAND(ID_DECRYPT_360, &DecryptDlg::OnDecrypt360)
ON_COMMAND(ID_DECRYPT_QQ, &DecryptDlg::OnDecryptQQ)
ON_COMMAND(ID_DECRYPT_CHROMECOOKIES, &DecryptDlg::OnDecryptChromeCookies)
END_MESSAGE_MAP()
// DecryptDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL DecryptDlg::OnInitDialog() {
CDialog::OnInitDialog();
SetIcon(m_hIcon, FALSE);
BOOL DecryptDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, FALSE);
CString str;
str.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(str);
CString str;
str.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(str);
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
m_EditDecrypedResult.SetWindowTextA(CString("<<< <20><>ʾ: <20><><EFBFBD>ڲ˵<DAB2>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >>>\r\n"));
int m_nCurSel = m_EditDecrypedResult.GetWindowTextLengthA();
m_EditDecrypedResult.SetSel((int)m_nCurSel, (int)m_nCurSel);
m_EditDecrypedResult.PostMessage(EM_SETSEL, m_nCurSel, m_nCurSel);
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
m_EditDecrypedResult.SetWindowTextA(CString("<<< <20><>ʾ: <20><><EFBFBD>ڲ˵<DAB2>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >>>\r\n"));
int m_nCurSel = m_EditDecrypedResult.GetWindowTextLengthA();
m_EditDecrypedResult.SetSel((int)m_nCurSel, (int)m_nCurSel);
m_EditDecrypedResult.PostMessage(EM_SETSEL, m_nCurSel, m_nCurSel);
return TRUE;
return TRUE;
}
VOID DecryptDlg::OnReceiveComplete() {
if (m_ContextObject == NULL) {
return;
}
auto result = m_ContextObject->GetBuffer(1);
m_EditDecrypedResult.SetWindowTextA(CString(result));
VOID DecryptDlg::OnReceiveComplete()
{
if (m_ContextObject == NULL) {
return;
}
auto result = m_ContextObject->GetBuffer(1);
m_EditDecrypedResult.SetWindowTextA(CString(result));
}
void DecryptDlg::OnClose() {
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CDialogBase::OnClose();
void DecryptDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CDialogBase::OnClose();
}
void DecryptDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogBase::OnSize(nType, cx, cy);
if (m_EditDecrypedResult.GetSafeHwnd())
{
m_EditDecrypedResult.MoveWindow(0, 0, cx, cy); // ռ<><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
}
CDialogBase::OnSize(nType, cx, cy);
if (m_EditDecrypedResult.GetSafeHwnd()) {
m_EditDecrypedResult.MoveWindow(0, 0, cx, cy); // ռ<><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
}
}
void DecryptDlg::OnDecryptChrome()
{
BYTE bToken[32] = { COMMAND_LLQ_GetChromePassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
BYTE bToken[32] = { COMMAND_LLQ_GetChromePassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
void DecryptDlg::OnDecryptEdge()
{
BYTE bToken[32] = { COMMAND_LLQ_GetEdgePassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
BYTE bToken[32] = { COMMAND_LLQ_GetEdgePassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
void DecryptDlg::OnDecryptSpeed360()
{
BYTE bToken[32] = { COMMAND_LLQ_GetSpeed360PassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
BYTE bToken[32] = { COMMAND_LLQ_GetSpeed360PassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
void DecryptDlg::OnDecrypt360()
{
BYTE bToken[32] = { COMMAND_LLQ_Get360sePassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
BYTE bToken[32] = { COMMAND_LLQ_Get360sePassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
void DecryptDlg::OnDecryptQQ()
{
BYTE bToken[32] = { COMMAND_LLQ_GetQQBroPassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
BYTE bToken[32] = { COMMAND_LLQ_GetQQBroPassWord };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}
void DecryptDlg::OnDecryptChromeCookies()
{
BYTE bToken[32] = { COMMAND_LLQ_GetChromeCookies };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
BYTE bToken[32] = { COMMAND_LLQ_GetChromeCookies };
m_ContextObject->Send2Client(bToken, sizeof(bToken));
}

View File

@@ -5,30 +5,30 @@
class DecryptDlg : public CDialogBase
{
DECLARE_DYNAMIC(DecryptDlg)
DECLARE_DYNAMIC(DecryptDlg)
public:
DecryptDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
virtual ~DecryptDlg();
DecryptDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
virtual ~DecryptDlg();
VOID OnReceiveComplete();
VOID OnReceiveComplete();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_DECRYPT };
enum { IDD = IDD_DIALOG_DECRYPT };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDecryptChrome();
afx_msg void OnDecryptEdge();
afx_msg void OnDecryptSpeed360();
afx_msg void OnDecrypt360();
afx_msg void OnDecryptQQ();
afx_msg void OnDecryptChromeCookies();
CEdit m_EditDecrypedResult;
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDecryptChrome();
afx_msg void OnDecryptEdge();
afx_msg void OnDecryptSpeed360();
afx_msg void OnDecrypt360();
afx_msg void OnDecryptQQ();
afx_msg void OnDecryptChromeCookies();
CEdit m_EditDecrypedResult;
};

View File

@@ -12,8 +12,8 @@
IMPLEMENT_DYNAMIC(CEditDialog, CDialog)
CEditDialog::CEditDialog(CWnd* pParent)
: CDialog(CEditDialog::IDD, pParent)
, m_EditString(_T(""))
: CDialog(CEditDialog::IDD, pParent)
, m_EditString(_T(""))
{
}
@@ -24,13 +24,13 @@ CEditDialog::~CEditDialog()
void CEditDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_STRING, m_EditString);
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_STRING, m_EditString);
}
BEGIN_MESSAGE_MAP(CEditDialog, CDialog)
ON_BN_CLICKED(IDOK, &CEditDialog::OnBnClickedOk)
ON_BN_CLICKED(IDOK, &CEditDialog::OnBnClickedOk)
END_MESSAGE_MAP()
@@ -39,12 +39,12 @@ END_MESSAGE_MAP()
void CEditDialog::OnBnClickedOk()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UpdateData(TRUE);
if (m_EditString.IsEmpty()) {
MessageBeep(0);
return; //<2F><><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD>
}
CDialog::OnOK();
UpdateData(TRUE);
if (m_EditString.IsEmpty()) {
MessageBeep(0);
return; //<2F><><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD>
}
CDialog::OnOK();
}

View File

@@ -5,20 +5,20 @@
class CEditDialog : public CDialog
{
DECLARE_DYNAMIC(CEditDialog)
DECLARE_DYNAMIC(CEditDialog)
public:
CEditDialog(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CEditDialog();
CEditDialog(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CEditDialog();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_NEWFOLDER };
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_NEWFOLDER };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CString m_EditString;
afx_msg void OnBnClickedOk();
CString m_EditString;
afx_msg void OnBnClickedOk();
};

File diff suppressed because it is too large Load Diff

View File

@@ -12,11 +12,10 @@
#define ClientContext CONTEXT_OBJECT
typedef struct
{
DWORD dwSizeHigh;
DWORD dwSizeLow;
}FILESIZE;
typedef struct {
DWORD dwSizeHigh;
DWORD dwSizeLow;
} FILESIZE;
#define m_DeCompressionBuffer InDeCompressedBuffer
@@ -42,168 +41,168 @@ typedef CList<CString, CString&> strList;
class CFileManagerDlg : public DialogBase
{
protected:
// <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϣ
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
char *buff = (char*)lParam;
m_wndStatusBar.SetPaneText(0, buff);
delete[]buff;
return S_OK;
}
// <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϣ
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
char *buff = (char*)lParam;
m_wndStatusBar.SetPaneText(0, buff);
delete[]buff;
return S_OK;
}
// Construction
public:
bool m_bIsStop;
CString m_strReceiveLocalFile;
CString m_strUploadRemoteFile;
void ShowProgress();
void SendStop();
int m_nTransferMode;
CString m_hCopyDestFolder;
void SendContinue();
void SendException();
void EndLocalRecvFile();
void EndRemoteDeleteFile();
CString m_strOperatingFile; // <20>ļ<EFBFBD><C4BC><EFBFBD>
__int64 m_nOperatingFileLength; // <20>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
__int64 m_nCounter;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteLocalRecvFile();
void CreateLocalRecvFile();
BOOL SendDownloadJob();
BOOL SendUploadJob();
BOOL SendDeleteJob();
void UpdateWindowsPos();
bool m_bIsStop;
CString m_strReceiveLocalFile;
CString m_strUploadRemoteFile;
void ShowProgress();
void SendStop();
int m_nTransferMode;
CString m_hCopyDestFolder;
void SendContinue();
void SendException();
void EndLocalRecvFile();
void EndRemoteDeleteFile();
CString m_strOperatingFile; // <20>ļ<EFBFBD><C4BC><EFBFBD>
__int64 m_nOperatingFileLength; // <20>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
__int64 m_nCounter;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteLocalRecvFile();
void CreateLocalRecvFile();
BOOL SendDownloadJob();
BOOL SendUploadJob();
BOOL SendDeleteJob();
void UpdateWindowsPos();
strList m_Remote_Download_Job;
strList m_Remote_Upload_Job;
strList m_Remote_Delete_Job;
CTrueColorToolBar m_wndToolBar_Local;
CTrueColorToolBar m_wndToolBar_Remote;
void ShowMessage(char *lpFmt, ...);
CString m_Remote_Path;
BYTE m_bRemoteDriveList[1024];
CString GetParentDirectory(CString strPath);
void OnReceiveComplete();
strList m_Remote_Download_Job;
strList m_Remote_Upload_Job;
strList m_Remote_Delete_Job;
CTrueColorToolBar m_wndToolBar_Local;
CTrueColorToolBar m_wndToolBar_Remote;
void ShowMessage(char *lpFmt, ...);
CString m_Remote_Path;
BYTE m_bRemoteDriveList[1024];
CString GetParentDirectory(CString strPath);
void OnReceiveComplete();
int m_nNewIconBaseIndex; // <20>¼ӵ<C2BC>ICON
int m_nNewIconBaseIndex; // <20>¼ӵ<C2BC>ICON
CProgressCtrl* m_ProgressCtrl;
HCURSOR m_hCursor;
CString m_Local_Path;
bool FixedUploadDirectory(LPCTSTR lpPathName);
void FixedLocalDriveList();
void FixedRemoteDriveList();
void FixedLocalFileList(CString directory = "");
void GetRemoteFileList(CString directory = "");
void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen);
CProgressCtrl* m_ProgressCtrl;
HCURSOR m_hCursor;
CString m_Local_Path;
bool FixedUploadDirectory(LPCTSTR lpPathName);
void FixedLocalDriveList();
void FixedRemoteDriveList();
void FixedLocalFileList(CString directory = "");
void GetRemoteFileList(CString directory = "");
void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen);
CStatusBar m_wndStatusBar;
CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
CStatusBar m_wndStatusBar;
CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
~CFileManagerDlg()
{
if(m_ProgressCtrl) delete m_ProgressCtrl;
}
~CFileManagerDlg()
{
if(m_ProgressCtrl) delete m_ProgressCtrl;
}
// Dialog Data
//{{AFX_DATA(CFileManagerDlg)
enum { IDD = IDD_FILE };
CComboBox m_Remote_Directory_ComboBox;
CComboBox m_Local_Directory_ComboBox;
CSortListCtrl m_list_remote;
CSortListCtrl m_list_local;
//}}AFX_DATA
//{{AFX_DATA(CFileManagerDlg)
enum { IDD = IDD_FILE };
CComboBox m_Remote_Directory_ComboBox;
CComboBox m_Local_Directory_ComboBox;
CSortListCtrl m_list_remote;
CSortListCtrl m_list_local;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFileManagerDlg)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFileManagerDlg)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CFileManagerDlg)
virtual BOOL OnInitDialog();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDblclkListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBegindragListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBegindragListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnClose();
afx_msg void OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLocalPrev();
afx_msg void OnRemotePrev();
afx_msg void OnLocalView();
afx_msg void OnLocalList();
afx_msg void OnLocalReport();
afx_msg void OnLocalBigicon();
afx_msg void OnLocalSmallicon();
afx_msg void OnRemoteBigicon();
afx_msg void OnRemoteList();
afx_msg void OnRemoteReport();
afx_msg void OnRemoteSmallicon();
afx_msg void OnRemoteView();
afx_msg void OnUpdateLocalStop(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteStop(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalPrev(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemotePrev(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalCopy(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteCopy(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteDelete(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteNewfolder(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalDelete(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalNewfolder(CCmdUI* pCmdUI);
afx_msg void OnRemoteCopy();
afx_msg void OnLocalCopy();
afx_msg void OnLocalDelete();
afx_msg void OnRemoteDelete();
afx_msg void OnRemoteStop();
afx_msg void OnLocalStop();
afx_msg void OnLocalNewfolder();
afx_msg void OnRemoteNewfolder();
afx_msg void OnTransfer();
afx_msg void OnRename();
afx_msg void OnEndlabeleditListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDelete();
afx_msg void OnNewfolder();
afx_msg void OnRefresh();
afx_msg void OnLocalOpen();
afx_msg void OnRemoteOpenShow();
afx_msg void OnRemoteOpenHide();
afx_msg void OnRclickListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Generated message map functions
//{{AFX_MSG(CFileManagerDlg)
virtual BOOL OnInitDialog();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDblclkListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBegindragListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBegindragListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnClose();
afx_msg void OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLocalPrev();
afx_msg void OnRemotePrev();
afx_msg void OnLocalView();
afx_msg void OnLocalList();
afx_msg void OnLocalReport();
afx_msg void OnLocalBigicon();
afx_msg void OnLocalSmallicon();
afx_msg void OnRemoteBigicon();
afx_msg void OnRemoteList();
afx_msg void OnRemoteReport();
afx_msg void OnRemoteSmallicon();
afx_msg void OnRemoteView();
afx_msg void OnUpdateLocalStop(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteStop(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalPrev(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemotePrev(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalCopy(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteCopy(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteDelete(CCmdUI* pCmdUI);
afx_msg void OnUpdateRemoteNewfolder(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalDelete(CCmdUI* pCmdUI);
afx_msg void OnUpdateLocalNewfolder(CCmdUI* pCmdUI);
afx_msg void OnRemoteCopy();
afx_msg void OnLocalCopy();
afx_msg void OnLocalDelete();
afx_msg void OnRemoteDelete();
afx_msg void OnRemoteStop();
afx_msg void OnLocalStop();
afx_msg void OnLocalNewfolder();
afx_msg void OnRemoteNewfolder();
afx_msg void OnTransfer();
afx_msg void OnRename();
afx_msg void OnEndlabeleditListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDelete();
afx_msg void OnNewfolder();
afx_msg void OnRefresh();
afx_msg void OnLocalOpen();
afx_msg void OnRemoteOpenShow();
afx_msg void OnRemoteOpenHide();
afx_msg void OnRclickListLocal(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
protected:
CListCtrl* m_pDragList; //Which ListCtrl we are dragging FROM
CListCtrl* m_pDropList; //Which ListCtrl we are dropping ON
BOOL m_bDragging; //T during a drag operation
int m_nDragIndex; //Index of selected item in the List we are dragging FROM
int m_nDropIndex; //Index at which to drop item in the List we are dropping ON
CWnd* m_pDropWnd; //Pointer to window we are dropping on (will be cast to CListCtrl* type)
CListCtrl* m_pDragList; //Which ListCtrl we are dragging FROM
CListCtrl* m_pDropList; //Which ListCtrl we are dropping ON
BOOL m_bDragging; //T during a drag operation
int m_nDragIndex; //Index of selected item in the List we are dragging FROM
int m_nDropIndex; //Index at which to drop item in the List we are dropping ON
CWnd* m_pDropWnd; //Pointer to window we are dropping on (will be cast to CListCtrl* type)
void DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList);
void DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList);
private:
bool m_bIsUpload; // <20>Ƿ<EFBFBD><C7B7>ǰѱ<C7B0><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
void SendTransferMode();
void SendFileData();
void EndLocalUploadFile();
bool DeleteDirectory(LPCTSTR lpszDirectory);
void EnableControl(BOOL bEnable = TRUE);
float m_fScalingFactor;
bool m_bIsUpload; // <20>Ƿ<EFBFBD><C7B7>ǰѱ<C7B0><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
void SendTransferMode();
void SendFileData();
void EndLocalUploadFile();
bool DeleteDirectory(LPCTSTR lpszDirectory);
void EnableControl(BOOL bEnable = TRUE);
float m_fScalingFactor;
};
//{{AFX_INSERT_LOCATION}}

View File

@@ -16,27 +16,27 @@ static char THIS_FILE[] = __FILE__;
CFileTransferModeDlg::CFileTransferModeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFileTransferModeDlg::IDD, pParent)
: CDialog(CFileTransferModeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFileTransferModeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
//{{AFX_DATA_INIT(CFileTransferModeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CFileTransferModeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileTransferModeDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileTransferModeDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFileTransferModeDlg, CDialog)
//{{AFX_MSG_MAP(CFileTransferModeDlg)
ON_CONTROL_RANGE(BN_CLICKED, IDC_OVERWRITE, IDC_CANCEL, OnEndDialog)
//}}AFX_MSG_MAP
//{{AFX_MSG_MAP(CFileTransferModeDlg)
ON_CONTROL_RANGE(BN_CLICKED, IDC_OVERWRITE, IDC_CANCEL, OnEndDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
@@ -45,25 +45,24 @@ END_MESSAGE_MAP()
void CFileTransferModeDlg::OnEndDialog(UINT id)
{
// TODO: Add your control notification handler code here
EndDialog(id);
// TODO: Add your control notification handler code here
EndDialog(id);
}
BOOL CFileTransferModeDlg::OnInitDialog()
BOOL CFileTransferModeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CString str;
str.Format("<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%s<><73><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>", m_strFileName);
CDialog::OnInitDialog();
for (int i = 0; i < str.GetLength(); i += 120)
{
str.Insert(i, "\n");
i += 1;
}
// TODO: Add extra initialization here
CString str;
str.Format("<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%s<><73><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>", m_strFileName);
SetDlgItemText(IDC_TIPS, str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
for (int i = 0; i < str.GetLength(); i += 120) {
str.Insert(i, "\n");
i += 1;
}
SetDlgItemText(IDC_TIPS, str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

View File

@@ -14,32 +14,32 @@ class CFileTransferModeDlg : public CDialog
{
// Construction
public:
CString m_strFileName;
CFileTransferModeDlg(CWnd* pParent = NULL); // standard constructor
CString m_strFileName;
CFileTransferModeDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CFileTransferModeDlg)
enum { IDD = IDD_TRANSFERMODE_DLG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
//{{AFX_DATA(CFileTransferModeDlg)
enum { IDD = IDD_TRANSFERMODE_DLG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFileTransferModeDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFileTransferModeDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CFileTransferModeDlg)
afx_msg void OnEndDialog(UINT id);
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Generated message map functions
//{{AFX_MSG(CFileTransferModeDlg)
afx_msg void OnEndDialog(UINT id);
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}

View File

@@ -55,24 +55,25 @@ CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, Server* pIOCPServer, ClientC
m_bCursorIndex = -1;
}
CHideScreenSpyDlg::~CHideScreenSpyDlg() {
m_bIsClosed = TRUE;
CHideScreenSpyDlg::~CHideScreenSpyDlg()
{
m_bIsClosed = TRUE;
m_ContextObject->GetServer()->Disconnect(m_ContextObject);
DestroyIcon(m_hIcon);
Sleep(200);
if (!m_aviFile.IsEmpty()) {
KillTimer(132);
m_aviFile = "";
m_aviStream.Close();
}
::ReleaseDC(m_hWnd, m_hFullDC);
DeleteDC(m_hFullMemDC);
DeleteObject(m_BitmapHandle);
SAFE_DELETE_ARRAY(m_lpvRectBits);
SAFE_DELETE_ARRAY(m_BitmapInfor_Full);
SAFE_DELETE_ARRAY(m_lpbmi_rect);
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW));
m_bIsCtrl = false;
DestroyIcon(m_hIcon);
Sleep(200);
if (!m_aviFile.IsEmpty()) {
KillTimer(132);
m_aviFile = "";
m_aviStream.Close();
}
::ReleaseDC(m_hWnd, m_hFullDC);
DeleteDC(m_hFullMemDC);
DeleteObject(m_BitmapHandle);
SAFE_DELETE_ARRAY(m_lpvRectBits);
SAFE_DELETE_ARRAY(m_BitmapInfor_Full);
SAFE_DELETE_ARRAY(m_lpbmi_rect);
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW));
m_bIsCtrl = false;
}
void CHideScreenSpyDlg::DoDataExchange(CDataExchange* pDX)
@@ -95,14 +96,14 @@ END_MESSAGE_MAP()
void CHideScreenSpyDlg::OnClose()
{
CancelIO();
// 等待数据处理完毕
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
// 恢复鼠标状态
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW));
CDialogBase::OnClose();
// 等待数据处理完毕
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
// 恢复鼠标状态
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW));
CDialogBase::OnClose();
}
void CHideScreenSpyDlg::OnReceiveComplete()
@@ -114,10 +115,10 @@ void CHideScreenSpyDlg::OnReceiveComplete()
DrawFirstScreen(m_ContextObject->GetBuffer(1), m_ContextObject->GetBufferLength()-1);
}
break;
case TOKEN_NEXTSCREEN: {
DrawNextScreenDiff(m_ContextObject->GetBuffer(0), m_ContextObject->GetBufferLength());
break;
}
case TOKEN_NEXTSCREEN: {
DrawNextScreenDiff(m_ContextObject->GetBuffer(0), m_ContextObject->GetBufferLength());
break;
}
case TOKEN_BITMAPINFO_HIDE:
ResetScreen();
break;
@@ -168,9 +169,9 @@ bool CHideScreenSpyDlg::SaveSnapshot()
BOOL CHideScreenSpyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString strString;
strString.Format("%s - 远程虚拟屏幕 %d×%d", m_IPAddress,
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
CString strString;
strString.Format("%s - 远程虚拟屏幕 %d×%d", m_IPAddress,
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
SetWindowText(strString);
// Set the icon for this dialog. The framework does this automatically
@@ -228,8 +229,8 @@ BOOL CHideScreenSpyDlg::OnInitDialog()
m_hRemoteCursor = LoadCursor(NULL, IDC_ARROW);
ICONINFO CursorInfo;
::GetIconInfo(m_hRemoteCursor, &CursorInfo);
pSysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)m_hRemoteCursor);
pSysMenu->CheckMenuItem(IDM_CONTROL, m_bIsCtrl ? MF_CHECKED : MF_UNCHECKED);
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, (LONG_PTR)m_hRemoteCursor);
if (CursorInfo.hbmMask != NULL)
::DeleteObject(CursorInfo.hbmMask);
if (CursorInfo.hbmColor != NULL)
@@ -292,7 +293,7 @@ void CHideScreenSpyDlg::DrawFirstScreen(PBYTE pDeCompressionData, unsigned long
if(dwFirstLength > 0)
JPG_BMP(m_BitmapInfor_Full->bmiHeader.biBitCount, lpFirstScreen, dwFirstLength, m_BitmapData_Full);
} else {
m_ContextObject->CopyBuffer(m_BitmapData_Full, m_BitmapInfor_Full->bmiHeader.biSizeImage, 1);
m_ContextObject->CopyBuffer(m_BitmapData_Full, m_BitmapInfor_Full->bmiHeader.biSizeImage, 1);
}
#if _DEBUG
DoPaint();
@@ -312,109 +313,106 @@ void CHideScreenSpyDlg::DrawNextScreenHome(PBYTE pDeCompressionData, unsigned lo
DWORD dwNextLength = destLen - nHeadLength;
DWORD dwNextOffset = 0;
// 屏幕数据是否变化
while (dwNextOffset < dwNextLength) {
int* pinlen = (int*)((LPBYTE)lpNextScreen + dwNextOffset);
// 屏幕数据是否变化
while (dwNextOffset < dwNextLength) {
int* pinlen = (int*)((LPBYTE)lpNextScreen + dwNextOffset);
if (JPG_BMP(m_BitmapInfor_Full->bmiHeader.biBitCount, pinlen + 1, *pinlen, m_lpvRectBits)) {
bIsReDraw = true;
LPRECT lpChangedRect = (LPRECT)((LPBYTE)(pinlen + 1) + *pinlen);
int nChangedRectWidth = lpChangedRect->right - lpChangedRect->left;
int nChangedRectHeight = lpChangedRect->bottom - lpChangedRect->top;
if (JPG_BMP(m_BitmapInfor_Full->bmiHeader.biBitCount, pinlen + 1, *pinlen, m_lpvRectBits)) {
bIsReDraw = true;
LPRECT lpChangedRect = (LPRECT)((LPBYTE)(pinlen + 1) + *pinlen);
int nChangedRectWidth = lpChangedRect->right - lpChangedRect->left;
int nChangedRectHeight = lpChangedRect->bottom - lpChangedRect->top;
m_lpbmi_rect->bmiHeader.biWidth = nChangedRectWidth;
m_lpbmi_rect->bmiHeader.biHeight = nChangedRectHeight;
m_lpbmi_rect->bmiHeader.biSizeImage = (((nChangedRectWidth * m_lpbmi_rect->bmiHeader.biBitCount + 31) & ~31) >> 3)
* nChangedRectHeight;
m_lpbmi_rect->bmiHeader.biWidth = nChangedRectWidth;
m_lpbmi_rect->bmiHeader.biHeight = nChangedRectHeight;
m_lpbmi_rect->bmiHeader.biSizeImage = (((nChangedRectWidth * m_lpbmi_rect->bmiHeader.biBitCount + 31) & ~31) >> 3)
* nChangedRectHeight;
StretchDIBits(m_hFullMemDC, lpChangedRect->left, lpChangedRect->top, nChangedRectWidth, nChangedRectHeight,
0, 0, nChangedRectWidth, nChangedRectHeight, m_lpvRectBits, m_lpbmi_rect, DIB_RGB_COLORS, SRCCOPY);
StretchDIBits(m_hFullMemDC, lpChangedRect->left, lpChangedRect->top, nChangedRectWidth, nChangedRectHeight,
0, 0, nChangedRectWidth, nChangedRectHeight, m_lpvRectBits, m_lpbmi_rect, DIB_RGB_COLORS, SRCCOPY);
dwNextOffset += sizeof(int) + *pinlen + sizeof(RECT);
}
}
dwNextOffset += sizeof(int) + *pinlen + sizeof(RECT);
}
}
if (bIsReDraw) {
DoPaint();
}
}
BOOL CHideScreenSpyDlg::ParseFrame(void) {
//该函数不是直接画到屏幕上,而是更新一下变化部分的屏幕数据然后调用
//OnPaint画上去
//根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标,防止鼠标闪烁
BOOL bChange = FALSE;
const ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE); // 标识 + 算法 + 光标位置 + 光标类型索引
ULONG NextScreenLength = m_ContextObject->GetBufferLength() - ulHeadLength;
BOOL CHideScreenSpyDlg::ParseFrame(void)
{
//该函数不是直接画到屏幕上,而是更新一下变化部分的屏幕数据然后调用
//OnPaint画上去
//根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标,防止鼠标闪烁
BOOL bChange = FALSE;
const ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE); // 标识 + 算法 + 光标位置 + 光标类型索引
ULONG NextScreenLength = m_ContextObject->GetBufferLength() - ulHeadLength;
POINT OldClientCursorPos;
memcpy(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT));
memcpy(&m_ClientCursorPos, m_ContextObject->GetBuffer(2), sizeof(POINT));
POINT OldClientCursorPos;
memcpy(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT));
memcpy(&m_ClientCursorPos, m_ContextObject->GetBuffer(2), sizeof(POINT));
// 鼠标移动了
if (memcmp(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT)) != 0) {
bChange = TRUE;
}
// 鼠标移动了
if (memcmp(&OldClientCursorPos, &m_ClientCursorPos, sizeof(POINT)) != 0) {
bChange = TRUE;
}
// 光标类型发生变化
BYTE bOldCursorIndex = m_bCursorIndex;
m_bCursorIndex = m_ContextObject->GetBYTE(2 + sizeof(POINT));
if (bOldCursorIndex != m_bCursorIndex) {
bChange = TRUE;
if (m_bIsCtrl)//替换指定窗口所属类的WNDCLASSEX结构
// 光标类型发生变化
BYTE bOldCursorIndex = m_bCursorIndex;
m_bCursorIndex = m_ContextObject->GetBYTE(2 + sizeof(POINT));
if (bOldCursorIndex != m_bCursorIndex) {
bChange = TRUE;
if (m_bIsCtrl)//替换指定窗口所属类的WNDCLASSEX结构
#ifdef _WIN64
SetClassLongPtrA(m_hWnd, GCLP_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
SetClassLongPtrA(m_hWnd, GCLP_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
#else
SetClassLongA(m_hWnd, GCL_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
SetClassLongA(m_hWnd, GCL_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
#endif
}
}
// 屏幕是否变化
if (NextScreenLength > 0) {
bChange = TRUE;
}
return bChange;
// 屏幕是否变化
if (NextScreenLength > 0) {
bChange = TRUE;
}
return bChange;
}
void CHideScreenSpyDlg::DrawNextScreenDiff(PBYTE pDeCompressionData, unsigned long destLen)
{
if (!destLen) return;
// 根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标, 防止鼠标闪烁
BYTE algorithm = pDeCompressionData[1];
if (!destLen) return;
// 根据鼠标是否移动和屏幕是否变化判断是否重绘鼠标, 防止鼠标闪烁
BYTE algorithm = pDeCompressionData[1];
if (algorithm == ALGORITHM_HOME) {
return DrawNextScreenHome(pDeCompressionData + 1, destLen - 1);
}
bool bIsReDraw = ParseFrame();
bool keyFrame = false;
const ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE);
LPVOID FirstScreenData = m_BitmapData_Full;
LPVOID NextScreenData = m_ContextObject->GetBuffer(ulHeadLength);
ULONG NextScreenLength = NextScreenData ? m_ContextObject->GetBufferLength() - ulHeadLength : 0;
bool bIsReDraw = ParseFrame();
bool keyFrame = false;
const ULONG ulHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE);
LPVOID FirstScreenData = m_BitmapData_Full;
LPVOID NextScreenData = m_ContextObject->GetBuffer(ulHeadLength);
ULONG NextScreenLength = NextScreenData ? m_ContextObject->GetBufferLength() - ulHeadLength : 0;
LPBYTE dst = (LPBYTE)FirstScreenData, p = (LPBYTE)NextScreenData;
if (keyFrame)
{
if (m_BitmapInfor_Full->bmiHeader.biSizeImage == NextScreenLength)
memcpy(dst, p, m_BitmapInfor_Full->bmiHeader.biSizeImage);
}
else if (0 != NextScreenLength) {
LPBYTE dst = (LPBYTE)FirstScreenData, p = (LPBYTE)NextScreenData;
if (keyFrame) {
if (m_BitmapInfor_Full->bmiHeader.biSizeImage == NextScreenLength)
memcpy(dst, p, m_BitmapInfor_Full->bmiHeader.biSizeImage);
} else if (0 != NextScreenLength) {
bIsReDraw = true;
for (LPBYTE end = p + NextScreenLength; p < end; ) {
ULONG ulCount = *(LPDWORD(p + sizeof(ULONG)));
if (algorithm == ALGORITHM_GRAY) {
LPBYTE p1 = dst + *(LPDWORD)p, p2 = p + 2 * sizeof(ULONG);
for (int i = 0; i < ulCount; ++i, p1 += 4)
memset(p1, *p2++, sizeof(DWORD));
}
else {
memcpy(dst + *(LPDWORD)p, p + 2 * sizeof(ULONG), ulCount);
}
p += 2 * sizeof(ULONG) + ulCount;
}
}
for (LPBYTE end = p + NextScreenLength; p < end; ) {
ULONG ulCount = *(LPDWORD(p + sizeof(ULONG)));
if (algorithm == ALGORITHM_GRAY) {
LPBYTE p1 = dst + *(LPDWORD)p, p2 = p + 2 * sizeof(ULONG);
for (int i = 0; i < ulCount; ++i, p1 += 4)
memset(p1, *p2++, sizeof(DWORD));
} else {
memcpy(dst + *(LPDWORD)p, p + 2 * sizeof(ULONG), ulCount);
}
p += 2 * sizeof(ULONG) + ulCount;
}
}
if (bIsReDraw)
{
if (bIsReDraw) {
DoPaint();
}
}
@@ -724,12 +722,17 @@ BOOL CHideScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
switch (pMsg->message) {
case WM_ERASEBKGND:
return TRUE;
case WM_LBUTTONDOWN: case WM_LBUTTONUP: // 左键按下
case WM_RBUTTONDOWN: case WM_RBUTTONUP: // 键按下
case WM_MBUTTONDOWN: case WM_MBUTTONUP: // 中键按下
case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_MBUTTONDBLCLK: // 双击
case WM_MOUSEMOVE: case WM_MOUSEWHEEL: // 鼠标移动
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP: // 键按下
case WM_RBUTTONDOWN:
case WM_RBUTTONUP: // 右键按下
case WM_MBUTTONDOWN:
case WM_MBUTTONUP: // 中键按下
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
case WM_MBUTTONDBLCLK: // 双击
case WM_MOUSEMOVE:
case WM_MOUSEWHEEL: { // 鼠标移动
// 此逻辑会丢弃所有 非左键拖拽 的鼠标移动消息(如纯移动或右键拖拽)
if (pMsg->message == WM_MOUSEMOVE && GetKeyState(VK_LBUTTON) >= 0)
break;
@@ -738,13 +741,14 @@ BOOL CHideScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
}
case WM_CHAR: {
// 检查给定字符是否为控制字符
if (iswcntrl(static_cast<wint_t>(pMsg->wParam))) {
break;
}
if (iswcntrl(static_cast<wint_t>(pMsg->wParam))) {
break;
}
SendScaledMouseMessage(pMsg);
return TRUE;
}
case WM_KEYDOWN: case WM_KEYUP: {
case WM_KEYDOWN:
case WM_KEYUP: {
SendScaledMouseMessage(pMsg);
return TRUE;
}
@@ -756,30 +760,31 @@ BOOL CHideScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
return CDialog::PreTranslateMessage(pMsg);
}
void CHideScreenSpyDlg::SendScaledMouseMessage(MSG* pMsg, bool makeLP) {
if (!m_bIsCtrl)
return;
void CHideScreenSpyDlg::SendScaledMouseMessage(MSG* pMsg, bool makeLP)
{
if (!m_bIsCtrl)
return;
if (pMsg->message == WM_MOUSEMOVE) {
auto now = clock();
auto time_elapsed = now - m_lastMouseMove;
int dx = abs(pMsg->pt.x - m_lastMousePoint.x);
int dy = abs(pMsg->pt.y - m_lastMousePoint.y);
int dist_sq = dx * dx + dy * dy;
if (time_elapsed < 200 && dist_sq < 18 * 18) {
return;
}
m_lastMouseMove = now;
m_lastMousePoint = pMsg->pt;
}
if (pMsg->message == WM_MOUSEMOVE) {
auto now = clock();
auto time_elapsed = now - m_lastMouseMove;
int dx = abs(pMsg->pt.x - m_lastMousePoint.x);
int dy = abs(pMsg->pt.y - m_lastMousePoint.y);
int dist_sq = dx * dx + dy * dy;
if (time_elapsed < 200 && dist_sq < 18 * 18) {
return;
}
m_lastMouseMove = now;
m_lastMousePoint = pMsg->pt;
}
MYMSG msg(*pMsg);
LONG low = ((LONG)LOWORD(pMsg->lParam)) * m_wZoom;
LONG high = ((LONG)HIWORD(pMsg->lParam)) * m_hZoom;
if(makeLP) msg.lParam = MAKELPARAM(low, high);
msg.pt.x = low + m_rect.left;
msg.pt.y = high + m_rect.top;
SendCommand(msg);
msg.pt.x = low + m_rect.left;
msg.pt.y = high + m_rect.top;
SendCommand(msg);
}
void CHideScreenSpyDlg::SendCommand(const MYMSG& pMsg)

View File

@@ -24,7 +24,8 @@
#endif
class CHideScreenSpyDlg : public DialogBase {
class CHideScreenSpyDlg : public DialogBase
{
DECLARE_DYNAMIC(CHideScreenSpyDlg)
enum { IDD = IDD_SCREEN };
@@ -32,21 +33,22 @@ public:
CHideScreenSpyDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
virtual ~CHideScreenSpyDlg();
VOID SendNext(void) {
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, 1);
}
VOID SendNext(void)
{
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, 1);
}
void OnReceiveComplete();
BOOL ParseFrame(void);
void DrawFirstScreen(PBYTE pDeCompressionData, unsigned long destLen);
void DrawNextScreenDiff(PBYTE pDeCompressionData, unsigned long destLen);
BOOL ParseFrame(void);
void DrawFirstScreen(PBYTE pDeCompressionData, unsigned long destLen);
void DrawNextScreenDiff(PBYTE pDeCompressionData, unsigned long destLen);
void DrawNextScreenHome(PBYTE pDeCompressionData, unsigned long destLen);
void DrawTipString(CString str);
void DrawTipString(CString str);
void SendCommand(const MYMSG& pMsg);
void SendScaledMouseMessage(MSG* pMsg, bool makeLP = false);
void UpdateServerClipboard(char* buf, int len);
void SendServerClipboard(void);
void SendCommand(const MYMSG& pMsg);
void SendScaledMouseMessage(MSG* pMsg, bool makeLP = false);
void UpdateServerClipboard(char* buf, int len);
void SendServerClipboard(void);
bool SaveSnapshot(void);
virtual void DoDataExchange(CDataExchange* pDX);
@@ -56,7 +58,7 @@ public:
afx_msg void OnClose();
afx_msg void OnPaint();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnSize(UINT nType, int cx, int cy);
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
@@ -65,32 +67,32 @@ public:
DECLARE_MESSAGE_MAP()
protected:
void DoPaint();
void DoPaint();
bool JPG_BMP(int cbit, void* input, int inlen, void* output);
void ResetScreen();
HDC m_hFullDC, m_hFullMemDC;
HBITMAP m_BitmapHandle;
LPVOID m_BitmapData_Full;
LPBITMAPINFO m_BitmapInfor_Full;
HCURSOR m_hRemoteCursor;
CCursorInfo m_CursorInfo;
BOOL m_bIsFirst;
BOOL m_bIsCtrl;
HDC m_hFullDC, m_hFullMemDC;
HBITMAP m_BitmapHandle;
LPVOID m_BitmapData_Full;
LPBITMAPINFO m_BitmapInfor_Full;
HCURSOR m_hRemoteCursor;
CCursorInfo m_CursorInfo;
BOOL m_bIsFirst;
BOOL m_bIsCtrl;
POINT m_ClientCursorPos;
BYTE m_bCursorIndex;
CString m_strTip;
CString m_strTip;
clock_t m_lastMouseMove; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>
POINT m_lastMousePoint;// <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
clock_t m_lastMouseMove; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>
POINT m_lastMousePoint;// <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
private:
CString m_aviFile;
CBmpToAvi m_aviStream;
CRect m_CRect;
RECT m_rect;
double m_wZoom;
double m_hZoom;
LPVOID m_lpvRectBits;
LPBITMAPINFO m_lpbmi_rect;
CString m_aviFile;
CBmpToAvi m_aviStream;
CRect m_CRect;
RECT m_rect;
double m_wZoom;
double m_hZoom;
LPVOID m_lpvRectBits;
LPBITMAPINFO m_lpbmi_rect;
};

View File

@@ -2,225 +2,232 @@
#include "IOCPKCPServer.h"
#include "IOCPServer.h"
IUINT32 IOCPKCPServer::iclock() {
static LARGE_INTEGER freq = {};
static BOOL useQpc = QueryPerformanceFrequency(&freq);
if (useQpc) {
LARGE_INTEGER now;
QueryPerformanceCounter(&now);
return (IUINT32)(1000 * now.QuadPart / freq.QuadPart);
}
else {
return GetTickCount();
}
IUINT32 IOCPKCPServer::iclock()
{
static LARGE_INTEGER freq = {};
static BOOL useQpc = QueryPerformanceFrequency(&freq);
if (useQpc) {
LARGE_INTEGER now;
QueryPerformanceCounter(&now);
return (IUINT32)(1000 * now.QuadPart / freq.QuadPart);
} else {
return GetTickCount();
}
}
CONTEXT_KCP* IOCPKCPServer::FindOrCreateClient(const sockaddr_in& addr, SOCKET sClientSocket) {
char buf[64];
sprintf_s(buf, "%s:%d", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
std::string key = buf;
std::lock_guard<std::mutex> lock(m_contextsMutex);
CONTEXT_KCP* IOCPKCPServer::FindOrCreateClient(const sockaddr_in& addr, SOCKET sClientSocket)
{
char buf[64];
sprintf_s(buf, "%s:%d", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
std::string key = buf;
std::lock_guard<std::mutex> lock(m_contextsMutex);
auto it = m_clients.find(key);
if (it != m_clients.end()) {
return it->second;
}
auto it = m_clients.find(key);
if (it != m_clients.end()) {
return it->second;
}
// <20>½<EFBFBD> CONTEXT_KCP
CONTEXT_KCP* ctx = new CONTEXT_KCP();
ctx->InitMember(sClientSocket, this);
ctx->clientAddr = addr;
// <20>½<EFBFBD> CONTEXT_KCP
CONTEXT_KCP* ctx = new CONTEXT_KCP();
ctx->InitMember(sClientSocket, this);
ctx->clientAddr = addr;
// <20><>ʼ<EFBFBD><CABC> kcp
IUINT32 conv = KCP_SESSION_ID;
ctx->kcp = ikcp_create(conv, ctx);
// <20><>ʼ<EFBFBD><CABC> kcp
IUINT32 conv = KCP_SESSION_ID;
ctx->kcp = ikcp_create(conv, ctx);
ctx->kcp->output = [](const char* buf, int len, ikcpcb* kcp, void* user) -> int {
CONTEXT_KCP* c = (CONTEXT_KCP*)user;
WSABUF wsaBuf = { len, (CHAR*)buf };
DWORD sent = 0;
// <20><><EFBFBD><EFBFBD>ctx<74><EFBFBD><E6B4A2>IP<49>˿ڷ<CBBF><DAB7><EFBFBD>
// ע<>⣺Ҫ<E2A3BA><D2AA>֤ ctx <20><>Ӧ<EFBFBD>ͻ<EFBFBD><CDBB>˵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> sClientSocket <20><>ȷ
int ret = WSASendTo(c->sClientSocket, &wsaBuf, 1, &sent, 0,
(sockaddr*)&c->clientAddr, c->addrLen, NULL, NULL);
if (ret == SOCKET_ERROR) {
DWORD err = WSAGetLastError();
// <20><><EFBFBD>Դ<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
return -1;
}
return 0;
};
ctx->kcp->output = [](const char* buf, int len, ikcpcb* kcp, void* user) -> int {
CONTEXT_KCP* c = (CONTEXT_KCP*)user;
WSABUF wsaBuf = { len, (CHAR*)buf };
DWORD sent = 0;
// <20><><EFBFBD><EFBFBD>ctx<74><EFBFBD><E6B4A2>IP<49>˿ڷ<CBBF><DAB7><EFBFBD>
// ע<>⣺Ҫ<E2A3BA><D2AA>֤ ctx <20><>Ӧ<EFBFBD>ͻ<EFBFBD><CDBB>˵<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> sClientSocket <20><>ȷ
int ret = WSASendTo(c->sClientSocket, &wsaBuf, 1, &sent, 0,
(sockaddr*)&c->clientAddr, c->addrLen, NULL, NULL);
if (ret == SOCKET_ERROR)
{
DWORD err = WSAGetLastError();
// <20><><EFBFBD>Դ<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
return -1;
}
return 0;
};
ikcp_nodelay(ctx->kcp, 1, 10, 2, 1);
ikcp_wndsize(ctx->kcp, 128, 128);
ikcp_nodelay(ctx->kcp, 1, 10, 2, 1);
ikcp_wndsize(ctx->kcp, 128, 128);
m_clients[key] = ctx;
m_clients[key] = ctx;
return ctx;
return ctx;
}
UINT IOCPKCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) {
if (m_running) return 1;
UINT IOCPKCPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort)
{
if (m_running) return 1;
m_port = uPort;
m_notify = NotifyProc;
m_offline = OffProc;
m_port = uPort;
m_notify = NotifyProc;
m_offline = OffProc;
m_socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
if (m_socket == INVALID_SOCKET) return 2;
m_socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
if (m_socket == INVALID_SOCKET) return 2;
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(uPort);
addr.sin_addr.s_addr = INADDR_ANY;
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(uPort);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(m_socket, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) return 3;
if (bind(m_socket, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) return 3;
m_hIOCP = CreateIoCompletionPort((HANDLE)m_socket, NULL, 0, 0);
if (!m_hIOCP) return 4;
m_hIOCP = CreateIoCompletionPort((HANDLE)m_socket, NULL, 0, 0);
if (!m_hIOCP) return 4;
m_running = true;
m_running = true;
// <20><><EFBFBD><EFBFBD>IOCP<43><50><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_hThread = CreateThread(NULL, 0, [](LPVOID param) -> DWORD {
((IOCPKCPServer*)param)->WorkerThread();
return 0;
}, this, 0, NULL);
// <20><><EFBFBD><EFBFBD>IOCP<43><50><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_hThread = CreateThread(NULL, 0, [](LPVOID param) -> DWORD {
((IOCPKCPServer*)param)->WorkerThread();
return 0;
}, this, 0, NULL);
// <20><><EFBFBD><EFBFBD>KCP<43><50>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_kcpUpdateThread = std::thread(&IOCPKCPServer::KCPUpdateLoop, this);
// <20><><EFBFBD><EFBFBD>KCP<43><50>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_kcpUpdateThread = std::thread(&IOCPKCPServer::KCPUpdateLoop, this);
Mprintf("IOCPKCPServer StartServer: %p\n", this);
Mprintf("IOCPKCPServer StartServer: %p\n", this);
return 0;
return 0;
}
void IOCPKCPServer::WorkerThread() {
char buf[1500];
sockaddr_in clientAddr;
int addrLen = sizeof(clientAddr);
void IOCPKCPServer::WorkerThread()
{
char buf[1500];
sockaddr_in clientAddr;
int addrLen = sizeof(clientAddr);
while (m_running) {
int ret = recvfrom(m_socket, buf, sizeof(buf), 0, (sockaddr*)&clientAddr, &addrLen);
if (ret > 0) {
CONTEXT_KCP* ctx = FindOrCreateClient(clientAddr, m_socket);
if (ctx && ctx->kcp) {
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
ikcp_input(ctx->kcp, buf, ret);
}
while (m_running) {
int ret = recvfrom(m_socket, buf, sizeof(buf), 0, (sockaddr*)&clientAddr, &addrLen);
if (ret > 0) {
CONTEXT_KCP* ctx = FindOrCreateClient(clientAddr, m_socket);
if (ctx && ctx->kcp) {
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
ikcp_input(ctx->kcp, buf, ret);
}
char recvbuf[4096];
int n = 0;
do {
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
n = ikcp_recv(ctx->kcp, recvbuf, sizeof(recvbuf));
}
if (n > 0&& m_notify) {
memcpy(ctx->szBuffer, recvbuf, n);
BOOL ret = ParseReceivedData(ctx, n, m_notify);
}
}while (n>0);
}
}
else {
DWORD err = WSAGetLastError();
if (err != WSAEWOULDBLOCK && err != WSAEINTR) {
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
Mprintf("IOCPKCPServer WorkerThread DONE: %p\n", this);
char recvbuf[4096];
int n = 0;
do {
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
n = ikcp_recv(ctx->kcp, recvbuf, sizeof(recvbuf));
}
if (n > 0&& m_notify) {
memcpy(ctx->szBuffer, recvbuf, n);
BOOL ret = ParseReceivedData(ctx, n, m_notify);
}
} while (n>0);
}
} else {
DWORD err = WSAGetLastError();
if (err != WSAEWOULDBLOCK && err != WSAEINTR) {
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
Mprintf("IOCPKCPServer WorkerThread DONE: %p\n", this);
}
void IOCPKCPServer::KCPUpdateLoop() {
while (m_running) {
IUINT32 current = iclock();
void IOCPKCPServer::KCPUpdateLoop()
{
while (m_running) {
IUINT32 current = iclock();
std::lock_guard<std::mutex> lock(m_contextsMutex);
for (auto& kv : m_clients) {
CONTEXT_KCP* ctx = kv.second;
if (ctx && ctx->kcp) {
ikcp_update(ctx->kcp, current);
}
}
std::lock_guard<std::mutex> lock(m_contextsMutex);
for (auto& kv : m_clients) {
CONTEXT_KCP* ctx = kv.second;
if (ctx && ctx->kcp) {
ikcp_update(ctx->kcp, current);
}
}
Sleep(10);
}
Sleep(10);
}
}
void IOCPKCPServer::Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
if (!ContextObject || !ContextObject->kcp) return;
ContextObject->OutCompressedBuffer.ClearBuffer();
if (!WriteContextData(ContextObject, szBuffer, ulOriginalLength))
return;
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
void IOCPKCPServer::Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength)
{
if (!ContextObject || !ContextObject->kcp) return;
ContextObject->OutCompressedBuffer.ClearBuffer();
if (!WriteContextData(ContextObject, szBuffer, ulOriginalLength))
return;
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
ikcp_send(ContextObject->kcp,
(const char*)ContextObject->OutCompressedBuffer.GetBuffer(),
(int)ContextObject->OutCompressedBuffer.GetBufferLength());
ikcp_flush(ContextObject->kcp);
}
ikcp_send(ContextObject->kcp,
(const char*)ContextObject->OutCompressedBuffer.GetBuffer(),
(int)ContextObject->OutCompressedBuffer.GetBufferLength());
ikcp_flush(ContextObject->kcp);
}
}
void IOCPKCPServer::Destroy() {
Mprintf("IOCPKCPServer Destroy: %p\n", this);
void IOCPKCPServer::Destroy()
{
Mprintf("IOCPKCPServer Destroy: %p\n", this);
m_running = false;
m_running = false;
if (m_socket != INVALID_SOCKET) {
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
if (m_socket != INVALID_SOCKET) {
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
m_hThread = NULL;
}
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
m_hThread = NULL;
}
if (m_kcpUpdateThread.joinable())
m_kcpUpdateThread.join();
if (m_kcpUpdateThread.joinable())
m_kcpUpdateThread.join();
if (m_hIOCP) {
CloseHandle(m_hIOCP);
m_hIOCP = NULL;
}
if (m_hIOCP) {
CloseHandle(m_hIOCP);
m_hIOCP = NULL;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пͻ<D0BF><CDBB><EFBFBD>
std::lock_guard<std::mutex> lock(m_contextsMutex);
for (auto& kv : m_clients) {
if (kv.second) {
if (kv.second->kcp) {
ikcp_release(kv.second->kcp);
kv.second->kcp = nullptr;
}
delete kv.second;
}
}
m_clients.clear();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пͻ<D0BF><CDBB><EFBFBD>
std::lock_guard<std::mutex> lock(m_contextsMutex);
for (auto& kv : m_clients) {
if (kv.second) {
if (kv.second->kcp) {
ikcp_release(kv.second->kcp);
kv.second->kcp = nullptr;
}
delete kv.second;
}
}
m_clients.clear();
}
void IOCPKCPServer::Disconnect(CONTEXT_OBJECT* ctx) {
if (!ctx) return;
void IOCPKCPServer::Disconnect(CONTEXT_OBJECT* ctx)
{
if (!ctx) return;
std::string key = ctx->PeerName;
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
auto it = m_clients.find(key);
if (it != m_clients.end()) {
if (it->second == ctx) {
if (m_offline) m_offline(ctx);
if (ctx->kcp) {
ikcp_release(ctx->kcp);
ctx->kcp = nullptr;
}
delete ctx;
m_clients.erase(it);
}
}
}
std::string key = ctx->PeerName;
{
std::lock_guard<std::mutex> lock(m_contextsMutex);
auto it = m_clients.find(key);
if (it != m_clients.end()) {
if (it->second == ctx) {
if (m_offline) m_offline(ctx);
if (ctx->kcp) {
ikcp_release(ctx->kcp);
ctx->kcp = nullptr;
}
delete ctx;
m_clients.erase(it);
}
}
}
}

View File

@@ -2,66 +2,78 @@
#include "Server.h"
class CONTEXT_KCP : public CONTEXT_OBJECT {
class CONTEXT_KCP : public CONTEXT_OBJECT
{
public:
int addrLen = 0;
sockaddr_in clientAddr = {};
CONTEXT_KCP() {
}
virtual ~CONTEXT_KCP() {
}
std::string GetProtocol() const override {
return "KCP";
}
VOID InitMember(SOCKET s, Server* svr) override {
CONTEXT_OBJECT::InitMember(s, svr);
clientAddr = {};
addrLen = sizeof(sockaddr_in);
}
void Destroy() override {
}
virtual std::string GetPeerName() const override {
char client_ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &clientAddr.sin_addr, client_ip, INET_ADDRSTRLEN);
return client_ip;
}
virtual int GetPort() const override {
int client_port = ntohs(clientAddr.sin_port);
return client_port;
}
int addrLen = 0;
sockaddr_in clientAddr = {};
CONTEXT_KCP()
{
}
virtual ~CONTEXT_KCP()
{
}
std::string GetProtocol() const override
{
return "KCP";
}
VOID InitMember(SOCKET s, Server* svr) override
{
CONTEXT_OBJECT::InitMember(s, svr);
clientAddr = {};
addrLen = sizeof(sockaddr_in);
}
void Destroy() override
{
}
virtual std::string GetPeerName() const override
{
char client_ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &clientAddr.sin_addr, client_ip, INET_ADDRSTRLEN);
return client_ip;
}
virtual int GetPort() const override
{
int client_port = ntohs(clientAddr.sin_port);
return client_port;
}
};
class IOCPKCPServer : public Server {
class IOCPKCPServer : public Server
{
public:
IOCPKCPServer(){}
virtual ~IOCPKCPServer(){}
IOCPKCPServer() {}
virtual ~IOCPKCPServer() {}
virtual int GetPort() const override { return m_port; }
virtual UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) override;
virtual void Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) override;
virtual void Destroy() override;
virtual void Disconnect(CONTEXT_OBJECT* ctx) override;
virtual int GetPort() const override
{
return m_port;
}
virtual UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) override;
virtual void Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) override;
virtual void Destroy() override;
virtual void Disconnect(CONTEXT_OBJECT* ctx) override;
private:
SOCKET m_socket = INVALID_SOCKET;
HANDLE m_hIOCP = NULL;
HANDLE m_hThread = NULL;
bool m_running = false;
USHORT m_port = 0;
SOCKET m_socket = INVALID_SOCKET;
HANDLE m_hIOCP = NULL;
HANDLE m_hThread = NULL;
bool m_running = false;
USHORT m_port = 0;
pfnNotifyProc m_notify = nullptr;
pfnOfflineProc m_offline = nullptr;
pfnNotifyProc m_notify = nullptr;
pfnOfflineProc m_offline = nullptr;
std::mutex m_contextsMutex;
std::unordered_map<std::string, CONTEXT_KCP*> m_clients; // key: "IP:port"
std::mutex m_contextsMutex;
std::unordered_map<std::string, CONTEXT_KCP*> m_clients; // key: "IP:port"
std::thread m_kcpUpdateThread;
std::thread m_kcpUpdateThread;
CONTEXT_KCP* FindOrCreateClient(const sockaddr_in& addr, SOCKET sClientSocket);
CONTEXT_KCP* FindOrCreateClient(const sockaddr_in& addr, SOCKET sClientSocket);
void WorkerThread();
void WorkerThread();
void KCPUpdateLoop();
void KCPUpdateLoop();
static IUINT32 iclock();
static IUINT32 iclock();
};

File diff suppressed because it is too large Load Diff

View File

@@ -33,69 +33,72 @@
class IOCPServer : public Server
{
protected:
int m_nPort;
SOCKET m_sListenSocket;
HANDLE m_hCompletionPort;
UINT m_ulMaxConnections;
HANDLE m_hListenEvent;
HANDLE m_hListenThread;
BOOL m_bTimeToKill;
HANDLE m_hKillEvent;
ULONG m_ulThreadPoolMin;
ULONG m_ulThreadPoolMax;
ULONG m_ulCPULowThreadsHold;
ULONG m_ulCPUHighThreadsHold;
ULONG m_ulCurrentThread;
ULONG m_ulBusyThread;
int m_nPort;
SOCKET m_sListenSocket;
HANDLE m_hCompletionPort;
UINT m_ulMaxConnections;
HANDLE m_hListenEvent;
HANDLE m_hListenThread;
BOOL m_bTimeToKill;
HANDLE m_hKillEvent;
ULONG m_ulThreadPoolMin;
ULONG m_ulThreadPoolMax;
ULONG m_ulCPULowThreadsHold;
ULONG m_ulCPUHighThreadsHold;
ULONG m_ulCurrentThread;
ULONG m_ulBusyThread;
ULONG m_ulKeepLiveTime;
pfnNotifyProc m_NotifyProc;
pfnOfflineProc m_OfflineProc;
ULONG m_ulWorkThreadCount;
CRITICAL_SECTION m_cs;
ContextObjectList m_ContextConnectionList;
ContextObjectList m_ContextFreePoolList;
ULONG m_ulKeepLiveTime;
pfnNotifyProc m_NotifyProc;
pfnOfflineProc m_OfflineProc;
ULONG m_ulWorkThreadCount;
CRITICAL_SECTION m_cs;
ContextObjectList m_ContextConnectionList;
ContextObjectList m_ContextFreePoolList;
private:
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
BOOL InitializeIOCP(VOID);
VOID OnAccept();
PCONTEXT_OBJECT AllocateContext(SOCKET s);
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
VOID PostRecv(CONTEXT_OBJECT* ContextObject);
BOOL HandleIO(IOType PacketFlags, PCONTEXT_OBJECT ContextObject, DWORD dwTrans, ZSTD_DCtx* ctx);
BOOL OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans, ZSTD_DCtx* ctx);
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, size_t ulOriginalLength);
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject, ULONG ulCompressedLength);
int AddWorkThread(int n) {
EnterCriticalSection(&m_cs);
m_ulWorkThreadCount += n;
int ret = m_ulWorkThreadCount;
LeaveCriticalSection(&m_cs);
return ret;
}
BOOL InitializeIOCP(VOID);
VOID OnAccept();
PCONTEXT_OBJECT AllocateContext(SOCKET s);
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
VOID PostRecv(CONTEXT_OBJECT* ContextObject);
BOOL HandleIO(IOType PacketFlags, PCONTEXT_OBJECT ContextObject, DWORD dwTrans, ZSTD_DCtx* ctx);
BOOL OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans, ZSTD_DCtx* ctx);
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, size_t ulOriginalLength);
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject, ULONG ulCompressedLength);
int AddWorkThread(int n)
{
EnterCriticalSection(&m_cs);
m_ulWorkThreadCount += n;
int ret = m_ulWorkThreadCount;
LeaveCriticalSection(&m_cs);
return ret;
}
public:
IOCPServer(void);
~IOCPServer(void);
int GetPort() const override {
return m_nPort;
}
IOCPServer(void);
~IOCPServer(void);
int GetPort() const override
{
return m_nPort;
}
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength)
{
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
void UpdateMaxConnection(int maxConn);
void UpdateMaxConnection(int maxConn);
void Destroy();
void Disconnect(CONTEXT_OBJECT *ctx){}
void Destroy();
void Disconnect(CONTEXT_OBJECT *ctx) {}
};
typedef IOCPServer ISocketBase;
@@ -108,55 +111,61 @@ typedef CONTEXT_OBJECT ClientContext;
#define m_DeCompressionBuffer InDeCompressedBuffer
// <20><><EFBFBD>ж<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ĶԻ<C4B6><D4BB><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
class CDialogBase : public CDialog {
class CDialogBase : public CDialog
{
public:
CONTEXT_OBJECT* m_ContextObject;
Server* m_iocpServer;
CString m_IPAddress;
bool m_bIsClosed;
bool m_bIsProcessing;
HICON m_hIcon;
CDialogBase(UINT nIDTemplate, CWnd* pParent, Server* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) :
m_bIsClosed(false), m_bIsProcessing(false),
m_ContextObject(pContext),
m_iocpServer(pIOCPServer),
CDialog(nIDTemplate, pParent) {
CONTEXT_OBJECT* m_ContextObject;
Server* m_iocpServer;
CString m_IPAddress;
bool m_bIsClosed;
bool m_bIsProcessing;
HICON m_hIcon;
CDialogBase(UINT nIDTemplate, CWnd* pParent, Server* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) :
m_bIsClosed(false), m_bIsProcessing(false),
m_ContextObject(pContext),
m_iocpServer(pIOCPServer),
CDialog(nIDTemplate, pParent)
{
m_IPAddress = pContext->GetPeerName().c_str();
m_hIcon = nIcon > 0 ? LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIcon)) : NULL;
}
virtual ~CDialogBase(){}
m_IPAddress = pContext->GetPeerName().c_str();
m_hIcon = nIcon > 0 ? LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIcon)) : NULL;
}
virtual ~CDialogBase() {}
public:
virtual void OnReceiveComplete(void) = 0;
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void MarkReceiving(bool recv = true) {
m_bIsProcessing = recv;
}
bool IsProcessing() const {
return m_bIsProcessing;
}
void OnClose() {
m_bIsClosed = true;
while (m_bIsProcessing)
Sleep(200);
if(m_hIcon) DestroyIcon(m_hIcon);
m_hIcon = NULL;
CDialog::OnClose();
virtual void OnReceiveComplete(void) = 0;
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void MarkReceiving(bool recv = true)
{
m_bIsProcessing = recv;
}
bool IsProcessing() const
{
return m_bIsProcessing;
}
void OnClose()
{
m_bIsClosed = true;
while (m_bIsProcessing)
Sleep(200);
if(m_hIcon) DestroyIcon(m_hIcon);
m_hIcon = NULL;
CDialog::OnClose();
if (GetSafeHwnd())
DestroyWindow();
}
virtual void PostNcDestroy() override
{
delete this;
}
// ȡ<><C8A1> SOCKET <20><>ȡ<EFBFBD><C8A1><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>
void CancelIO(){
m_bIsClosed = TRUE;
if (GetSafeHwnd())
DestroyWindow();
}
virtual void PostNcDestroy() override
{
delete this;
}
// ȡ<><C8A1> SOCKET <20><>ȡ<EFBFBD><C8A1><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>
void CancelIO()
{
m_bIsClosed = TRUE;
m_ContextObject->CancelIO();
}
m_ContextObject->CancelIO();
}
};
typedef CDialogBase DialogBase;

View File

@@ -4,170 +4,177 @@
#include <iostream>
#include "IOCPServer.h"
IOCPUDPServer::IOCPUDPServer() {
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
IOCPUDPServer::IOCPUDPServer()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
}
IOCPUDPServer::~IOCPUDPServer() {
WSACleanup();
IOCPUDPServer::~IOCPUDPServer()
{
WSACleanup();
}
UINT IOCPUDPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) {
if (m_running) return 1;
m_port = uPort;
m_notify = NotifyProc;
m_offline = OffProc;
UINT IOCPUDPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort)
{
if (m_running) return 1;
m_port = uPort;
m_notify = NotifyProc;
m_offline = OffProc;
m_socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
if (m_socket == INVALID_SOCKET) return 2;
m_socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
if (m_socket == INVALID_SOCKET) return 2;
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(uPort);
addr.sin_addr.s_addr = INADDR_ANY;
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(uPort);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(m_socket, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) return 3;
if (bind(m_socket, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) return 3;
m_hIOCP = CreateIoCompletionPort((HANDLE)m_socket, NULL, 0, 0);
if (!m_hIOCP) return 4;
m_hIOCP = CreateIoCompletionPort((HANDLE)m_socket, NULL, 0, 0);
if (!m_hIOCP) return 4;
m_running = true;
m_running = true;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)+[](LPVOID param) -> DWORD {
((IOCPUDPServer*)param)->WorkerThread();
return 0;
}, this, 0, NULL);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)+[](LPVOID param) -> DWORD {
((IOCPUDPServer*)param)->WorkerThread();
return 0;
}, this, 0, NULL);
// <20><EFBFBD><E1BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
for (int i = 0; i < 4; ++i)
PostRecv();
// <20><EFBFBD><E1BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
for (int i = 0; i < 4; ++i)
PostRecv();
return 0; // <20>ɹ<EFBFBD>
return 0; // <20>ɹ<EFBFBD>
}
void IOCPUDPServer::PostRecv() {
if (!m_running) return;
void IOCPUDPServer::PostRecv()
{
if (!m_running) return;
IO_CONTEXT* ioCtx = AddCount();
if (ioCtx == nullptr) {
Mprintf("IOCPUDPServer max connection number reached.\n");
return;
}
IO_CONTEXT* ioCtx = AddCount();
if (ioCtx == nullptr) {
Mprintf("IOCPUDPServer max connection number reached.\n");
return;
}
CONTEXT_UDP* ctx = ioCtx->pContext;
ctx->wsaInBuf.buf = ctx->szBuffer;
ctx->wsaInBuf.len = sizeof(ctx->szBuffer);
CONTEXT_UDP* ctx = ioCtx->pContext;
ctx->wsaInBuf.buf = ctx->szBuffer;
ctx->wsaInBuf.len = sizeof(ctx->szBuffer);
DWORD flags = 0;
int err = WSARecvFrom(
m_socket,
&ctx->wsaInBuf,
1,
NULL,
&flags,
(sockaddr*)&ctx->clientAddr,
&ctx->addrLen,
&ioCtx->ol,
NULL
);
DWORD flags = 0;
int err = WSARecvFrom(
m_socket,
&ctx->wsaInBuf,
1,
NULL,
&flags,
(sockaddr*)&ctx->clientAddr,
&ctx->addrLen,
&ioCtx->ol,
NULL
);
if (err == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] PostRecv error: %d\n", err);
delete ioCtx;
DelCount();
}
if (err == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] PostRecv error: %d\n", err);
delete ioCtx;
DelCount();
}
}
void IOCPUDPServer::WorkerThread() {
while (m_running) {
DWORD bytes = 0;
ULONG_PTR key = 0;
LPOVERLAPPED pOverlapped = nullptr;
void IOCPUDPServer::WorkerThread()
{
while (m_running) {
DWORD bytes = 0;
ULONG_PTR key = 0;
LPOVERLAPPED pOverlapped = nullptr;
BOOL ok = GetQueuedCompletionStatus(m_hIOCP, &bytes, &key, &pOverlapped, INFINITE);
if (!ok) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] PostRecv error: %d\n", err);
if (pOverlapped) {
IO_CONTEXT* ioCtx = CONTAINING_RECORD(pOverlapped, IO_CONTEXT, ol);
delete ioCtx;
DelCount();
}
continue;
}
if (!pOverlapped) continue;
BOOL ok = GetQueuedCompletionStatus(m_hIOCP, &bytes, &key, &pOverlapped, INFINITE);
if (!ok) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] PostRecv error: %d\n", err);
if (pOverlapped) {
IO_CONTEXT* ioCtx = CONTAINING_RECORD(pOverlapped, IO_CONTEXT, ol);
delete ioCtx;
DelCount();
}
continue;
}
if (!pOverlapped) continue;
IO_CONTEXT* ioCtx = CONTAINING_RECORD(pOverlapped, IO_CONTEXT, ol);
CONTEXT_UDP* ctx = ioCtx->pContext;
BOOL ret = ParseReceivedData(ctx, bytes, m_notify);
if (999 != ret)
ctx->Destroy();
IO_CONTEXT* ioCtx = CONTAINING_RECORD(pOverlapped, IO_CONTEXT, ol);
CONTEXT_UDP* ctx = ioCtx->pContext;
BOOL ret = ParseReceivedData(ctx, bytes, m_notify);
if (999 != ret)
ctx->Destroy();
// <20>ͷ<EFBFBD>
ioCtx->pContext = NULL;
delete ioCtx;
DelCount();
// <20>ͷ<EFBFBD>
ioCtx->pContext = NULL;
delete ioCtx;
DelCount();
PostRecv(); // <20><><EFBFBD><EFBFBD><EFBFBD>
}
CloseHandle(m_hThread);
m_hThread = NULL;
PostRecv(); // <20><><EFBFBD><EFBFBD><EFBFBD>
}
CloseHandle(m_hThread);
m_hThread = NULL;
}
VOID IOCPUDPServer::Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
ContextObject->OutCompressedBuffer.ClearBuffer();
if (!WriteContextData(ContextObject, szBuffer, ulOriginalLength))
return;
WSABUF buf = {
ContextObject->OutCompressedBuffer.GetBufferLength(),
(CHAR*)ContextObject->OutCompressedBuffer.GetBuffer(),
};
if (buf.len > 1200) {
Mprintf("UDP large packet may lost: %d bytes\n", buf.len);
}
DWORD sent = 0;
CONTEXT_UDP* ctx = (CONTEXT_UDP*)ContextObject;
int err = WSASendTo(
ContextObject->sClientSocket,
&buf,
1,
&sent,
0,
(sockaddr*)&ctx->clientAddr,
sizeof(sockaddr_in),
NULL,
NULL
);
if (err == SOCKET_ERROR) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] Send2Client error: %d\n", err);
}
VOID IOCPUDPServer::Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength)
{
ContextObject->OutCompressedBuffer.ClearBuffer();
if (!WriteContextData(ContextObject, szBuffer, ulOriginalLength))
return;
WSABUF buf = {
ContextObject->OutCompressedBuffer.GetBufferLength(),
(CHAR*)ContextObject->OutCompressedBuffer.GetBuffer(),
};
if (buf.len > 1200) {
Mprintf("UDP large packet may lost: %d bytes\n", buf.len);
}
DWORD sent = 0;
CONTEXT_UDP* ctx = (CONTEXT_UDP*)ContextObject;
int err = WSASendTo(
ContextObject->sClientSocket,
&buf,
1,
&sent,
0,
(sockaddr*)&ctx->clientAddr,
sizeof(sockaddr_in),
NULL,
NULL
);
if (err == SOCKET_ERROR) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] Send2Client error: %d\n", err);
}
}
VOID IOCPUDPServer::Destroy() {
if (m_socket != INVALID_SOCKET) {
CancelIoEx((HANDLE)m_socket, NULL); // ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD>
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
VOID IOCPUDPServer::Destroy()
{
if (m_socket != INVALID_SOCKET) {
CancelIoEx((HANDLE)m_socket, NULL); // ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD>
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
while (GetCount())
Sleep(200);
while (GetCount())
Sleep(200);
m_running = false;
PostQueuedCompletionStatus(m_hIOCP, 0, 0, NULL); // <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD>
m_running = false;
PostQueuedCompletionStatus(m_hIOCP, 0, 0, NULL); // <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD>
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
while (m_hThread)
Sleep(200);
}
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
while (m_hThread)
Sleep(200);
}
if (m_hIOCP) {
CloseHandle(m_hIOCP);
m_hIOCP = NULL;
}
if (m_hIOCP) {
CloseHandle(m_hIOCP);
m_hIOCP = NULL;
}
}

View File

@@ -5,68 +5,76 @@
#include "Server.h"
class IOCPUDPServer : public Server {
struct IO_CONTEXT {
OVERLAPPED ol = {};
CONTEXT_UDP* pContext = nullptr;
IO_CONTEXT() : ol({}), pContext(new CONTEXT_UDP) {
}
~IO_CONTEXT() {
SAFE_DELETE(pContext);
}
};
class IOCPUDPServer : public Server
{
struct IO_CONTEXT {
OVERLAPPED ol = {};
CONTEXT_UDP* pContext = nullptr;
IO_CONTEXT() : ol({}), pContext(new CONTEXT_UDP)
{
}
~IO_CONTEXT()
{
SAFE_DELETE(pContext);
}
};
public:
IOCPUDPServer();
~IOCPUDPServer();
IOCPUDPServer();
~IOCPUDPServer();
int GetPort() const override {
return m_port;
}
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) override;
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) override;
VOID Destroy() override;
virtual void UpdateMaxConnection(int maxConn) override {
m_locker.lock();
m_maxConn = maxConn;
m_locker.unlock();
}
int GetPort() const override
{
return m_port;
}
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) override;
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) override;
VOID Destroy() override;
virtual void UpdateMaxConnection(int maxConn) override
{
m_locker.lock();
m_maxConn = maxConn;
m_locker.unlock();
}
private:
void WorkerThread();
void PostRecv();
IO_CONTEXT* AddCount(){
m_locker.lock();
if (m_count > m_maxConn) {
m_locker.unlock();
return nullptr;
}
IO_CONTEXT* ioCtx = new IO_CONTEXT();
ioCtx->pContext->InitMember(m_socket, this);
m_count++;
m_locker.unlock();
return ioCtx;
}
void DelCount() {
m_locker.lock();
m_count--;
m_locker.unlock();
}
int GetCount() {
m_locker.lock();
int n = m_count;
m_locker.unlock();
return n;
}
void WorkerThread();
void PostRecv();
IO_CONTEXT* AddCount()
{
m_locker.lock();
if (m_count > m_maxConn) {
m_locker.unlock();
return nullptr;
}
IO_CONTEXT* ioCtx = new IO_CONTEXT();
ioCtx->pContext->InitMember(m_socket, this);
m_count++;
m_locker.unlock();
return ioCtx;
}
void DelCount()
{
m_locker.lock();
m_count--;
m_locker.unlock();
}
int GetCount()
{
m_locker.lock();
int n = m_count;
m_locker.unlock();
return n;
}
private:
int m_maxConn = 10000;
int m_port = 6543;
int m_count = 0;
CLocker m_locker;
SOCKET m_socket = INVALID_SOCKET;
HANDLE m_hIOCP = NULL;
HANDLE m_hThread = NULL;
bool m_running = false;
int m_maxConn = 10000;
int m_port = 6543;
int m_count = 0;
CLocker m_locker;
SOCKET m_socket = INVALID_SOCKET;
HANDLE m_hIOCP = NULL;
HANDLE m_hThread = NULL;
bool m_running = false;
pfnNotifyProc m_notify = nullptr;
pfnOfflineProc m_offline = nullptr;
pfnNotifyProc m_notify = nullptr;
pfnOfflineProc m_offline = nullptr;
};

View File

@@ -11,10 +11,10 @@
IMPLEMENT_DYNAMIC(CInputDialog, CDialogEx)
CInputDialog::CInputDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_INPUT, pParent)
, m_sSecondInput(_T(""))
: CDialogEx(IDD_DIALOG_INPUT, pParent)
, m_sSecondInput(_T(""))
{
m_hIcon = NULL;
m_hIcon = NULL;
}
CInputDialog::~CInputDialog()
@@ -23,55 +23,57 @@ CInputDialog::~CInputDialog()
void CInputDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_SECOND, m_Static2thInput);
DDX_Control(pDX, IDC_EDIT_SECOND, m_Edit2thInput);
DDX_Text(pDX, IDC_EDIT_SECOND, m_sSecondInput);
DDV_MaxChars(pDX, m_sSecondInput, 100);
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_SECOND, m_Static2thInput);
DDX_Control(pDX, IDC_EDIT_SECOND, m_Edit2thInput);
DDX_Text(pDX, IDC_EDIT_SECOND, m_sSecondInput);
DDV_MaxChars(pDX, m_sSecondInput, 100);
}
BEGIN_MESSAGE_MAP(CInputDialog, CDialogEx)
ON_BN_CLICKED(IDOK, &CInputDialog::OnBnClickedOk)
ON_BN_CLICKED(IDOK, &CInputDialog::OnBnClickedOk)
END_MESSAGE_MAP()
// CInputDialog 消息处理程序
BOOL CInputDialog::Init(LPCTSTR caption, LPCTSTR prompt) {
m_sCaption = caption;
m_sPrompt = prompt;
BOOL CInputDialog::Init(LPCTSTR caption, LPCTSTR prompt)
{
m_sCaption = caption;
m_sPrompt = prompt;
return TRUE;
return TRUE;
}
void CInputDialog::Init2(LPCTSTR name, LPCTSTR defaultValue) {
m_sItemName = name;
m_sSecondInput = defaultValue;
void CInputDialog::Init2(LPCTSTR name, LPCTSTR defaultValue)
{
m_sItemName = name;
m_sSecondInput = defaultValue;
}
BOOL CInputDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
CDialogEx::OnInitDialog();
SetIcon(m_hIcon, FALSE);
SetIcon(m_hIcon, FALSE);
SetWindowText(m_sCaption);
GetDlgItem(IDC_STATIC)->SetWindowText(m_sPrompt);
GetDlgItem(IDC_EDIT_FOLDERNAME)->SetWindowText(m_str);
m_Static2thInput.SetWindowTextA(m_sItemName);
m_Static2thInput.ShowWindow(m_sItemName.IsEmpty() ? SW_HIDE : SW_SHOW);
m_Edit2thInput.SetWindowTextA(m_sSecondInput);
m_Edit2thInput.ShowWindow(m_sItemName.IsEmpty() ? SW_HIDE : SW_SHOW);
SetWindowText(m_sCaption);
GetDlgItem(IDC_STATIC)->SetWindowText(m_sPrompt);
GetDlgItem(IDC_EDIT_FOLDERNAME)->SetWindowText(m_str);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
m_Static2thInput.SetWindowTextA(m_sItemName);
m_Static2thInput.ShowWindow(m_sItemName.IsEmpty() ? SW_HIDE : SW_SHOW);
m_Edit2thInput.SetWindowTextA(m_sSecondInput);
m_Edit2thInput.ShowWindow(m_sItemName.IsEmpty() ? SW_HIDE : SW_SHOW);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void CInputDialog::OnBnClickedOk()
{
GetDlgItem(IDC_EDIT_FOLDERNAME)->GetWindowText(m_str);
GetDlgItem(IDC_EDIT_FOLDERNAME)->GetWindowText(m_str);
CDialogEx::OnOK();
CDialogEx::OnOK();
}

View File

@@ -6,36 +6,36 @@
class CInputDialog : public CDialogEx
{
DECLARE_DYNAMIC(CInputDialog)
DECLARE_DYNAMIC(CInputDialog)
public:
CInputDialog(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CInputDialog();
CInputDialog(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CInputDialog();
BOOL Init(LPCTSTR caption, LPCTSTR prompt);
BOOL Init(LPCTSTR caption, LPCTSTR prompt);
void Init2(LPCTSTR name, LPCTSTR defaultValue);
void Init2(LPCTSTR name, LPCTSTR defaultValue);
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG_INPUT };
enum { IDD = IDD_DIALOG_INPUT };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
HICON m_hIcon;
CString m_sCaption;
CString m_sPrompt;
HICON m_hIcon;
CString m_sCaption;
CString m_sPrompt;
public:
CString m_str;
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
CStatic m_Static2thInput;
CEdit m_Edit2thInput;
CString m_sItemName;
CString m_sSecondInput;
CString m_str;
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
CStatic m_Static2thInput;
CEdit m_Edit2thInput;
CString m_sItemName;
CString m_sSecondInput;
};

View File

@@ -196,11 +196,11 @@ BOOL CKeyBoardDlg::PreTranslateMessage(MSG* pMsg)
void CKeyBoardDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DialogBase::OnClose();
}

File diff suppressed because one or more lines are too long

View File

@@ -7,18 +7,18 @@
#include "afxdialogex.h"
enum MYKEY{
MHKEY_CLASSES_ROOT,
MHKEY_CURRENT_USER,
MHKEY_LOCAL_MACHINE,
MHKEY_USERS,
MHKEY_CURRENT_CONFIG
enum MYKEY {
MHKEY_CLASSES_ROOT,
MHKEY_CURRENT_USER,
MHKEY_LOCAL_MACHINE,
MHKEY_USERS,
MHKEY_CURRENT_CONFIG
};
enum KEYVALUE{
MREG_SZ,
MREG_DWORD,
MREG_BINARY,
MREG_EXPAND_SZ
enum KEYVALUE {
MREG_SZ,
MREG_DWORD,
MREG_BINARY,
MREG_EXPAND_SZ
};
// CRegisterDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
@@ -27,28 +27,28 @@ IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog)
CRegisterDlg::CRegisterDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING)
: DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING)
{
m_bIsClosed = FALSE;
m_bIsWorking = FALSE;
m_bIsClosed = FALSE;
m_bIsWorking = FALSE;
}
CRegisterDlg::~CRegisterDlg()
{
Mprintf("~CRegisterDlg \n");
Mprintf("~CRegisterDlg \n");
}
void CRegisterDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE, m_Tree);
DDX_Control(pDX, IDC_LIST, m_ControlList);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE, m_Tree);
DDX_Control(pDX, IDC_LIST, m_ControlList);
}
BEGIN_MESSAGE_MAP(CRegisterDlg, CDialog)
ON_WM_CLOSE()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, &CRegisterDlg::OnTvnSelchangedTree)
ON_WM_CLOSE()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, &CRegisterDlg::OnTvnSelchangedTree)
END_MESSAGE_MAP()
@@ -57,261 +57,244 @@ END_MESSAGE_MAP()
BOOL CRegisterDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
CString str;
str.Format("%s - ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(str);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
CString str;
str.Format("%s - ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(str);
m_ImageListTree.Create(18, 18, ILC_COLOR16,10, 0); //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
m_ImageListTree.Create(18, 18, ILC_COLOR16,10, 0); //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
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);
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);
m_Tree.SetImageList(&m_ImageListTree,TVSIL_NORMAL);
m_hRoot = m_Tree.InsertItem("ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0,0,0,0); //0
HKCU = m_Tree.InsertItem("HKEY_CURRENT_USER",1,1,m_hRoot,0); //1
HKLM = m_Tree.InsertItem("HKEY_LOCAL_MACHINE",1,1,m_hRoot,0);
HKUS = m_Tree.InsertItem("HKEY_USERS",1,1,m_hRoot,0);
HKCC = m_Tree.InsertItem("HKEY_CURRENT_CONFIG",1,1,m_hRoot,0);
HKCR = m_Tree.InsertItem("HKEY_CLASSES_ROOT",1,1,m_hRoot,0);
m_hRoot = m_Tree.InsertItem("ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0,0,0,0); //0
HKCU = m_Tree.InsertItem("HKEY_CURRENT_USER",1,1,m_hRoot,0); //1
HKLM = m_Tree.InsertItem("HKEY_LOCAL_MACHINE",1,1,m_hRoot,0);
HKUS = m_Tree.InsertItem("HKEY_USERS",1,1,m_hRoot,0);
HKCC = m_Tree.InsertItem("HKEY_CURRENT_CONFIG",1,1,m_hRoot,0);
HKCR = m_Tree.InsertItem("HKEY_CLASSES_ROOT",1,1,m_hRoot,0);
m_Tree.Expand(m_hRoot,TVE_EXPAND);
m_Tree.Expand(m_hRoot,TVE_EXPAND);
m_ControlList.InsertColumn(0,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_LEFT,150,-1);
m_ControlList.InsertColumn(1,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_LEFT,60,-1);
m_ControlList.InsertColumn(2,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_LEFT,300,-1);
m_ControlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
//////<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>//////
m_ImageListControlList.Create(16,16,TRUE,2,2);
m_ImageListControlList.Add(THIS_APP->LoadIcon(IDI_ICON_STRING));
m_ImageListControlList.Add(THIS_APP->LoadIcon(IDI_ICON_DWORD));
m_ControlList.SetImageList(&m_ImageListControlList,LVSIL_SMALL);
m_ControlList.InsertColumn(0,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_LEFT,150,-1);
m_ControlList.InsertColumn(1,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_LEFT,60,-1);
m_ControlList.InsertColumn(2,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_LEFT,300,-1);
m_ControlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
//////<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>//////
m_ImageListControlList.Create(16,16,TRUE,2,2);
m_ImageListControlList.Add(THIS_APP->LoadIcon(IDI_ICON_STRING));
m_ImageListControlList.Add(THIS_APP->LoadIcon(IDI_ICON_DWORD));
m_ControlList.SetImageList(&m_ImageListControlList,LVSIL_SMALL);
m_isEnable = TRUE; //<2F><>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD>˽<EFBFBD><CBBD><EFBFBD>Ƶ<EFBFBD><C6B5> <20>򱻿ض<F2B1BBBF><D8B6><EFBFBD><EFBFBD><EFBFBD>
m_isEnable = TRUE; //<2F><>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD>˽<EFBFBD><CBBD><EFBFBD>Ƶ<EFBFBD><C6B5> <20>򱻿ض<F2B1BBBF><D8B6><EFBFBD><EFBFBD><EFBFBD>
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CRegisterDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DialogBase::OnClose();
DialogBase::OnClose();
}
void CRegisterDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
if(!m_isEnable)
{
return;
}
m_isEnable=FALSE;;
if(!m_isEnable) {
return;
}
m_isEnable=FALSE;;
TVITEM Item = pNMTreeView->itemNew;
TVITEM Item = pNMTreeView->itemNew;
if(Item.hItem == m_hRoot)
{
m_isEnable=TRUE;;
return;
}
if(Item.hItem == m_hRoot) {
m_isEnable=TRUE;;
return;
}
m_hSelectedItem=Item.hItem; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>򿪵<EFBFBD><F2BFAAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> //0 1 2 2 3
m_ControlList.DeleteAllItems();
m_hSelectedItem=Item.hItem; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>򿪵<EFBFBD><F2BFAAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> //0 1 2 2 3
m_ControlList.DeleteAllItems();
CString strFullPath=GetFullPath(m_hSelectedItem); //<2F><><EFBFBD>ü<EFBFBD>ֵ·<D6B5><C2B7>
CString strFullPath=GetFullPath(m_hSelectedItem); //<2F><><EFBFBD>ü<EFBFBD>ֵ·<D6B5><C2B7>
char bToken=GetFatherPath(strFullPath); //[2] \1\2\3
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
int nitem=m_ControlList.InsertItem(0,"<><C4AC>)",0);
m_ControlList.SetItemText(nitem,1,"REG_SZ");
m_ControlList.SetItemText(nitem,2,"(<28><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ֵ)");
char bToken=GetFatherPath(strFullPath); //[2] \1\2\3
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
int nitem=m_ControlList.InsertItem(0,"<><C4AC>)",0);
m_ControlList.SetItemText(nitem,1,"REG_SZ");
m_ControlList.SetItemText(nitem,2,"(<28><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ֵ)");
strFullPath.Insert(0,bToken);//<2F><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
bToken=COMMAND_REG_FIND;
strFullPath.Insert(0,bToken); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> [COMMAND_REG_FIND][x]
strFullPath.Insert(0,bToken);//<2F><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
bToken=COMMAND_REG_FIND;
strFullPath.Insert(0,bToken); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> [COMMAND_REG_FIND][x]
m_ContextObject->Send2Client((LPBYTE)(strFullPath.GetBuffer(0)), strFullPath.GetLength()+1);
m_ContextObject->Send2Client((LPBYTE)(strFullPath.GetBuffer(0)), strFullPath.GetLength()+1);
m_isEnable = TRUE;
m_isEnable = TRUE;
*pResult = 0;
*pResult = 0;
}
CString CRegisterDlg::GetFullPath(HTREEITEM hCurrent)
{
CString strTemp;
CString strReturn = "";
while(1)
{
if(hCurrent==m_hRoot)
{
return strReturn;
}
strTemp = m_Tree.GetItemText(hCurrent);
if(strTemp.Right(1) != "\\")
strTemp += "\\";
strReturn = strTemp + strReturn;
hCurrent = m_Tree.GetParentItem(hCurrent); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
}
return strReturn;
CString strTemp;
CString strReturn = "";
while(1) {
if(hCurrent==m_hRoot) {
return strReturn;
}
strTemp = m_Tree.GetItemText(hCurrent);
if(strTemp.Right(1) != "\\")
strTemp += "\\";
strReturn = strTemp + strReturn;
hCurrent = m_Tree.GetParentItem(hCurrent); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
}
return strReturn;
}
char CRegisterDlg::GetFatherPath(CString& strFullPath)
{
char bToken;
if(!strFullPath.Find("HKEY_CLASSES_ROOT")) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{
bToken=MHKEY_CLASSES_ROOT;
strFullPath.Delete(0,sizeof("HKEY_CLASSES_ROOT"));
}else if(!strFullPath.Find("HKEY_CURRENT_USER"))
{
bToken=MHKEY_CURRENT_USER;
strFullPath.Delete(0,sizeof("HKEY_CURRENT_USER"));
char bToken;
if(!strFullPath.Find("HKEY_CLASSES_ROOT")) { //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
bToken=MHKEY_CLASSES_ROOT;
strFullPath.Delete(0,sizeof("HKEY_CLASSES_ROOT"));
} else if(!strFullPath.Find("HKEY_CURRENT_USER")) {
bToken=MHKEY_CURRENT_USER;
strFullPath.Delete(0,sizeof("HKEY_CURRENT_USER"));
}else if(!strFullPath.Find("HKEY_LOCAL_MACHINE"))
{
bToken=MHKEY_LOCAL_MACHINE;
strFullPath.Delete(0,sizeof("HKEY_LOCAL_MACHINE"));
} else if(!strFullPath.Find("HKEY_LOCAL_MACHINE")) {
bToken=MHKEY_LOCAL_MACHINE;
strFullPath.Delete(0,sizeof("HKEY_LOCAL_MACHINE"));
}else if(!strFullPath.Find("HKEY_USERS"))
{
bToken=MHKEY_USERS;
strFullPath.Delete(0,sizeof("HKEY_USERS"));
} else if(!strFullPath.Find("HKEY_USERS")) {
bToken=MHKEY_USERS;
strFullPath.Delete(0,sizeof("HKEY_USERS"));
}else if(!strFullPath.Find("HKEY_CURRENT_CONFIG"))
{
bToken=MHKEY_CURRENT_CONFIG;
strFullPath.Delete(0,sizeof("HKEY_CURRENT_CONFIG"));
} else if(!strFullPath.Find("HKEY_CURRENT_CONFIG")) {
bToken=MHKEY_CURRENT_CONFIG;
strFullPath.Delete(0,sizeof("HKEY_CURRENT_CONFIG"));
}
return bToken;
}
return bToken;
}
void CRegisterDlg::OnReceiveComplete(void)
{
m_bIsWorking = TRUE;
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
{
case TOKEN_REG_PATH:
{
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
AddPath(tmp.c_str());
break;
}
case TOKEN_REG_KEY:
{
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
AddKey(tmp.c_str());
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
m_bIsWorking = FALSE;
m_bIsWorking = TRUE;
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0)) {
case TOKEN_REG_PATH: {
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
AddPath(tmp.c_str());
break;
}
case TOKEN_REG_KEY: {
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
AddKey(tmp.c_str());
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
m_bIsWorking = FALSE;
}
struct REGMSG{
int count; //<2F><><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
DWORD size; //<2F><><EFBFBD>ִ<EFBFBD>С
DWORD valsize; //ֵ<><D6B5>С
struct REGMSG {
int count; //<2F><><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
DWORD size; //<2F><><EFBFBD>ִ<EFBFBD>С
DWORD valsize; //ֵ<><D6B5>С
};
void CRegisterDlg::AddPath(char* szBuffer)
{
if(szBuffer==NULL) return;
int msgsize=sizeof(REGMSG);
REGMSG msg;
memcpy((void*)&msg,szBuffer,msgsize);
DWORD size =msg.size;
int count=msg.count;
if(size>0&&count>0){ //һ<><EFBFBD><E3B1A3><EFBFBD><EFBFBD>ʩ
for(int i=0;i<count;++i){
if (m_bIsClosed)
break;
char* szKeyName=szBuffer+size*i+msgsize;
m_Tree.InsertItem(szKeyName,1,1,m_hSelectedItem,0);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>
m_Tree.Expand(m_hSelectedItem,TVE_EXPAND);
}
}
if(szBuffer==NULL) return;
int msgsize=sizeof(REGMSG);
REGMSG msg;
memcpy((void*)&msg,szBuffer,msgsize);
DWORD size =msg.size;
int count=msg.count;
if(size>0&&count>0) { //һ<><EFBFBD><E3B1A3><EFBFBD><EFBFBD>ʩ
for(int i=0; i<count; ++i) {
if (m_bIsClosed)
break;
char* szKeyName=szBuffer+size*i+msgsize;
m_Tree.InsertItem(szKeyName,1,1,m_hSelectedItem,0);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>
m_Tree.Expand(m_hSelectedItem,TVE_EXPAND);
}
}
}
void CRegisterDlg::AddKey(char* szBuffer)
{
m_ControlList.DeleteAllItems();
int iItem=m_ControlList.InsertItem(0,"(Data)",0);
m_ControlList.SetItemText(iItem,1,"REG_SZ");
m_ControlList.SetItemText(iItem,2,"(NULL)");
m_ControlList.DeleteAllItems();
int iItem=m_ControlList.InsertItem(0,"(Data)",0);
m_ControlList.SetItemText(iItem,1,"REG_SZ");
m_ControlList.SetItemText(iItem,2,"(NULL)");
if(szBuffer==NULL) return;
REGMSG msg;
memcpy((void*)&msg,szBuffer,sizeof(msg));
char* szTemp=szBuffer+sizeof(msg);
for(int i=0;i<msg.count;++i)
{
if (m_bIsClosed)
break;
BYTE Type=szTemp[0]; //<2F><><EFBFBD><EFBFBD>
szTemp+=sizeof(BYTE);
char* szValueName=szTemp; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szTemp+=msg.size;
BYTE* szValueDate=(BYTE*)szTemp; //ȡ<><C8A1>ֵ
szTemp+=msg.valsize;
if(Type==MREG_SZ)
{
int iItem=m_ControlList.InsertItem(0,szValueName,0);
m_ControlList.SetItemText(iItem,1,"REG_SZ");
m_ControlList.SetItemText(iItem,2,(char*)szValueDate);
}
if(Type==MREG_DWORD)
{
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_DWORD <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
char ValueDate[256] = {0};
INT_PTR d=(INT_PTR)szValueDate;
memcpy((void*)&d,szValueDate,sizeof(INT_PTR));
CString strValue;
strValue.Format("0x%x",d);
sprintf(ValueDate," (%d)",d);
strValue+=" ";
strValue+=ValueDate;
int iItem=m_ControlList.InsertItem(0,szValueName,1);
m_ControlList.SetItemText(iItem,1,"REG_DWORD");
m_ControlList.SetItemText(iItem,2,strValue);
}
if(Type==MREG_BINARY)
{
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_BINARY <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
char ValueDate[256] = {0};
sprintf(ValueDate,"%s",szValueDate);
if(szBuffer==NULL) return;
REGMSG msg;
memcpy((void*)&msg,szBuffer,sizeof(msg));
char* szTemp=szBuffer+sizeof(msg);
for(int i=0; i<msg.count; ++i) {
if (m_bIsClosed)
break;
BYTE Type=szTemp[0]; //<2F><><EFBFBD><EFBFBD>
szTemp+=sizeof(BYTE);
char* szValueName=szTemp; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szTemp+=msg.size;
BYTE* szValueDate=(BYTE*)szTemp; //ȡ<><C8A1>ֵ
szTemp+=msg.valsize;
if(Type==MREG_SZ) {
int iItem=m_ControlList.InsertItem(0,szValueName,0);
m_ControlList.SetItemText(iItem,1,"REG_SZ");
m_ControlList.SetItemText(iItem,2,(char*)szValueDate);
}
if(Type==MREG_DWORD) {
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_DWORD <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
char ValueDate[256] = {0};
INT_PTR d=(INT_PTR)szValueDate;
memcpy((void*)&d,szValueDate,sizeof(INT_PTR));
CString strValue;
strValue.Format("0x%x",d);
sprintf(ValueDate," (%d)",d);
strValue+=" ";
strValue+=ValueDate;
int iItem=m_ControlList.InsertItem(0,szValueName,1);
m_ControlList.SetItemText(iItem,1,"REG_DWORD");
m_ControlList.SetItemText(iItem,2,strValue);
}
if(Type==MREG_BINARY) {
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> REG_BINARY <20><><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD>
char ValueDate[256] = {0};
sprintf(ValueDate,"%s",szValueDate);
int iItem=m_ControlList.InsertItem(0,szValueName,1);
m_ControlList.SetItemText(iItem,1,"REG_BINARY");
m_ControlList.SetItemText(iItem,2,ValueDate);
}
if(Type==MREG_EXPAND_SZ)
{
int iItem=m_ControlList.InsertItem(0,szValueName,0);
m_ControlList.SetItemText(iItem,1,"REG_EXPAND_SZ");
m_ControlList.SetItemText(iItem,2,(char*)szValueDate);
}
}
int iItem=m_ControlList.InsertItem(0,szValueName,1);
m_ControlList.SetItemText(iItem,1,"REG_BINARY");
m_ControlList.SetItemText(iItem,2,ValueDate);
}
if(Type==MREG_EXPAND_SZ) {
int iItem=m_ControlList.InsertItem(0,szValueName,0);
m_ControlList.SetItemText(iItem,1,"REG_EXPAND_SZ");
m_ControlList.SetItemText(iItem,2,(char*)szValueDate);
}
}
}

View File

@@ -7,40 +7,40 @@
class CRegisterDlg : public DialogBase
{
DECLARE_DYNAMIC(CRegisterDlg)
DECLARE_DYNAMIC(CRegisterDlg)
public:
CRegisterDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CRegisterDlg();
CRegisterDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CRegisterDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_REGISTER };
enum { IDD = IDD_DIALOG_REGISTER };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
BOOL m_bIsWorking;// <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
CTreeCtrl m_Tree;
CImageList m_ImageListTree; //<2F><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
CListCtrl m_ControlList;
CImageList m_ImageListControlList; //ControlList<73>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
virtual BOOL OnInitDialog();
afx_msg void OnClose();
HTREEITEM m_hRoot;
HTREEITEM HKLM;
HTREEITEM HKCR;
HTREEITEM HKCU;
HTREEITEM HKUS;
HTREEITEM HKCC;
HTREEITEM m_hSelectedItem;
BOOL m_isEnable;
char GetFatherPath(CString& strFullPath);
CString GetFullPath(HTREEITEM hCurrent);
afx_msg void OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult);
void OnReceiveComplete(void);
void AddPath(char* szBuffer);
void AddKey(char* szBuffer);
BOOL m_bIsWorking;// <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
CTreeCtrl m_Tree;
CImageList m_ImageListTree; //<2F><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
CListCtrl m_ControlList;
CImageList m_ImageListControlList; //ControlList<73>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
virtual BOOL OnInitDialog();
afx_msg void OnClose();
HTREEITEM m_hRoot;
HTREEITEM HKLM;
HTREEITEM HKCR;
HTREEITEM HKCU;
HTREEITEM HKUS;
HTREEITEM HKCC;
HTREEITEM m_hSelectedItem;
BOOL m_isEnable;
char GetFatherPath(CString& strFullPath);
CString GetFullPath(HTREEITEM hCurrent);
afx_msg void OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult);
void OnReceiveComplete(void);
void AddPath(char* szBuffer);
void AddKey(char* szBuffer);
};

File diff suppressed because it is too large Load Diff

View File

@@ -40,85 +40,85 @@ extern "C"
class CScreenSpyDlg : public DialogBase
{
DECLARE_DYNAMIC(CScreenSpyDlg)
DECLARE_DYNAMIC(CScreenSpyDlg)
public:
CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
virtual ~CScreenSpyDlg();
CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
virtual ~CScreenSpyDlg();
VOID SendNext(void);
VOID OnReceiveComplete();
HDC m_hFullDC;
HDC m_hFullMemDC;
HBITMAP m_BitmapHandle;
PVOID m_BitmapData_Full;
LPBITMAPINFO m_BitmapInfor_Full;
VOID DrawFirstScreen(void);
VOID DrawNextScreenDiff(bool keyFrame);
BOOL m_bIsFirst;
ULONG m_ulHScrollPos;
ULONG m_ulVScrollPos;
VOID DrawTipString(CString strString);
VOID SendNext(void);
VOID OnReceiveComplete();
HDC m_hFullDC;
HDC m_hFullMemDC;
HBITMAP m_BitmapHandle;
PVOID m_BitmapData_Full;
LPBITMAPINFO m_BitmapInfor_Full;
VOID DrawFirstScreen(void);
VOID DrawNextScreenDiff(bool keyFrame);
BOOL m_bIsFirst;
ULONG m_ulHScrollPos;
ULONG m_ulVScrollPos;
VOID DrawTipString(CString strString);
POINT m_ClientCursorPos;
BYTE m_bCursorIndex;
BOOL m_bIsTraceCursor;
CCursorInfo m_CursorInfo; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵͳ<CFB5>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
VOID SendCommand(const MYMSG* Msg);
void SendScaledMouseMessage(MSG* pMsg, bool makeLP);
VOID UpdateServerClipboard(char *szBuffer,ULONG ulLength);
VOID SendServerClipboard(void);
POINT m_ClientCursorPos;
BYTE m_bCursorIndex;
BOOL m_bIsTraceCursor;
CCursorInfo m_CursorInfo; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵͳ<CFB5>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
VOID SendCommand(const MYMSG* Msg);
void SendScaledMouseMessage(MSG* pMsg, bool makeLP);
VOID UpdateServerClipboard(char *szBuffer,ULONG ulLength);
VOID SendServerClipboard(void);
BOOL m_bIsCtrl;
LPBYTE m_szData;
BOOL m_bSend;
ULONG m_ulMsgCount;
int m_FrameID;
BOOL m_bIsCtrl;
LPBYTE m_szData;
BOOL m_bSend;
ULONG m_ulMsgCount;
int m_FrameID;
BOOL SaveSnapshot(void);
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SCREEN_SPY };
BOOL SaveSnapshot(void);
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SCREEN_SPY };
BOOL m_bFullScreen;
BOOL m_bFullScreen;
WINDOWPLACEMENT m_struOldWndpl;
WINDOWPLACEMENT m_struOldWndpl;
AVCodec* m_pCodec;
AVCodecContext* m_pCodecContext;
AVPacket m_AVPacket;
AVFrame m_AVFrame;
AVCodec* m_pCodec;
AVCodecContext* m_pCodecContext;
AVPacket m_AVPacket;
AVFrame m_AVFrame;
clock_t m_lastMouseMove; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>
POINT m_lastMousePoint;// <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
BOOL m_bAdaptiveSize = TRUE;
HCURSOR m_hRemoteCursor = NULL;
CRect m_CRect;
double m_wZoom=1, m_hZoom=1;
bool m_bMouseTracking = false;
clock_t m_lastMouseMove; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>
POINT m_lastMousePoint;// <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
BOOL m_bAdaptiveSize = TRUE;
HCURSOR m_hRemoteCursor = NULL;
CRect m_CRect;
double m_wZoom=1, m_hZoom=1;
bool m_bMouseTracking = false;
bool Decode(LPBYTE Buffer, int size);
void EnterFullScreen();
bool LeaveFullScreen();
bool Decode(LPBYTE Buffer, int size);
void EnterFullScreen();
bool LeaveFullScreen();
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnMouseLeave();
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnMouseLeave();
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnSize(UINT nType, int cx, int cy);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnPaint();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
virtual BOOL PreTranslateMessage(MSG* pMsg);
void OnLButtonDblClk(UINT nFlags, CPoint point);
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnPaint();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
virtual BOOL PreTranslateMessage(MSG* pMsg);
void OnLButtonDblClk(UINT nFlags, CPoint point);
};

File diff suppressed because it is too large Load Diff

View File

@@ -12,16 +12,16 @@
IMPLEMENT_DYNAMIC(CServicesDlg, CDialog)
// ItemData1 <20><>Ҫ<EFBFBD><D2AA>ItemDataͬ<61><CDAC><EFBFBD>ˣ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct ItemData1
{
CString Data[5];
CString GetData(int index) const {
return this ? Data[index] : "";
}
typedef struct ItemData1 {
CString Data[5];
CString GetData(int index) const
{
return this ? Data[index] : "";
}
} ItemData1;
CServicesDlg::CServicesDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
: DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
{
}
@@ -31,22 +31,22 @@ CServicesDlg::~CServicesDlg()
void CServicesDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST, m_ControlList);
DDX_Control(pDX, IDC_STATIC_COUNT, m_ServicesCount);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST, m_ControlList);
DDX_Control(pDX, IDC_STATIC_COUNT, m_ServicesCount);
}
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)
ON_COMMAND(ID_SERVICES_START, &CServicesDlg::OnServicesStart)
ON_COMMAND(ID_SERVICES_REFLASH, &CServicesDlg::OnServicesReflash)
ON_NOTIFY(NM_RCLICK, IDC_LIST, &CServicesDlg::OnNMRClickList)
ON_NOTIFY(HDN_ITEMCLICK, 0, &CServicesDlg::OnHdnItemclickList)
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)
ON_COMMAND(ID_SERVICES_START, &CServicesDlg::OnServicesStart)
ON_COMMAND(ID_SERVICES_REFLASH, &CServicesDlg::OnServicesReflash)
ON_NOTIFY(NM_RCLICK, IDC_LIST, &CServicesDlg::OnNMRClickList)
ON_NOTIFY(HDN_ITEMCLICK, 0, &CServicesDlg::OnHdnItemclickList)
END_MESSAGE_MAP()
@@ -55,220 +55,220 @@ END_MESSAGE_MAP()
BOOL CServicesDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
CString strString;
strString.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",m_IPAddress);
SetWindowText(strString);
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
CString strString;
strString.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",m_IPAddress);
SetWindowText(strString);
m_ControlList.SetExtendedStyle( LVS_EX_FULLROWSELECT);
m_ControlList.InsertColumn(0, "<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 150);
m_ControlList.InsertColumn(1, "<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 260);
m_ControlList.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 80);
m_ControlList.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬", LVCFMT_LEFT, 80);
m_ControlList.InsertColumn(4, "<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>", LVCFMT_LEFT, 380);
m_ControlList.SetExtendedStyle( LVS_EX_FULLROWSELECT);
m_ControlList.InsertColumn(0, "<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 150);
m_ControlList.InsertColumn(1, "<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 260);
m_ControlList.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 80);
m_ControlList.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬", LVCFMT_LEFT, 80);
m_ControlList.InsertColumn(4, "<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>", LVCFMT_LEFT, 380);
ShowServicesList();
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
ShowServicesList();
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
int CServicesDlg::ShowServicesList(void)
{
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
char *szBuffer = tmp.c_str();
char *szDisplayName;
char *szServiceName;
char *szRunWay;
char *szAutoRun;
char *szFilePath;
DWORD dwOffset = 0;
DeleteAllItems();
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
char *szBuffer = tmp.c_str();
char *szDisplayName;
char *szServiceName;
char *szRunWay;
char *szAutoRun;
char *szFilePath;
DWORD dwOffset = 0;
DeleteAllItems();
int i = 0;
for (i = 0; dwOffset < m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i)
{
szDisplayName = szBuffer + dwOffset;
szServiceName = szDisplayName + lstrlen(szDisplayName) +1;
szFilePath= szServiceName + lstrlen(szServiceName) +1;
szRunWay = szFilePath + lstrlen(szFilePath) + 1;
szAutoRun = szRunWay + lstrlen(szRunWay) + 1;
int i = 0;
for (i = 0; dwOffset < m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i) {
szDisplayName = szBuffer + dwOffset;
szServiceName = szDisplayName + lstrlen(szDisplayName) +1;
szFilePath= szServiceName + lstrlen(szServiceName) +1;
szRunWay = szFilePath + lstrlen(szFilePath) + 1;
szAutoRun = szRunWay + lstrlen(szRunWay) + 1;
m_ControlList.InsertItem(i, szServiceName);
m_ControlList.SetItemText(i, 1, szDisplayName);
m_ControlList.SetItemText(i, 2, szAutoRun);
m_ControlList.SetItemText(i, 3, szRunWay);
m_ControlList.SetItemText(i, 4, szFilePath );
auto data = new ItemData1{ szServiceName, szDisplayName, szAutoRun, szRunWay, szFilePath };
m_ControlList.SetItemData(i, (DWORD_PTR)data);
dwOffset += lstrlen(szDisplayName) + lstrlen(szServiceName) + lstrlen(szFilePath) + lstrlen(szRunWay)
+ lstrlen(szAutoRun) +5;
}
m_ControlList.InsertItem(i, szServiceName);
m_ControlList.SetItemText(i, 1, szDisplayName);
m_ControlList.SetItemText(i, 2, szAutoRun);
m_ControlList.SetItemText(i, 3, szRunWay);
m_ControlList.SetItemText(i, 4, szFilePath );
auto data = new ItemData1{ szServiceName, szDisplayName, szAutoRun, szRunWay, szFilePath };
m_ControlList.SetItemData(i, (DWORD_PTR)data);
dwOffset += lstrlen(szDisplayName) + lstrlen(szServiceName) + lstrlen(szFilePath) + lstrlen(szRunWay)
+ lstrlen(szAutoRun) +5;
}
CString strTemp;
strTemp.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d",i);
CString strTemp;
strTemp.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d",i);
m_ServicesCount.SetWindowText(strTemp);
m_ServicesCount.SetWindowText(strTemp);
return 0;
return 0;
}
void CServicesDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DeleteAllItems();
DeleteAllItems();
DialogBase::OnClose();
DialogBase::OnClose();
}
void CServicesDlg::OnServicesAuto()
{
ServicesConfig(3);
ServicesConfig(3);
}
void CServicesDlg::OnServicesManual()
{
ServicesConfig(4);
ServicesConfig(4);
}
void CServicesDlg::OnServicesStop()
{
ServicesConfig(2);
ServicesConfig(2);
}
void CServicesDlg::OnServicesStart()
{
ServicesConfig(1);
ServicesConfig(1);
}
void CServicesDlg::OnServicesReflash()
{
BYTE bToken = COMMAND_SERVICELIST; //ˢ<><CBA2>
m_ContextObject->Send2Client(&bToken, 1);
BYTE bToken = COMMAND_SERVICELIST; //ˢ<><CBA2>
m_ContextObject->Send2Client(&bToken, 1);
}
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CServicesDlg::DeleteAllItems() {
for (int i = 0; i < m_ControlList.GetItemCount(); i++)
{
auto data = (ItemData1*)m_ControlList.GetItemData(i);
if (NULL != data) {
delete data;
}
}
m_ControlList.DeleteAllItems();
void CServicesDlg::DeleteAllItems()
{
for (int i = 0; i < m_ControlList.GetItemCount(); i++) {
auto data = (ItemData1*)m_ControlList.GetItemData(i);
if (NULL != data) {
delete data;
}
}
m_ControlList.DeleteAllItems();
}
int CALLBACK CServicesDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
int nColumn = pSortInfo->first;
bool bAscending = pSortInfo->second;
int CALLBACK CServicesDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
int nColumn = pSortInfo->first;
bool bAscending = pSortInfo->second;
// <20><>ȡ<EFBFBD><C8A1>ֵ
ItemData1* context1 = (ItemData1*)lParam1;
ItemData1* context2 = (ItemData1*)lParam2;
CString s1 = context1->GetData(nColumn);
CString s2 = context2->GetData(nColumn);
// <20><>ȡ<EFBFBD><C8A1>ֵ
ItemData1* context1 = (ItemData1*)lParam1;
ItemData1* context2 = (ItemData1*)lParam2;
CString s1 = context1->GetData(nColumn);
CString s2 = context2->GetData(nColumn);
int result = s1 > s2 ? 1 : -1;
return bAscending ? result : -result;
int result = s1 > s2 ? 1 : -1;
return bAscending ? result : -result;
}
void CServicesDlg::SortByColumn(int nColumn) {
static int m_nSortColumn = 0;
static bool m_bSortAscending = false;
if (nColumn == m_nSortColumn) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>У<EFBFBD><D0A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
m_bSortAscending = !m_bSortAscending;
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
m_nSortColumn = nColumn;
m_bSortAscending = true;
}
void CServicesDlg::SortByColumn(int nColumn)
{
static int m_nSortColumn = 0;
static bool m_bSortAscending = false;
if (nColumn == m_nSortColumn) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>У<EFBFBD><D0A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
m_bSortAscending = !m_bSortAscending;
} else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
m_nSortColumn = nColumn;
m_bSortAscending = true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::pair<int, bool> sortInfo(m_nSortColumn, m_bSortAscending);
m_ControlList.SortItems(CompareFunction, reinterpret_cast<LPARAM>(&sortInfo));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::pair<int, bool> sortInfo(m_nSortColumn, m_bSortAscending);
m_ControlList.SortItems(CompareFunction, reinterpret_cast<LPARAM>(&sortInfo));
}
void CServicesDlg::OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult) {
LPNMHEADER pNMHeader = reinterpret_cast<LPNMHEADER>(pNMHDR);
int nColumn = pNMHeader->iItem; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SortByColumn(nColumn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*pResult = 0;
void CServicesDlg::OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMHEADER pNMHeader = reinterpret_cast<LPNMHEADER>(pNMHDR);
int nColumn = pNMHeader->iItem; // <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SortByColumn(nColumn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*pResult = 0;
}
void CServicesDlg::OnNMRClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CMenu Menu;
Menu.LoadMenu(IDR_MENU_SERVICES);
CMenu *SubMenu=Menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
SubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,Point.x,Point.y,this);
*pResult = 0;
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CMenu Menu;
Menu.LoadMenu(IDR_MENU_SERVICES);
CMenu *SubMenu=Menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
SubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,Point.x,Point.y,this);
*pResult = 0;
}
void CServicesDlg::OnReceiveComplete(void)
{
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
{
case TOKEN_SERVERLIST:
ShowServicesList();
break;
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0)) {
case TOKEN_SERVERLIST:
ShowServicesList();
break;
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
}
void CServicesDlg::ServicesConfig(BYTE bCmd)
{
DWORD dwOffset = 2;
POSITION Pos = m_ControlList.GetFirstSelectedItemPosition();
int iItem = m_ControlList.GetNextSelectedItem(Pos);
DWORD dwOffset = 2;
POSITION Pos = m_ControlList.GetFirstSelectedItemPosition();
int iItem = m_ControlList.GetNextSelectedItem(Pos);
CString strServicesName = m_ControlList.GetItemText(iItem, 0 );
char* szServiceName = strServicesName.GetBuffer(0);
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 3 + lstrlen(szServiceName)); //[][][]\0
szBuffer[0] = COMMAND_SERVICECONFIG;
szBuffer[1] = bCmd;
CString strServicesName = m_ControlList.GetItemText(iItem, 0 );
char* szServiceName = strServicesName.GetBuffer(0);
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 3 + lstrlen(szServiceName)); //[][][]\0
szBuffer[0] = COMMAND_SERVICECONFIG;
szBuffer[1] = bCmd;
memcpy(szBuffer + dwOffset, szServiceName, lstrlen(szServiceName)+1);
memcpy(szBuffer + dwOffset, szServiceName, lstrlen(szServiceName)+1);
m_ContextObject->Send2Client(szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer);
m_ContextObject->Send2Client(szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer);
}
void CServicesDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CDialog::OnSize(nType, cx, cy);
if (!m_ControlList.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
if (!m_ControlList.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
CRect rc;
m_ControlList.GetWindowRect(&rc);
ScreenToClient(&rc);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
CRect rc;
m_ControlList.GetWindowRect(&rc);
ScreenToClient(&rc);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
m_ControlList.MoveWindow(0, 0, cx, cy, TRUE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
m_ControlList.MoveWindow(0, 0, cx, cy, TRUE);
}

View File

@@ -7,38 +7,38 @@
class CServicesDlg : public DialogBase
{
DECLARE_DYNAMIC(CServicesDlg)
DECLARE_DYNAMIC(CServicesDlg)
public:
CServicesDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CServicesDlg();
CServicesDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CServicesDlg();
int ShowServicesList(void);
void OnReceiveComplete(void);
void ServicesConfig(BYTE bCmd);
int ShowServicesList(void);
void OnReceiveComplete(void);
void ServicesConfig(BYTE bCmd);
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SERVICES };
enum { IDD = IDD_DIALOG_SERVICES };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CListCtrl m_ControlList;
virtual BOOL OnInitDialog();
CListCtrl m_ControlList;
virtual BOOL OnInitDialog();
void DeleteAllItems();
void SortByColumn(int nColumn);
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
void DeleteAllItems();
void SortByColumn(int nColumn);
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
CStatic m_ServicesCount;
afx_msg void OnClose();
afx_msg void OnServicesAuto();
afx_msg void OnServicesManual();
afx_msg void OnServicesStop();
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);
CStatic m_ServicesCount;
afx_msg void OnClose();
afx_msg void OnServicesAuto();
afx_msg void OnServicesManual();
afx_msg void OnServicesStop();
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);
};

View File

@@ -13,17 +13,17 @@
IMPLEMENT_DYNAMIC(CSettingDlg, CDialog)
CSettingDlg::CSettingDlg(CWnd* pParent)
: CDialog(CSettingDlg::IDD, pParent)
, m_nListenPort("6543")
, m_nMax_Connect(0)
, m_sScreenCapture(_T("GDI"))
, m_sScreenCompress(_T("<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"))
, m_nReportInterval(5)
, m_sSoftwareDetect(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ"))
, m_sPublicIP(_T(""))
, m_sUdpOption(_T(""))
, m_nFrpPort(7000)
, m_sFrpToken(_T(""))
: CDialog(CSettingDlg::IDD, pParent)
, m_nListenPort("6543")
, m_nMax_Connect(0)
, m_sScreenCapture(_T("GDI"))
, m_sScreenCompress(_T("<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"))
, m_nReportInterval(5)
, m_sSoftwareDetect(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ"))
, m_sPublicIP(_T(""))
, m_sUdpOption(_T(""))
, m_nFrpPort(7000)
, m_sFrpToken(_T(""))
{
}
@@ -33,45 +33,45 @@ CSettingDlg::~CSettingDlg()
void CSettingDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_PORT, m_nListenPort);
DDV_MaxChars(pDX, m_nListenPort, 32);
DDX_Text(pDX, IDC_EDIT_MAX, m_nMax_Connect);
DDX_Control(pDX, IDC_BUTTON_SETTINGAPPLY, m_ApplyButton);
DDX_Control(pDX, IDC_COMBO_SCREEN_CAPTURE, m_ComboScreenCapture);
DDX_CBString(pDX, IDC_COMBO_SCREEN_CAPTURE, m_sScreenCapture);
DDV_MaxChars(pDX, m_sScreenCapture, 32);
DDX_Control(pDX, IDC_COMBO_SCREEN_COMPRESS, m_ComboScreenCompress);
DDX_CBString(pDX, IDC_COMBO_SCREEN_COMPRESS, m_sScreenCompress);
DDX_Control(pDX, IDC_EDIT_REPORTINTERVAL, m_EditReportInterval);
DDX_Text(pDX, IDC_EDIT_REPORTINTERVAL, m_nReportInterval);
DDV_MinMaxInt(pDX, m_nReportInterval, 0, 3600);
DDX_Control(pDX, IDC_COMBO_SOFTWAREDETECT, m_ComboSoftwareDetect);
DDX_CBString(pDX, IDC_COMBO_SOFTWAREDETECT, m_sSoftwareDetect);
DDV_MaxChars(pDX, m_sSoftwareDetect, 256);
DDX_Control(pDX, IDC_EDIT_PUBLIC_IP, m_EditPublicIP);
DDX_Text(pDX, IDC_EDIT_PUBLIC_IP, m_sPublicIP);
DDV_MaxChars(pDX, m_sPublicIP, 100);
DDX_Control(pDX, IDC_EDIT_UDP_OPTION, m_EditUdpOption);
DDX_Text(pDX, IDC_EDIT_UDP_OPTION, m_sUdpOption);
DDV_MaxChars(pDX, m_sUdpOption, 24);
DDX_Control(pDX, IDC_EDIT_FRP_PORT, m_EditFrpPort);
DDX_Text(pDX, IDC_EDIT_FRP_PORT, m_nFrpPort);
DDV_MinMaxInt(pDX, m_nFrpPort, 1, 65535);
DDX_Control(pDX, IDC_EDIT_FRP_TOKEN, m_EditFrpToken);
DDX_Text(pDX, IDC_EDIT_FRP_TOKEN, m_sFrpToken);
DDV_MaxChars(pDX, m_sFrpToken, 24);
DDX_Control(pDX, IDC_COMBO_VIDEO_WALL, m_ComboVideoWall);
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_PORT, m_nListenPort);
DDV_MaxChars(pDX, m_nListenPort, 32);
DDX_Text(pDX, IDC_EDIT_MAX, m_nMax_Connect);
DDX_Control(pDX, IDC_BUTTON_SETTINGAPPLY, m_ApplyButton);
DDX_Control(pDX, IDC_COMBO_SCREEN_CAPTURE, m_ComboScreenCapture);
DDX_CBString(pDX, IDC_COMBO_SCREEN_CAPTURE, m_sScreenCapture);
DDV_MaxChars(pDX, m_sScreenCapture, 32);
DDX_Control(pDX, IDC_COMBO_SCREEN_COMPRESS, m_ComboScreenCompress);
DDX_CBString(pDX, IDC_COMBO_SCREEN_COMPRESS, m_sScreenCompress);
DDX_Control(pDX, IDC_EDIT_REPORTINTERVAL, m_EditReportInterval);
DDX_Text(pDX, IDC_EDIT_REPORTINTERVAL, m_nReportInterval);
DDV_MinMaxInt(pDX, m_nReportInterval, 0, 3600);
DDX_Control(pDX, IDC_COMBO_SOFTWAREDETECT, m_ComboSoftwareDetect);
DDX_CBString(pDX, IDC_COMBO_SOFTWAREDETECT, m_sSoftwareDetect);
DDV_MaxChars(pDX, m_sSoftwareDetect, 256);
DDX_Control(pDX, IDC_EDIT_PUBLIC_IP, m_EditPublicIP);
DDX_Text(pDX, IDC_EDIT_PUBLIC_IP, m_sPublicIP);
DDV_MaxChars(pDX, m_sPublicIP, 100);
DDX_Control(pDX, IDC_EDIT_UDP_OPTION, m_EditUdpOption);
DDX_Text(pDX, IDC_EDIT_UDP_OPTION, m_sUdpOption);
DDV_MaxChars(pDX, m_sUdpOption, 24);
DDX_Control(pDX, IDC_EDIT_FRP_PORT, m_EditFrpPort);
DDX_Text(pDX, IDC_EDIT_FRP_PORT, m_nFrpPort);
DDV_MinMaxInt(pDX, m_nFrpPort, 1, 65535);
DDX_Control(pDX, IDC_EDIT_FRP_TOKEN, m_EditFrpToken);
DDX_Text(pDX, IDC_EDIT_FRP_TOKEN, m_sFrpToken);
DDV_MaxChars(pDX, m_sFrpToken, 24);
DDX_Control(pDX, IDC_COMBO_VIDEO_WALL, m_ComboVideoWall);
}
BEGIN_MESSAGE_MAP(CSettingDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON_SETTINGAPPLY, &CSettingDlg::OnBnClickedButtonSettingapply)
ON_EN_CHANGE(IDC_EDIT_PORT, &CSettingDlg::OnEnChangeEditPort)
ON_EN_CHANGE(IDC_EDIT_MAX, &CSettingDlg::OnEnChangeEditMax)
ON_BN_CLICKED(IDC_RADIO_ALL_SCREEN, &CSettingDlg::OnBnClickedRadioAllScreen)
ON_BN_CLICKED(IDC_RADIO_MAIN_SCREEN, &CSettingDlg::OnBnClickedRadioMainScreen)
ON_BN_CLICKED(IDC_RADIO_FRP_OFF, &CSettingDlg::OnBnClickedRadioFrpOff)
ON_BN_CLICKED(IDC_RADIO_FRP_ON, &CSettingDlg::OnBnClickedRadioFrpOn)
ON_BN_CLICKED(IDC_BUTTON_SETTINGAPPLY, &CSettingDlg::OnBnClickedButtonSettingapply)
ON_EN_CHANGE(IDC_EDIT_PORT, &CSettingDlg::OnEnChangeEditPort)
ON_EN_CHANGE(IDC_EDIT_MAX, &CSettingDlg::OnEnChangeEditMax)
ON_BN_CLICKED(IDC_RADIO_ALL_SCREEN, &CSettingDlg::OnBnClickedRadioAllScreen)
ON_BN_CLICKED(IDC_RADIO_MAIN_SCREEN, &CSettingDlg::OnBnClickedRadioMainScreen)
ON_BN_CLICKED(IDC_RADIO_FRP_OFF, &CSettingDlg::OnBnClickedRadioFrpOff)
ON_BN_CLICKED(IDC_RADIO_FRP_ON, &CSettingDlg::OnBnClickedRadioFrpOn)
END_MESSAGE_MAP()
@@ -80,177 +80,175 @@ END_MESSAGE_MAP()
BOOL CSettingDlg::OnInitDialog()
{
CDialog::OnInitDialog();
IPConverter cvt;
m_sPublicIP = THIS_CFG.GetStr("settings", "master", "").c_str();
m_sPublicIP = m_sPublicIP.IsEmpty() ? cvt.getPublicIP().c_str() : m_sPublicIP;
std::string nPort = THIS_CFG.GetStr("settings", "ghost", "6543");
m_sUdpOption = THIS_CFG.GetStr("settings", "UDPOption", "0").c_str();
CDialog::OnInitDialog();
IPConverter cvt;
m_sPublicIP = THIS_CFG.GetStr("settings", "master", "").c_str();
m_sPublicIP = m_sPublicIP.IsEmpty() ? cvt.getPublicIP().c_str() : m_sPublicIP;
std::string nPort = THIS_CFG.GetStr("settings", "ghost", "6543");
m_sUdpOption = THIS_CFG.GetStr("settings", "UDPOption", "0").c_str();
int DXGI = THIS_CFG.GetInt("settings", "DXGI");
int DXGI = THIS_CFG.GetInt("settings", "DXGI");
CString algo = THIS_CFG.GetStr("settings", "ScreenCompress", "").c_str();
CString algo = THIS_CFG.GetStr("settings", "ScreenCompress", "").c_str();
m_nListenPort = nPort.c_str();
m_nListenPort = nPort.c_str();
int n = algo.IsEmpty() ? ALGORITHM_DIFF : atoi(algo.GetString());
switch (n)
{
case ALGORITHM_GRAY:
m_sScreenCompress = "<EFBFBD>Ҷ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case ALGORITHM_DIFF:
m_sScreenCompress = "<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case ALGORITHM_H264:
m_sScreenCompress = "H264ѹ<EFBFBD><EFBFBD><EFBFBD>";
break;
default:
break;
}
m_ComboScreenCompress.InsertString(ALGORITHM_GRAY, "<EFBFBD>Ҷ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboScreenCompress.InsertString(ALGORITHM_DIFF, "<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboScreenCompress.InsertString(ALGORITHM_H264, "H264ѹ<EFBFBD><EFBFBD><EFBFBD>");
int n = algo.IsEmpty() ? ALGORITHM_DIFF : atoi(algo.GetString());
switch (n) {
case ALGORITHM_GRAY:
m_sScreenCompress = "<EFBFBD>Ҷ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case ALGORITHM_DIFF:
m_sScreenCompress = "<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
break;
case ALGORITHM_H264:
m_sScreenCompress = "H264ѹ<EFBFBD><EFBFBD><EFBFBD>";
break;
default:
break;
}
m_ComboScreenCompress.InsertString(ALGORITHM_GRAY, "<EFBFBD>Ҷ<EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboScreenCompress.InsertString(ALGORITHM_DIFF, "<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_ComboScreenCompress.InsertString(ALGORITHM_H264, "H264ѹ<EFBFBD><EFBFBD><EFBFBD>");
m_ComboScreenCapture.InsertString(0, "GDI");
m_ComboScreenCapture.InsertString(1, "DXGI");
m_ComboScreenCapture.InsertString(2, "VIRTUAL");
m_sScreenCapture = DXGI==1 ? "DXGI" : (DXGI == 2 ? "VIRTUAL" : "GDI");
m_ComboScreenCapture.InsertString(0, "GDI");
m_ComboScreenCapture.InsertString(1, "DXGI");
m_ComboScreenCapture.InsertString(2, "VIRTUAL");
m_sScreenCapture = DXGI==1 ? "DXGI" : (DXGI == 2 ? "VIRTUAL" : "GDI");
m_ComboSoftwareDetect.InsertString(SOFTWARE_CAMERA, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ");
m_ComboSoftwareDetect.InsertString(SOFTWARE_TELEGRAM, "<EFBFBD>");
auto str = THIS_CFG.GetStr("settings", "ReportInterval", "5");
m_nReportInterval = atoi(str.c_str());
n = THIS_CFG.GetInt("settings", "SoftwareDetect");
switch (n)
{
case SOFTWARE_CAMERA:
m_sSoftwareDetect = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ";
break;
case SOFTWARE_TELEGRAM:
m_sSoftwareDetect = "<EFBFBD>";
break;
default:
m_sSoftwareDetect = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ";
break;
}
BOOL all = THIS_CFG.GetInt("settings", "MultiScreen");
((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->SetCheck(!all);
((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->SetCheck(all);
m_ComboSoftwareDetect.InsertString(SOFTWARE_CAMERA, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ");
m_ComboSoftwareDetect.InsertString(SOFTWARE_TELEGRAM, "<EFBFBD>");
auto str = THIS_CFG.GetStr("settings", "ReportInterval", "5");
m_nReportInterval = atoi(str.c_str());
n = THIS_CFG.GetInt("settings", "SoftwareDetect");
switch (n) {
case SOFTWARE_CAMERA:
m_sSoftwareDetect = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ";
break;
case SOFTWARE_TELEGRAM:
m_sSoftwareDetect = "<EFBFBD>";
break;
default:
m_sSoftwareDetect = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ";
break;
}
BOOL all = THIS_CFG.GetInt("settings", "MultiScreen");
((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->SetCheck(!all);
((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->SetCheck(all);
BOOL frp = THIS_CFG.GetInt("frp", "UseFrp");
((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->SetCheck(!frp);
((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->SetCheck(frp);
m_nFrpPort = THIS_CFG.GetInt("frp", "server_port", 7000);
m_sFrpToken = THIS_CFG.GetStr("frp", "token").c_str();
BOOL frp = THIS_CFG.GetInt("frp", "UseFrp");
((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->SetCheck(!frp);
((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->SetCheck(frp);
m_nFrpPort = THIS_CFG.GetInt("frp", "server_port", 7000);
m_sFrpToken = THIS_CFG.GetStr("frp", "token").c_str();
int size = THIS_CFG.GetInt("settings", "VideoWallSize");
m_ComboVideoWall.InsertString(0, "<EFBFBD><EFBFBD>");
m_ComboVideoWall.InsertString(1, "2 x 2");
m_ComboVideoWall.InsertString(2, "3 x 3");
m_ComboVideoWall.InsertString(3, "4 x 4");
m_ComboVideoWall.InsertString(4, "5 x 5");
if (size < 1 || size > 5) size = 1;
m_ComboVideoWall.SetCurSel(size-1);
int size = THIS_CFG.GetInt("settings", "VideoWallSize");
m_ComboVideoWall.InsertString(0, "<EFBFBD><EFBFBD>");
m_ComboVideoWall.InsertString(1, "2 x 2");
m_ComboVideoWall.InsertString(2, "3 x 3");
m_ComboVideoWall.InsertString(3, "4 x 4");
m_ComboVideoWall.InsertString(4, "5 x 5");
if (size < 1 || size > 5) size = 1;
m_ComboVideoWall.SetCurSel(size-1);
UpdateData(FALSE);
UpdateData(FALSE);
return TRUE;
return TRUE;
}
void CSettingDlg::OnBnClickedButtonSettingapply()
{
UpdateData(TRUE);
THIS_CFG.SetStr("settings", "master", m_sPublicIP.GetBuffer());
THIS_CFG.SetStr("settings", "ghost", m_nListenPort.GetString());
THIS_CFG.SetStr("settings", "UDPOption", m_sUdpOption.GetString());
UpdateData(TRUE);
THIS_CFG.SetStr("settings", "master", m_sPublicIP.GetBuffer());
THIS_CFG.SetStr("settings", "ghost", m_nListenPort.GetString());
THIS_CFG.SetStr("settings", "UDPOption", m_sUdpOption.GetString());
int n = m_ComboScreenCapture.GetCurSel();
THIS_CFG.SetInt("settings", "DXGI", n);
int n = m_ComboScreenCapture.GetCurSel();
THIS_CFG.SetInt("settings", "DXGI", n);
n = m_ComboScreenCompress.GetCurSel();
THIS_CFG.SetInt("settings", "ScreenCompress", n);
n = m_ComboScreenCompress.GetCurSel();
THIS_CFG.SetInt("settings", "ScreenCompress", n);
THIS_CFG.SetInt("settings", "ReportInterval", m_nReportInterval);
n = m_ComboSoftwareDetect.GetCurSel();
THIS_CFG.SetInt("settings", "SoftwareDetect", n);
THIS_CFG.SetInt("settings", "ReportInterval", m_nReportInterval);
n = m_ComboSoftwareDetect.GetCurSel();
THIS_CFG.SetInt("settings", "SoftwareDetect", n);
BOOL all = ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->GetCheck();
THIS_CFG.SetInt("settings", "MultiScreen", all);
BOOL all = ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->GetCheck();
THIS_CFG.SetInt("settings", "MultiScreen", all);
BOOL frp = ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->GetCheck();
THIS_CFG.SetInt("frp", "UseFrp", frp);
THIS_CFG.SetInt("frp", "server_port", m_nFrpPort);
THIS_CFG.SetStr("frp", "token", m_sFrpToken.GetString());
BOOL frp = ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->GetCheck();
THIS_CFG.SetInt("frp", "UseFrp", frp);
THIS_CFG.SetInt("frp", "server_port", m_nFrpPort);
THIS_CFG.SetStr("frp", "token", m_sFrpToken.GetString());
THIS_CFG.SetInt("settings", "VideoWallSize", m_ComboVideoWall.GetCurSel()+1);
THIS_CFG.SetInt("settings", "VideoWallSize", m_ComboVideoWall.GetCurSel()+1);
m_ApplyButton.EnableWindow(FALSE);
m_ApplyButton.ShowWindow(SW_HIDE);
m_ApplyButton.EnableWindow(FALSE);
m_ApplyButton.ShowWindow(SW_HIDE);
}
void CSettingDlg::OnEnChangeEditPort()
{
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD> RICHEDIT <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ʹ<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д CDialog::OnInitDialog()
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRichEditCtrl().SetEventMask()<29><>
// ͬʱ<CDAC><CAB1> ENM_CHANGE <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD> RICHEDIT <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ʹ<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д CDialog::OnInitDialog()
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRichEditCtrl().SetEventMask()<29><>
// ͬʱ<CDAC><CAB1> ENM_CHANGE <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>Button<6F><6E><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
m_ApplyButton.ShowWindow(SW_NORMAL);
m_ApplyButton.EnableWindow(TRUE);
// <20><>Button<6F><6E><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
m_ApplyButton.ShowWindow(SW_NORMAL);
m_ApplyButton.EnableWindow(TRUE);
}
void CSettingDlg::OnEnChangeEditMax()
{
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD> RICHEDIT <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ʹ<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д CDialog::OnInitDialog()
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRichEditCtrl().SetEventMask()<29><>
// ͬʱ<CDAC><CAB1> ENM_CHANGE <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD> RICHEDIT <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ʹ<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д CDialog::OnInitDialog()
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRichEditCtrl().SetEventMask()<29><>
// ͬʱ<CDAC><CAB1> ENM_CHANGE <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HWND hApplyButton = ::GetDlgItem(m_hWnd,IDC_BUTTON_SETTINGAPPLY);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HWND hApplyButton = ::GetDlgItem(m_hWnd,IDC_BUTTON_SETTINGAPPLY);
::ShowWindow(hApplyButton,SW_NORMAL);
::EnableWindow(hApplyButton,TRUE);
::ShowWindow(hApplyButton,SW_NORMAL);
::EnableWindow(hApplyButton,TRUE);
}
void CSettingDlg::OnOK()
{
OnBnClickedButtonSettingapply();
OnBnClickedButtonSettingapply();
CDialog::OnOK();
CDialog::OnOK();
}
void CSettingDlg::OnBnClickedRadioAllScreen()
{
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->SetCheck(!b);
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->SetCheck(!b);
}
void CSettingDlg::OnBnClickedRadioMainScreen()
{
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->SetCheck(!b);
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->SetCheck(!b);
}
void CSettingDlg::OnBnClickedRadioFrpOff()
{
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->SetCheck(!b);
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->SetCheck(!b);
}
void CSettingDlg::OnBnClickedRadioFrpOn()
{
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->SetCheck(!b);
BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->GetCheck();
((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->SetCheck(!b);
}

View File

@@ -6,47 +6,47 @@
class CSettingDlg : public CDialog
{
DECLARE_DYNAMIC(CSettingDlg)
DECLARE_DYNAMIC(CSettingDlg)
public:
CSettingDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CSettingDlg();
CSettingDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CSettingDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SET };
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SET };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CString m_nListenPort;
UINT m_nMax_Connect;
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedButtonSettingapply();
afx_msg void OnEnChangeEditPort();
afx_msg void OnEnChangeEditMax();
CButton m_ApplyButton;
virtual void OnOK();
CComboBox m_ComboScreenCapture;
CString m_sScreenCapture;
CComboBox m_ComboScreenCompress;
CString m_sScreenCompress;
CEdit m_EditReportInterval;
int m_nReportInterval;
CComboBox m_ComboSoftwareDetect;
CString m_sSoftwareDetect;
CEdit m_EditPublicIP;
CString m_sPublicIP;
afx_msg void OnBnClickedRadioAllScreen();
afx_msg void OnBnClickedRadioMainScreen();
CEdit m_EditUdpOption;
CString m_sUdpOption;
afx_msg void OnBnClickedRadioFrpOff();
afx_msg void OnBnClickedRadioFrpOn();
CEdit m_EditFrpPort;
int m_nFrpPort;
CEdit m_EditFrpToken;
CString m_sFrpToken;
CComboBox m_ComboVideoWall;
CString m_nListenPort;
UINT m_nMax_Connect;
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedButtonSettingapply();
afx_msg void OnEnChangeEditPort();
afx_msg void OnEnChangeEditMax();
CButton m_ApplyButton;
virtual void OnOK();
CComboBox m_ComboScreenCapture;
CString m_sScreenCapture;
CComboBox m_ComboScreenCompress;
CString m_sScreenCompress;
CEdit m_EditReportInterval;
int m_nReportInterval;
CComboBox m_ComboSoftwareDetect;
CString m_sSoftwareDetect;
CEdit m_EditPublicIP;
CString m_sPublicIP;
afx_msg void OnBnClickedRadioAllScreen();
afx_msg void OnBnClickedRadioMainScreen();
CEdit m_EditUdpOption;
CString m_sUdpOption;
afx_msg void OnBnClickedRadioFrpOff();
afx_msg void OnBnClickedRadioFrpOn();
CEdit m_EditFrpPort;
int m_nFrpPort;
CEdit m_EditFrpToken;
CString m_sFrpToken;
CComboBox m_ComboVideoWall;
};

View File

@@ -9,16 +9,17 @@
#define EDIT_MAXLENGTH 30000
BEGIN_MESSAGE_MAP(CAutoEndEdit, CEdit)
ON_WM_CHAR()
ON_WM_CHAR()
END_MESSAGE_MAP()
void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ı<EFBFBD>ĩβ
int nLength = GetWindowTextLength();
SetSel(nLength, nLength);
void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ı<EFBFBD>ĩβ
int nLength = GetWindowTextLength();
SetSel(nLength, nLength);
// <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><E0B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
CEdit::OnChar(nChar, nRepCnt, nFlags);
// <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><E0B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
// CShellDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
@@ -26,7 +27,7 @@ void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
IMPLEMENT_DYNAMIC(CShellDlg, CDialog)
CShellDlg::CShellDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL)
: DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL)
{
}
@@ -36,15 +37,15 @@ CShellDlg::~CShellDlg()
void CShellDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT, m_Edit);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT, m_Edit);
}
BEGIN_MESSAGE_MAP(CShellDlg, CDialog)
ON_WM_CLOSE()
ON_WM_CTLCOLOR()
ON_WM_SIZE()
ON_WM_CLOSE()
ON_WM_CTLCOLOR()
ON_WM_SIZE()
END_MESSAGE_MAP()
@@ -53,207 +54,197 @@ END_MESSAGE_MAP()
BOOL CShellDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_nCurSel = 0;
m_nReceiveLength = 0;
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon,FALSE);
CDialog::OnInitDialog();
m_nCurSel = 0;
m_nReceiveLength = 0;
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon,FALSE);
CString str;
str.Format("%s - Զ<><D4B6><EFBFBD>ն<EFBFBD>", m_IPAddress);
SetWindowText(str);
CString str;
str.Format("%s - Զ<><D4B6><EFBFBD>ն<EFBFBD>", m_IPAddress);
SetWindowText(str);
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
m_Edit.SetWindowTextA(">>");
m_nCurSel = m_Edit.GetWindowTextLengthA();
m_nReceiveLength = m_nCurSel;
m_Edit.SetSel((int)m_nCurSel, (int)m_nCurSel);
m_Edit.PostMessage(EM_SETSEL, m_nCurSel, m_nCurSel);
m_Edit.SetLimitText(EDIT_MAXLENGTH);
m_Edit.SetWindowTextA(">>");
m_nCurSel = m_Edit.GetWindowTextLengthA();
m_nReceiveLength = m_nCurSel;
m_Edit.SetSel((int)m_nCurSel, (int)m_nCurSel);
m_Edit.PostMessage(EM_SETSEL, m_nCurSel, m_nCurSel);
m_Edit.SetLimitText(EDIT_MAXLENGTH);
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
VOID CShellDlg::OnReceiveComplete()
{
if (m_ContextObject==NULL)
{
return;
}
if (m_ContextObject==NULL) {
return;
}
AddKeyBoardData();
m_nReceiveLength = m_Edit.GetWindowTextLength();
AddKeyBoardData();
m_nReceiveLength = m_Edit.GetWindowTextLength();
}
#include <regex>
std::string removeAnsiCodes(const std::string& input) {
std::regex ansi_regex("\x1B\\[[0-9;]*[mK]");
return std::regex_replace(input, ansi_regex, "");
std::string removeAnsiCodes(const std::string& input)
{
std::regex ansi_regex("\x1B\\[[0-9;]*[mK]");
return std::regex_replace(input, ansi_regex, "");
}
VOID CShellDlg::AddKeyBoardData(void)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
//Shit\0
m_ContextObject->InDeCompressedBuffer.WriteBuffer((LPBYTE)"", 1); //<2F>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>\0
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
bool firstRecv = tmp.c_str() == std::string(">");
CString strResult = firstRecv ? "" : CString("\r\n") + removeAnsiCodes(tmp.c_str()).c_str(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> \0
//Shit\0
m_ContextObject->InDeCompressedBuffer.WriteBuffer((LPBYTE)"", 1); //<2F>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>\0
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
bool firstRecv = tmp.c_str() == std::string(">");
CString strResult = firstRecv ? "" : CString("\r\n") + removeAnsiCodes(tmp.c_str()).c_str(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> \0
//<2F><EFBFBD><E6BBBB>ԭ<EFBFBD><D4AD><EFBFBD>Ļ<EFBFBD><C4BB>з<EFBFBD> <20><><EFBFBD><EFBFBD>cmd <20>Ļ<EFBFBD><C4BB><EFBFBD>ͬw32<33>µı<C4B1>ؼ<EFBFBD><D8BC>Ļ<EFBFBD><C4BB>з<EFBFBD><D0B7><EFBFBD>һ<EFBFBD><D2BB> <20><><EFBFBD>еĻس<C4BB><D8B3><EFBFBD><EFBFBD><EFBFBD>
strResult.Replace("\n", "\r\n");
//<2F><EFBFBD><E6BBBB>ԭ<EFBFBD><D4AD><EFBFBD>Ļ<EFBFBD><C4BB>з<EFBFBD> <20><><EFBFBD><EFBFBD>cmd <20>Ļ<EFBFBD><C4BB><EFBFBD>ͬw32<33>µı<C4B1>ؼ<EFBFBD><D8BC>Ļ<EFBFBD><C4BB>з<EFBFBD><D0B7><EFBFBD>һ<EFBFBD><D2BB> <20><><EFBFBD>еĻس<C4BB><D8B3><EFBFBD><EFBFBD><EFBFBD>
strResult.Replace("\n", "\r\n");
if (strResult.GetLength() + m_Edit.GetWindowTextLength() >= EDIT_MAXLENGTH)
{
CString text;
m_Edit.GetWindowTextA(text);
auto n = EDIT_MAXLENGTH - strResult.GetLength() - 5; // <20><>5<EFBFBD><35><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>clear<61><72><EFBFBD><EFBFBD>
if (n < 0) {
strResult = strResult.Right(strResult.GetLength() + n);
}
m_Edit.SetWindowTextA(text.Right(max(n, 0)));
}
if (strResult.GetLength() + m_Edit.GetWindowTextLength() >= EDIT_MAXLENGTH) {
CString text;
m_Edit.GetWindowTextA(text);
auto n = EDIT_MAXLENGTH - strResult.GetLength() - 5; // <20><>5<EFBFBD><35><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>clear<61><72><EFBFBD><EFBFBD>
if (n < 0) {
strResult = strResult.Right(strResult.GetLength() + n);
}
m_Edit.SetWindowTextA(text.Right(max(n, 0)));
}
//<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
int iLength = m_Edit.GetWindowTextLength(); //kdfjdjfdir
//1.txt
//2.txt
//dir\r\n
//<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
int iLength = m_Edit.GetWindowTextLength(); //kdfjdjfdir
//1.txt
//2.txt
//dir\r\n
//<2F><><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD><EFBFBD>λ<EFBFBD>ò<EFBFBD>ѡ<EFBFBD><D1A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD> Ҳ<><D2B2><EFBFBD><EFBFBD>ĩβ <20><>Ϊ<EFBFBD>ӱ<EFBFBD><D3B1>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ҫ<><D2AA>ʾ<EFBFBD><CABE> <20><><EFBFBD>ǵ<EFBFBD> <20><>ǰ<EFBFBD><C7B0><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
m_Edit.SetSel(iLength, iLength);
//<2F><><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD><EFBFBD>λ<EFBFBD>ò<EFBFBD>ѡ<EFBFBD><D1A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD> Ҳ<><D2B2><EFBFBD><EFBFBD>ĩβ <20><>Ϊ<EFBFBD>ӱ<EFBFBD><D3B1>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ҫ<><D2AA>ʾ<EFBFBD><CABE> <20><><EFBFBD>ǵ<EFBFBD> <20><>ǰ<EFBFBD><C7B0><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
m_Edit.SetSel(iLength, iLength);
//<2F>ô<EFBFBD><C3B4>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD><C3B5>ַ<EFBFBD> //<2F><>ʾ
m_Edit.ReplaceSel(strResult);
//<2F>ô<EFBFBD><C3B4>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBBB><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD><C3B5>ַ<EFBFBD> //<2F><>ʾ
m_Edit.ReplaceSel(strResult);
//<2F><><EFBFBD>µõ<C2B5><C3B5>ַ<EFBFBD><D6B7>Ĵ<EFBFBD>С
//<2F><><EFBFBD>µõ<C2B5><C3B5>ַ<EFBFBD><D6B7>Ĵ<EFBFBD>С
m_nCurSel = m_Edit.GetWindowTextLength();
m_nCurSel = m_Edit.GetWindowTextLength();
//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Զ<EFBFBD><D4B6><EFBFBD>ն<EFBFBD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>س<EFBFBD>
//Ҫ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD>Ҫ<EFBFBD><D2AA>PreTranslateMessage<67><65><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Զ<EFBFBD><D4B6><EFBFBD>ն<EFBFBD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>س<EFBFBD>
//Ҫ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD>Ҫ<EFBFBD><D2AA>PreTranslateMessage<67><65><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
}
void CShellDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DialogBase::OnClose();
DialogBase::OnClose();
}
CString ExtractAfterLastNewline(const CString& str)
{
int nPos = str.ReverseFind(_T('\n'));
if (nPos != -1)
{
return str.Mid(nPos + 1);
}
int nPos = str.ReverseFind(_T('\n'));
if (nPos != -1) {
return str.Mid(nPos + 1);
}
nPos = str.ReverseFind(_T('\r'));
if (nPos != -1)
{
return str.Mid(nPos + 1);
}
nPos = str.ReverseFind(_T('\r'));
if (nPos != -1) {
return str.Mid(nPos + 1);
}
return str;
return str;
}
BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
// <20><><EFBFBD><EFBFBD>VK_ESCAPE<50><45>VK_DELETE
if (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_DELETE)
return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǿɱ༭<C9B1><E0BCAD><EFBFBD>Ļس<C4BB><D8B3><EFBFBD>
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_Edit.m_hWnd)
{
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݴ<EFBFBD>С
int iLength = m_Edit.GetWindowTextLength();
CString str;
//<2F>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_Edit.GetWindowText(str);
//<2F><><EFBFBD><EFBFBD>з<EFBFBD>
str += "\r\n";
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ<EFBFBD>ټ<EFBFBD><D9BC><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD>ȥ
LPBYTE pSrc = (LPBYTE)str.GetBuffer(0) + m_nCurSel;
if (pMsg->message == WM_KEYDOWN) {
// <20><><EFBFBD><EFBFBD>VK_ESCAPE<50><45>VK_DELETE
if (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_DELETE)
return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǿɱ༭<C9B1><E0BCAD><EFBFBD>Ļس<C4BB><D8B3><EFBFBD>
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_Edit.m_hWnd) {
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݴ<EFBFBD>С
int iLength = m_Edit.GetWindowTextLength();
CString str;
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
m_Edit.GetWindowText(str);
//<2F><><EFBFBD><EFBFBD>з<EFBFBD>
str += "\r\n";
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ<EFBFBD>ټ<EFBFBD><D9BC><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD>ȥ
LPBYTE pSrc = (LPBYTE)str.GetBuffer(0) + m_nCurSel;
#ifdef _DEBUG
TRACE("[Shell]=> %s", (char*)pSrc);
#endif
if (0 == strcmp((char*)pSrc, "exit\r\n")) { // <20>˳<EFBFBD><CBB3>ն<EFBFBD>
return PostMessage(WM_CLOSE);
}
else if (0 == strcmp((char*)pSrc, "clear\r\n")) { // <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
str = ExtractAfterLastNewline(str.Left(str.GetLength() - 7));
m_Edit.SetWindowTextA(str);
m_nCurSel = m_Edit.GetWindowTextLength();
m_nReceiveLength = m_nCurSel;
m_Edit.SetSel(m_nCurSel, m_nCurSel);
return TRUE;
}
int length = str.GetLength() - m_nCurSel;
m_ContextObject->Send2Client(pSrc, length);
m_nCurSel = m_Edit.GetWindowTextLength();
}
// <20><><EFBFBD><EFBFBD>VK_BACK
if (pMsg->wParam == VK_BACK && pMsg->hwnd == m_Edit.m_hWnd)
{
if (m_Edit.GetWindowTextLength() <= m_nReceiveLength)
return true;
}
// ʾ<><CABE><EFBFBD><EFBFBD>
//dir\r\n 5
}
if (0 == strcmp((char*)pSrc, "exit\r\n")) { // <20>˳<EFBFBD><CBB3>ն<EFBFBD>
return PostMessage(WM_CLOSE);
} else if (0 == strcmp((char*)pSrc, "clear\r\n")) { // <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
str = ExtractAfterLastNewline(str.Left(str.GetLength() - 7));
m_Edit.SetWindowTextA(str);
m_nCurSel = m_Edit.GetWindowTextLength();
m_nReceiveLength = m_nCurSel;
m_Edit.SetSel(m_nCurSel, m_nCurSel);
return TRUE;
}
int length = str.GetLength() - m_nCurSel;
m_ContextObject->Send2Client(pSrc, length);
m_nCurSel = m_Edit.GetWindowTextLength();
}
// <20><><EFBFBD><EFBFBD>VK_BACK
if (pMsg->wParam == VK_BACK && pMsg->hwnd == m_Edit.m_hWnd) {
if (m_Edit.GetWindowTextLength() <= m_nReceiveLength)
return true;
}
// ʾ<><CABE><EFBFBD><EFBFBD>
//dir\r\n 5
}
return CDialog::PreTranslateMessage(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
HBRUSH CShellDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if ((pWnd->GetDlgCtrlID() == IDC_EDIT) && (nCtlColor == CTLCOLOR_EDIT))
{
COLORREF clr = RGB(255, 255, 255);
pDC->SetTextColor(clr); //<2F><><EFBFBD>ð<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ı<EFBFBD>
clr = RGB(0,0,0);
pDC->SetBkColor(clr); //<2F><><EFBFBD>ú<EFBFBD>ɫ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
return CreateSolidBrush(clr); //<2F><>ΪԼ<CEAA><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ɫ<EFBFBD><C9AB>Ӧ<EFBFBD><D3A6>ˢ<EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
}
else
{
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
return hbr;
if ((pWnd->GetDlgCtrlID() == IDC_EDIT) && (nCtlColor == CTLCOLOR_EDIT)) {
COLORREF clr = RGB(255, 255, 255);
pDC->SetTextColor(clr); //<2F><><EFBFBD>ð<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ı<EFBFBD>
clr = RGB(0,0,0);
pDC->SetBkColor(clr); //<2F><><EFBFBD>ú<EFBFBD>ɫ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
return CreateSolidBrush(clr); //<2F><>ΪԼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ˢ<EFBFBD>Ӿ<EFBFBD><EFBFBD><EFBFBD>
} else {
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
return hbr;
}
void CShellDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CDialog::OnSize(nType, cx, cy);
if (!m_Edit.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
if (!m_Edit.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
CRect rc;
m_Edit.GetWindowRect(&rc);
ScreenToClient(&rc);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
CRect rc;
m_Edit.GetWindowRect(&rc);
ScreenToClient(&rc);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
m_Edit.MoveWindow(0, 0, cx, cy, TRUE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
m_Edit.MoveWindow(0, 0, cx, cy, TRUE);
}

View File

@@ -3,10 +3,11 @@
#include "afxwin.h"
// <20><><EFBFBD>۹<EFBFBD><DBB9><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ĩβ
class CAutoEndEdit : public CEdit {
class CAutoEndEdit : public CEdit
{
public:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
DECLARE_MESSAGE_MAP()
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
DECLARE_MESSAGE_MAP()
};
@@ -14,30 +15,30 @@ public:
class CShellDlg : public DialogBase
{
DECLARE_DYNAMIC(CShellDlg)
DECLARE_DYNAMIC(CShellDlg)
public:
CShellDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
virtual ~CShellDlg();
CShellDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
virtual ~CShellDlg();
VOID OnReceiveComplete();
VOID OnReceiveComplete();
UINT m_nReceiveLength;
VOID AddKeyBoardData(void);
int m_nCurSel; //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>;
UINT m_nReceiveLength;
VOID AddKeyBoardData(void);
int m_nCurSel; //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>;
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SHELL };
enum { IDD = IDD_DIALOG_SHELL };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnClose();
CAutoEndEdit m_Edit;
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnSize(UINT nType, int cx, int cy);
virtual BOOL OnInitDialog();
afx_msg void OnClose();
CAutoEndEdit m_Edit;
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnSize(UINT nType, int cx, int cy);
};

View File

@@ -10,7 +10,7 @@ int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
CSortListCtrl* This = (CSortListCtrl*)lParamSort;
CString item1 = This->GetItemText(lParam1, This->m_nSortedCol);
CString item2 = This->GetItemText(lParam2, This->m_nSortedCol);
int asc = This->m_bAsc ? 1 : -1;
int asc = This->m_bAsc ? 1 : -1;
int ret = item1.Compare(item2);
return ret * asc;
}

View File

@@ -5,9 +5,9 @@
class CSortListCtrl : public CListCtrl
{
public:
CSortListCtrl(void) : m_bAsc(false), m_nSortedCol(0){}
CSortListCtrl(void) : m_bAsc(false), m_nSortedCol(0) {}
~CSortListCtrl(void){}
~CSortListCtrl(void) {}
// 是否为升序
bool m_bAsc;

View File

@@ -9,21 +9,21 @@
// CSystemDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
typedef struct ItemData
{
DWORD ID;
CString Data[3];
CString GetData(int index)const {
return Data[index];
}
}ItemData;
typedef struct ItemData {
DWORD ID;
CString Data[3];
CString GetData(int index)const
{
return Data[index];
}
} ItemData;
IMPLEMENT_DYNAMIC(CSystemDlg, CDialog)
CSystemDlg::CSystemDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
CSystemDlg::CSystemDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
{
m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0);
m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0);
}
CSystemDlg::~CSystemDlg()
@@ -32,24 +32,24 @@ CSystemDlg::~CSystemDlg()
void CSystemDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_SYSTEM, m_ControlList);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_SYSTEM, m_ControlList);
}
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)
ON_COMMAND(ID_PLIST_REFRESH, &CSystemDlg::OnPlistRefresh)
ON_COMMAND(ID_WLIST_REFRESH, &CSystemDlg::OnWlistRefresh)
ON_COMMAND(ID_WLIST_CLOSE, &CSystemDlg::OnWlistClose)
ON_COMMAND(ID_WLIST_HIDE, &CSystemDlg::OnWlistHide)
ON_COMMAND(ID_WLIST_RECOVER, &CSystemDlg::OnWlistRecover)
ON_COMMAND(ID_WLIST_MAX, &CSystemDlg::OnWlistMax)
ON_COMMAND(ID_WLIST_MIN, &CSystemDlg::OnWlistMin)
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)
ON_COMMAND(ID_PLIST_REFRESH, &CSystemDlg::OnPlistRefresh)
ON_COMMAND(ID_WLIST_REFRESH, &CSystemDlg::OnWlistRefresh)
ON_COMMAND(ID_WLIST_CLOSE, &CSystemDlg::OnWlistClose)
ON_COMMAND(ID_WLIST_HIDE, &CSystemDlg::OnWlistHide)
ON_COMMAND(ID_WLIST_RECOVER, &CSystemDlg::OnWlistRecover)
ON_COMMAND(ID_WLIST_MAX, &CSystemDlg::OnWlistMax)
ON_COMMAND(ID_WLIST_MIN, &CSystemDlg::OnWlistMin)
END_MESSAGE_MAP()
@@ -58,416 +58,399 @@ END_MESSAGE_MAP()
BOOL CSystemDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
CString str;
m_bHow==TOKEN_PSLIST
? str.Format("%s - <20><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>", m_IPAddress)
:str.Format("%s - <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>", m_IPAddress);
SetWindowText(str);//<2F><><EFBFBD>öԻ<C3B6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
CString str;
m_bHow==TOKEN_PSLIST
? str.Format("%s - <20><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>", m_IPAddress)
:str.Format("%s - <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>", m_IPAddress);
SetWindowText(str);//<2F><><EFBFBD>öԻ<C3B6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT);
if (m_bHow==TOKEN_PSLIST) //<2F><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
{
m_ControlList.InsertColumn(0, "ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 180);
m_ControlList.InsertColumn(1, "PID", LVCFMT_LEFT, 70);
m_ControlList.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>", LVCFMT_LEFT, 320);
ShowProcessList(); //<2F><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><D4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>\0\0
}else if (m_bHow==TOKEN_WSLIST)//<EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
{
//<2F><>ʼ<EFBFBD><CABC> <20><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_ControlList.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 80);
m_ControlList.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 420);
m_ControlList.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬", LVCFMT_LEFT, 200);
ShowWindowsList();
}
m_ControlList.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT);
if (m_bHow==TOKEN_PSLIST) { //<2F><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
m_ControlList.InsertColumn(0, "ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 180);
m_ControlList.InsertColumn(1, "PID", LVCFMT_LEFT, 70);
m_ControlList.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>", LVCFMT_LEFT, 320);
ShowProcessList(); //<2F><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\0\0
} else if (m_bHow==TOKEN_WSLIST) { //<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
//<2F><>ʼ<EFBFBD><CABC> <EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_ControlList.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 80);
m_ControlList.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 420);
m_ControlList.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬", LVCFMT_LEFT, 200);
ShowWindowsList();
}
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CSystemDlg::ShowWindowsList(void)
{
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
char *szBuffer = tmp.c_str();
DWORD dwOffset = 0;
char *szTitle = NULL;
bool isDel=false;
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
char *szBuffer = tmp.c_str();
DWORD dwOffset = 0;
char *szTitle = NULL;
bool isDel=false;
DeleteAllItems();
CString str;
int i ;
for ( i = 0; dwOffset <m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i)
{
LPDWORD lpPID = LPDWORD(szBuffer + dwOffset); //<2F><><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
szTitle = (char *)szBuffer + dwOffset + sizeof(DWORD); //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
str.Format("%5u", *lpPID);
m_ControlList.InsertItem(i, str);
m_ControlList.SetItemText(i, 1, szTitle);
m_ControlList.SetItemText(i, 2, "<EFBFBD><EFBFBD>ʾ"); //(d) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʾΪ "<22><>ʾ"
// ItemData Ϊ<><CEAA><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
auto data = new ItemData{ *lpPID, {str, szTitle,"<EFBFBD><EFBFBD>ʾ"} };
m_ControlList.SetItemData(i, (DWORD_PTR)data); //(d)
dwOffset += sizeof(DWORD) + lstrlen(szTitle) + 1;
}
str.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>%d<><64>", i); //<2F>޸<EFBFBD>CtrlList
LVCOLUMN lvc;
lvc.mask = LVCF_TEXT;
lvc.pszText = str.GetBuffer(0);
lvc.cchTextMax = str.GetLength();
m_ControlList.SetColumn(1, &lvc);
DeleteAllItems();
CString str;
int i ;
for ( i = 0; dwOffset <m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i) {
LPDWORD lpPID = LPDWORD(szBuffer + dwOffset); //<2F><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
szTitle = (char *)szBuffer + dwOffset + sizeof(DWORD); //<2F><><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>
str.Format("%5u", *lpPID);
m_ControlList.InsertItem(i, str);
m_ControlList.SetItemText(i, 1, szTitle);
m_ControlList.SetItemText(i, 2, "<EFBFBD><EFBFBD>ʾ"); //(d) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʾΪ "<22><>ʾ"
// ItemData Ϊ<><CEAA><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
auto data = new ItemData{ *lpPID, {str, szTitle,"<EFBFBD><EFBFBD>ʾ"} };
m_ControlList.SetItemData(i, (DWORD_PTR)data); //(d)
dwOffset += sizeof(DWORD) + lstrlen(szTitle) + 1;
}
str.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>%d<><64>", i); //<2F>޸<EFBFBD>CtrlList
LVCOLUMN lvc;
lvc.mask = LVCF_TEXT;
lvc.pszText = str.GetBuffer(0);
lvc.cchTextMax = str.GetLength();
m_ControlList.SetColumn(1, &lvc);
}
void CSystemDlg::ShowProcessList(void)
{
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
char *szBuffer = tmp.c_str(); //xiaoxi[][][][][]
char *szExeFile;
char *szProcessFullPath;
DWORD dwOffset = 0;
CString str;
DeleteAllItems();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9> Id+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+0+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+0
int i;
for (i = 0; dwOffset < m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i)
{
LPDWORD PID = LPDWORD(szBuffer + dwOffset); //<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
szExeFile = szBuffer + dwOffset + sizeof(DWORD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szProcessFullPath = szExeFile + lstrlen(szExeFile) + 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(1);
char *szBuffer = tmp.c_str(); //xiaoxi[][][][][]
char *szExeFile;
char *szProcessFullPath;
DWORD dwOffset = 0;
CString str;
DeleteAllItems();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9> Id+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+0+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+0
int i;
for (i = 0; dwOffset < m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; ++i) {
LPDWORD PID = LPDWORD(szBuffer + dwOffset); //<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ID
szExeFile = szBuffer + dwOffset + sizeof(DWORD); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szProcessFullPath = szExeFile + lstrlen(szExeFile) + 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList.InsertItem(i, szExeFile); //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
str.Format("%5u", *PID);
m_ControlList.SetItemText(i, 1, str);
m_ControlList.SetItemText(i, 2, szProcessFullPath);
// ItemData Ϊ<><CEAA><EFBFBD><EFBFBD>ID
auto data = new ItemData{ *PID, {szExeFile, str, szProcessFullPath} };
m_ControlList.SetItemData(i, DWORD_PTR(data));
m_ControlList.InsertItem(i, szExeFile); //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
str.Format("%5u", *PID);
m_ControlList.SetItemText(i, 1, str);
m_ControlList.SetItemText(i, 2, szProcessFullPath);
// ItemData Ϊ<><CEAA><EFBFBD><EFBFBD>ID
auto data = new ItemData{ *PID, {szExeFile, str, szProcessFullPath} };
m_ControlList.SetItemData(i, DWORD_PTR(data));
dwOffset += sizeof(DWORD) + lstrlen(szExeFile) + lstrlen(szProcessFullPath) + 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѭ<EFBFBD><D1AD>
}
dwOffset += sizeof(DWORD) + lstrlen(szExeFile) + lstrlen(szProcessFullPath) + 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѭ<EFBFBD><D1AD>
}
str.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / %d", i);
LVCOLUMN lvc;
lvc.mask = LVCF_TEXT;
lvc.pszText = str.GetBuffer(0);
lvc.cchTextMax = str.GetLength();
m_ControlList.SetColumn(2, &lvc); //<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD>
str.Format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / %d", i);
LVCOLUMN lvc;
lvc.mask = LVCF_TEXT;
lvc.pszText = str.GetBuffer(0);
lvc.cchTextMax = str.GetLength();
m_ControlList.SetColumn(2, &lvc); //<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD>
}
void CSystemDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DeleteAllItems();
DialogBase::OnClose();
DeleteAllItems();
DialogBase::OnClose();
}
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CSystemDlg::DeleteAllItems() {
for (int i = 0; i < m_ControlList.GetItemCount(); i++)
{
auto data = (ItemData*)m_ControlList.GetItemData(i);
if (NULL != data) {
delete data;
}
}
m_ControlList.DeleteAllItems();
void CSystemDlg::DeleteAllItems()
{
for (int i = 0; i < m_ControlList.GetItemCount(); i++) {
auto data = (ItemData*)m_ControlList.GetItemData(i);
if (NULL != data) {
delete data;
}
}
m_ControlList.DeleteAllItems();
}
int CALLBACK CSystemDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
int nColumn = pSortInfo->first;
bool bAscending = pSortInfo->second;
int CALLBACK CSystemDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
int nColumn = pSortInfo->first;
bool bAscending = pSortInfo->second;
// <20><>ȡ<EFBFBD><C8A1>ֵ
ItemData* context1 = (ItemData*)lParam1;
ItemData* context2 = (ItemData*)lParam2;
CString s1 = context1->GetData(nColumn);
CString s2 = context2->GetData(nColumn);
// <20><>ȡ<EFBFBD><C8A1>ֵ
ItemData* context1 = (ItemData*)lParam1;
ItemData* context2 = (ItemData*)lParam2;
CString s1 = context1->GetData(nColumn);
CString s2 = context2->GetData(nColumn);
int result = s1.Compare(s2);
return bAscending ? result : -result;
int result = s1.Compare(s2);
return bAscending ? result : -result;
}
void CSystemDlg::SortByColumn(int nColumn) {
static int m_nSortColumn = 0;
static bool m_bSortAscending = false;
if (nColumn == m_nSortColumn) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>У<EFBFBD><D0A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
m_bSortAscending = !m_bSortAscending;
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
m_nSortColumn = nColumn;
m_bSortAscending = true;
}
void CSystemDlg::SortByColumn(int nColumn)
{
static int m_nSortColumn = 0;
static bool m_bSortAscending = false;
if (nColumn == m_nSortColumn) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>У<EFBFBD><D0A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
m_bSortAscending = !m_bSortAscending;
} else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
m_nSortColumn = nColumn;
m_bSortAscending = true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::pair<int, bool> sortInfo(m_nSortColumn, m_bSortAscending);
m_ControlList.SortItems(CompareFunction, reinterpret_cast<LPARAM>(&sortInfo));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
std::pair<int, bool> sortInfo(m_nSortColumn, m_bSortAscending);
m_ControlList.SortItems(CompareFunction, reinterpret_cast<LPARAM>(&sortInfo));
}
void CSystemDlg::OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult) {
LPNMHEADER pNMHeader = reinterpret_cast<LPNMHEADER>(pNMHDR);
int nColumn = pNMHeader->iItem; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SortByColumn(nColumn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*pResult = 0;
void CSystemDlg::OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMHEADER pNMHeader = reinterpret_cast<LPNMHEADER>(pNMHDR);
int nColumn = pNMHeader->iItem; // <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SortByColumn(nColumn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*pResult = 0;
}
void CSystemDlg::OnNMRClickListSystem(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CMenu Menu;
if (m_bHow==TOKEN_PSLIST) //<2F><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
{
Menu.LoadMenu(IDR_PROCESS_LIST);
}else if (m_bHow==TOKEN_WSLIST)
{
Menu.LoadMenu(IDR_WINDOW_LIST);
}
CMenu* SubMenu = Menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CMenu Menu;
if (m_bHow==TOKEN_PSLIST) { //<2F><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
Menu.LoadMenu(IDR_PROCESS_LIST);
} else if (m_bHow==TOKEN_WSLIST) {
Menu.LoadMenu(IDR_WINDOW_LIST);
}
CMenu* SubMenu = Menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
*pResult = 0;
*pResult = 0;
}
void CSystemDlg::OnPlistKill()
{
CListCtrl *ListCtrl = NULL;
if (m_ControlList.IsWindowVisible())
ListCtrl = &m_ControlList;
else
return;
CListCtrl *ListCtrl = NULL;
if (m_ControlList.IsWindowVisible())
ListCtrl = &m_ControlList;
else
return;
//[KILL][ID][ID][iD][ID]
//<2F><><EFBFBD><EFBFBD><E4BBBA><EFBFBD><EFBFBD>
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1 + (ListCtrl->GetSelectedCount() * 4));//1.exe 4 ID Handle
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>ͷ
szBuffer[0] = COMMAND_KILLPROCESS;
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
char *szTips = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ֹ<EFBFBD><D6B9><EFBFBD>̻ᵼ<CCBB>²<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>\n"
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ʧ<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>ֹǰ<EFBFBD><EFBFBD>\n"
"<EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD>û<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>";
CString str;
if (ListCtrl->GetSelectedCount() > 1)
{
str.Format("%sȷʵ\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?", szTips, ListCtrl->GetSelectedCount());
}
else
{
str.Format("%sȷʵ\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?", szTips);
}
if (::MessageBox(m_hWnd, str, "<EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_YESNO | MB_ICONQUESTION) == IDNO) {
LocalFree(szBuffer);
return;
}
//[KILL][ID][ID][iD][ID]
//<2F><><EFBFBD><EFBFBD><E4BBBA><EFBFBD><EFBFBD>
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1 + (ListCtrl->GetSelectedCount() * 4));//1.exe 4 ID Handle
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>ͷ
szBuffer[0] = COMMAND_KILLPROCESS;
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
char *szTips = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ֹ<EFBFBD><D6B9><EFBFBD>̻ᵼ<CCBB>²<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>\n"
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ʧ<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>ֹǰ<EFBFBD><EFBFBD>\n"
"<EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD>û<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>";
CString str;
if (ListCtrl->GetSelectedCount() > 1) {
str.Format("%sȷʵ\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?", szTips, ListCtrl->GetSelectedCount());
} else {
str.Format("%sȷʵ\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?", szTips);
}
if (::MessageBox(m_hWnd, str, "<EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_YESNO | MB_ICONQUESTION) == IDNO) {
LocalFree(szBuffer);
return;
}
DWORD dwOffset = 1;
POSITION Pos = ListCtrl->GetFirstSelectedItemPosition();
//<2F>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
while(Pos)
{
int nItem = ListCtrl->GetNextSelectedItem(Pos);
auto data = (ItemData*)ListCtrl->GetItemData(nItem);
DWORD dwProcessID = data->ID;
memcpy(szBuffer + dwOffset, &dwProcessID, sizeof(DWORD)); //sdkfj101112
dwOffset += sizeof(DWORD);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>в<EFBFBD><D0B2><EFBFBD>COMMAND_KILLPROCESS<53><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
m_ContextObject->Send2Client(szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer);
DWORD dwOffset = 1;
POSITION Pos = ListCtrl->GetFirstSelectedItemPosition();
//<2F>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
while(Pos) {
int nItem = ListCtrl->GetNextSelectedItem(Pos);
auto data = (ItemData*)ListCtrl->GetItemData(nItem);
DWORD dwProcessID = data->ID;
memcpy(szBuffer + dwOffset, &dwProcessID, sizeof(DWORD)); //sdkfj101112
dwOffset += sizeof(DWORD);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>в<EFBFBD><D0B2><EFBFBD>COMMAND_KILLPROCESS<53><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
m_ContextObject->Send2Client(szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer);
Sleep(100);
Sleep(100);
OnPlistRefresh();
OnPlistRefresh();
}
VOID CSystemDlg::OnPlistRefresh()
{
if (m_ControlList.IsWindowVisible())
{
DeleteAllItems();
GetProcessList();
ShowProcessList();
}
if (m_ControlList.IsWindowVisible()) {
DeleteAllItems();
GetProcessList();
ShowProcessList();
}
}
VOID CSystemDlg::GetProcessList(void)
{
BYTE bToken = COMMAND_PSLIST;
m_ContextObject->Send2Client(&bToken, 1);
BYTE bToken = COMMAND_PSLIST;
m_ContextObject->Send2Client(&bToken, 1);
}
void CSystemDlg::OnWlistRefresh()
{
GetWindowsList();
GetWindowsList();
}
void CSystemDlg::GetWindowsList(void)
{
BYTE bToken = COMMAND_WSLIST;
m_ContextObject->Send2Client(&bToken, 1);
BYTE bToken = COMMAND_WSLIST;
m_ContextObject->Send2Client(&bToken, 1);
}
void CSystemDlg::OnReceiveComplete(void)
{
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
{
case TOKEN_PSLIST:
{
ShowProcessList();
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0)) {
case TOKEN_PSLIST: {
ShowProcessList();
break;
}
case TOKEN_WSLIST:
{
ShowWindowsList();
break;
}
break;
}
case TOKEN_WSLIST: {
ShowWindowsList();
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
}
void CSystemDlg::OnWlistClose()
{
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0)
{
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0) {
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_CLOSE; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ͷ
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> 4 djfkdfj dkfjf 4
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //1 4
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_CLOSE; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ͷ
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> 4 djfkdfj dkfjf 4
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //1 4
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
}
}
void CSystemDlg::OnWlistHide()
{
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_TEST; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵľ<EFBFBD><EFBFBD><EFBFBD>һͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"); //ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʾ״̬Ϊ"<22><><EFBFBD><EFBFBD>"
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ŀʱ<C4BF>Ͳ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD>ᶪʧ <20><><EFBFBD><EFBFBD>ԶҲ<D4B6><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //<2F>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵľ<EFBFBD><EFBFBD><EFBFBD>һͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0) {
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]=CMD_WINDOW_TEST; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD>
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"); //ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ʾ״̬Ϊ"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD>Ŀʱ<EFBFBD>Ͳ<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD>ᶪʧ <20><><EFBFBD><EFBFBD>ԶҲ<D4B6><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD>
DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
}
void CSystemDlg::OnWlistRecover()
{
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_NORMAL;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0) {
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_NORMAL;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
}
void CSystemDlg::OnWlistMax()
{
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_MAXIMIZE;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0) {
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_MAXIMIZE;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
}
void CSystemDlg::OnWlistMin()
{
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
BYTE lpMsgBuf[20];
CListCtrl *pListCtrl = NULL;
pListCtrl = &m_ControlList;
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0)
{
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_MINIMIZE;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
int nItem = pListCtrl->GetSelectionMark();
if (nItem>=0) {
ZeroMemory(lpMsgBuf,20);
lpMsgBuf[0]= CMD_WINDOW_TEST;
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID;
pListCtrl->SetItemText(nItem,2,"<EFBFBD><EFBFBD>ʾ");
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_MINIMIZE;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_ContextObject->Send2Client(lpMsgBuf, sizeof(lpMsgBuf));
}
}
void CSystemDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CDialog::OnSize(nType, cx, cy);
if (!m_ControlList.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
if (!m_ControlList.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
CRect rc;
m_ControlList.GetWindowRect(&rc);
ScreenToClient(&rc);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
CRect rc;
m_ControlList.GetWindowRect(&rc);
ScreenToClient(&rc);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
m_ControlList.MoveWindow(0, 0, cx, cy, TRUE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
m_ControlList.MoveWindow(0, 0, cx, cy, TRUE);
}

View File

@@ -6,43 +6,43 @@
class CSystemDlg : public DialogBase
{
DECLARE_DYNAMIC(CSystemDlg)
DECLARE_DYNAMIC(CSystemDlg)
public:
CSystemDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
virtual ~CSystemDlg();
CSystemDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
virtual ~CSystemDlg();
VOID GetProcessList(void);
VOID ShowProcessList(void);
void ShowWindowsList(void);
void GetWindowsList(void);
void OnReceiveComplete(void);
BOOL m_bHow;
VOID GetProcessList(void);
VOID ShowProcessList(void);
void ShowWindowsList(void);
void GetWindowsList(void);
void OnReceiveComplete(void);
BOOL m_bHow;
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_SYSTEM };
enum { IDD = IDD_DIALOG_SYSTEM };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CListCtrl m_ControlList;
virtual BOOL OnInitDialog();
CListCtrl m_ControlList;
virtual BOOL OnInitDialog();
void DeleteAllItems();
void SortByColumn(int nColumn);
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
void DeleteAllItems();
void SortByColumn(int nColumn);
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
afx_msg void OnClose();
afx_msg void OnNMRClickListSystem(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnPlistKill();
afx_msg void OnPlistRefresh();
afx_msg void OnWlistRefresh();
afx_msg void OnWlistClose();
afx_msg void OnWlistHide();
afx_msg void OnWlistRecover();
afx_msg void OnWlistMax();
afx_msg void OnWlistMin();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnClose();
afx_msg void OnNMRClickListSystem(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnPlistKill();
afx_msg void OnPlistRefresh();
afx_msg void OnWlistRefresh();
afx_msg void OnWlistClose();
afx_msg void OnWlistHide();
afx_msg void OnWlistRecover();
afx_msg void OnWlistMax();
afx_msg void OnWlistMin();
afx_msg void OnSize(UINT nType, int cx, int cy);
};

View File

@@ -11,7 +11,7 @@
IMPLEMENT_DYNAMIC(CTalkDlg, CDialog)
CTalkDlg::CTalkDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME)
: DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME)
{
}
@@ -21,15 +21,15 @@ CTalkDlg::~CTalkDlg()
void CTalkDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk);
m_EditTalk.SetLimitText(TALK_DLG_MAXLEN);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk);
m_EditTalk.SetLimitText(TALK_DLG_MAXLEN);
}
BEGIN_MESSAGE_MAP(CTalkDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON_TALK, &CTalkDlg::OnBnClickedButtonTalk)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON_TALK, &CTalkDlg::OnBnClickedButtonTalk)
ON_WM_CLOSE()
END_MESSAGE_MAP()
@@ -38,66 +38,63 @@ END_MESSAGE_MAP()
BOOL CTalkDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog::OnInitDialog();
SetIcon(m_hIcon, FALSE);
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
SetIcon(m_hIcon, FALSE);
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CTalkDlg::OnBnClickedButtonTalk()
{
int iLength = m_EditTalk.GetWindowTextLength();
int iLength = m_EditTalk.GetWindowTextLength();
if (!iLength)
{
return;
}
if (!iLength) {
return;
}
CString strData;
m_EditTalk.GetWindowText(strData);
CString strData;
m_EditTalk.GetWindowText(strData);
char szBuffer[4096] = {0};
strcpy(szBuffer,strData.GetBuffer(0));
char szBuffer[4096] = {0};
strcpy(szBuffer,strData.GetBuffer(0));
m_EditTalk.SetWindowText(NULL);
m_EditTalk.SetWindowText(NULL);
m_ContextObject->Send2Client((LPBYTE)szBuffer, strlen(szBuffer));
m_ContextObject->Send2Client((LPBYTE)szBuffer, strlen(szBuffer));
}
BOOL CTalkDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
// <20><><EFBFBD><EFBFBD>VK_ESCAPE<50><45>VK_DELETE
if (pMsg->wParam == VK_ESCAPE)
return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǿɱ༭<C9B1><E0BCAD><EFBFBD>Ļس<C4BB><D8B3><EFBFBD>
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_EditTalk.m_hWnd)
{
OnBnClickedButtonTalk();
if (pMsg->message == WM_KEYDOWN) {
// <20><><EFBFBD><EFBFBD>VK_ESCAPE<50><45>VK_DELETE
if (pMsg->wParam == VK_ESCAPE)
return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǿɱ༭<C9B1><E0BCAD><EFBFBD>Ļس<C4BB><D8B3><EFBFBD>
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_EditTalk.m_hWnd) {
OnBnClickedButtonTalk();
return TRUE;
}
}
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
void CTalkDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DialogBase::OnClose();
DialogBase::OnClose();
}

View File

@@ -6,26 +6,27 @@
class CTalkDlg : public DialogBase
{
DECLARE_DYNAMIC(CTalkDlg)
DECLARE_DYNAMIC(CTalkDlg)
public:
CTalkDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CTalkDlg();
CTalkDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CTalkDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_TALK };
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_TALK };
void OnReceiveComplete(void){
}
void OnReceiveComplete(void)
{
}
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
CEdit m_EditTalk;
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedButtonTalk();
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnClose();
CEdit m_EditTalk;
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedButtonTalk();
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnClose();
};

View File

@@ -29,7 +29,7 @@ static char THIS_FILE[] = __FILE__;
CTrueColorToolBar::CTrueColorToolBar()
{
m_bDropDown = FALSE;
m_bDropDown = FALSE;
}
CTrueColorToolBar::~CTrueColorToolBar()
@@ -38,103 +38,103 @@ CTrueColorToolBar::~CTrueColorToolBar()
BEGIN_MESSAGE_MAP(CTrueColorToolBar, CToolBar)
//{{AFX_MSG_MAP(CTrueColorToolBar)
ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)
//}}AFX_MSG_MAP
//{{AFX_MSG_MAP(CTrueColorToolBar)
ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTrueColorToolBar message handlers
BOOL CTrueColorToolBar::LoadTrueColorToolBar(int nBtnWidth,
UINT uToolBar,
UINT uToolBarHot,
UINT uToolBarDisabled)
UINT uToolBar,
UINT uToolBarHot,
UINT uToolBarDisabled)
{
if (!SetTrueColorToolBar(TB_SETIMAGELIST, uToolBar, nBtnWidth))
return FALSE;
if (uToolBarHot) {
if (!SetTrueColorToolBar(TB_SETHOTIMAGELIST, uToolBarHot, nBtnWidth))
return FALSE;
}
if (!SetTrueColorToolBar(TB_SETIMAGELIST, uToolBar, nBtnWidth))
return FALSE;
if (uToolBarDisabled) {
if (!SetTrueColorToolBar(TB_SETDISABLEDIMAGELIST, uToolBarDisabled, nBtnWidth))
return FALSE;
}
if (uToolBarHot) {
if (!SetTrueColorToolBar(TB_SETHOTIMAGELIST, uToolBarHot, nBtnWidth))
return FALSE;
}
return TRUE;
if (uToolBarDisabled) {
if (!SetTrueColorToolBar(TB_SETDISABLEDIMAGELIST, uToolBarDisabled, nBtnWidth))
return FALSE;
}
return TRUE;
}
BOOL CTrueColorToolBar::SetTrueColorToolBar(UINT uToolBarType,
UINT uToolBar,
int nBtnWidth)
BOOL CTrueColorToolBar::SetTrueColorToolBar(UINT uToolBarType,
UINT uToolBar,
int nBtnWidth)
{
CImageList cImageList;
CBitmap cBitmap;
BITMAP bmBitmap;
if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(uToolBar),
IMAGE_BITMAP, 0, 0,
LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
!cBitmap.GetBitmap(&bmBitmap))
return FALSE;
CImageList cImageList;
CBitmap cBitmap;
BITMAP bmBitmap;
CSize cSize(bmBitmap.bmWidth, bmBitmap.bmHeight);
int nNbBtn = cSize.cx/nBtnWidth;
RGBTRIPLE* rgb = (RGBTRIPLE*)(bmBitmap.bmBits);
COLORREF rgbMask = RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);
if (!cImageList.Create(nBtnWidth, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 0))
return FALSE;
if (cImageList.Add(&cBitmap, rgbMask) == -1)
return FALSE;
if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(uToolBar),
IMAGE_BITMAP, 0, 0,
LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
!cBitmap.GetBitmap(&bmBitmap))
return FALSE;
SendMessage(uToolBarType, 0, (LPARAM)cImageList.m_hImageList);
cImageList.Detach();
cBitmap.Detach();
return TRUE;
CSize cSize(bmBitmap.bmWidth, bmBitmap.bmHeight);
int nNbBtn = cSize.cx/nBtnWidth;
RGBTRIPLE* rgb = (RGBTRIPLE*)(bmBitmap.bmBits);
COLORREF rgbMask = RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue);
if (!cImageList.Create(nBtnWidth, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 0))
return FALSE;
if (cImageList.Add(&cBitmap, rgbMask) == -1)
return FALSE;
SendMessage(uToolBarType, 0, (LPARAM)cImageList.m_hImageList);
cImageList.Detach();
cBitmap.Detach();
return TRUE;
}
void CTrueColorToolBar::AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID)
{
if (!m_bDropDown) {
GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);
m_bDropDown = TRUE;
}
if (!m_bDropDown) {
GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);
m_bDropDown = TRUE;
}
SetButtonStyle(CommandToIndex(uButtonID), TBSTYLE_DROPDOWN);
SetButtonStyle(CommandToIndex(uButtonID), TBSTYLE_DROPDOWN);
stDropDownInfo DropDownInfo;
DropDownInfo.pParent = pParent;
DropDownInfo.uButtonID = uButtonID;
DropDownInfo.uMenuID = uMenuID;
m_lstDropDownButton.Add(DropDownInfo);
stDropDownInfo DropDownInfo;
DropDownInfo.pParent = pParent;
DropDownInfo.uButtonID = uButtonID;
DropDownInfo.uMenuID = uMenuID;
m_lstDropDownButton.Add(DropDownInfo);
}
void CTrueColorToolBar::OnToolbarDropDown(NMHDR* pnmh, LRESULT *plr)
{
NMTOOLBARA * pnmtb=(NMTOOLBARA *)pnmh;
for (int i = 0; i < m_lstDropDownButton.GetSize(); ++i) {
stDropDownInfo DropDownInfo = m_lstDropDownButton.GetAt(i);
NMTOOLBARA * pnmtb=(NMTOOLBARA *)pnmh;
for (int i = 0; i < m_lstDropDownButton.GetSize(); ++i) {
if (DropDownInfo.uButtonID == UINT(pnmtb->iItem)) {
stDropDownInfo DropDownInfo = m_lstDropDownButton.GetAt(i);
CMenu menu;
menu.LoadMenu(DropDownInfo.uMenuID);
CMenu* pPopup = menu.GetSubMenu(0);
CRect rc;
SendMessage(TB_GETRECT, (WPARAM)pnmtb->iItem, (LPARAM)&rc);
ClientToScreen(&rc);
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
rc.left, rc.bottom, DropDownInfo.pParent, &rc);
break;
}
}
if (DropDownInfo.uButtonID == UINT(pnmtb->iItem)) {
CMenu menu;
menu.LoadMenu(DropDownInfo.uMenuID);
CMenu* pPopup = menu.GetSubMenu(0);
CRect rc;
SendMessage(TB_GETRECT, (WPARAM)pnmtb->iItem, (LPARAM)&rc);
ClientToScreen(&rc);
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,
rc.left, rc.bottom, DropDownInfo.pParent, &rc);
break;
}
}
}

View File

@@ -33,51 +33,51 @@ class CTrueColorToolBar : public CToolBar
{
// Construction
public:
CTrueColorToolBar();
CTrueColorToolBar();
// Attributes
private:
BOOL m_bDropDown;
BOOL m_bDropDown;
struct stDropDownInfo {
public:
UINT uButtonID;
UINT uMenuID;
CWnd* pParent;
};
CArray <stDropDownInfo, stDropDownInfo&> m_lstDropDownButton;
struct stDropDownInfo {
public:
UINT uButtonID;
UINT uMenuID;
CWnd* pParent;
};
CArray <stDropDownInfo, stDropDownInfo&> m_lstDropDownButton;
// Operations
public:
BOOL LoadTrueColorToolBar(int nBtnWidth,
UINT uToolBar,
UINT uToolBarHot = 0,
UINT uToolBarDisabled = 0);
BOOL LoadTrueColorToolBar(int nBtnWidth,
UINT uToolBar,
UINT uToolBarHot = 0,
UINT uToolBarDisabled = 0);
void AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID);
void AddDropDownButton(CWnd* pParent, UINT uButtonID, UINT uMenuID);
private:
BOOL SetTrueColorToolBar(UINT uToolBarType,
UINT uToolBar,
int nBtnWidth);
BOOL SetTrueColorToolBar(UINT uToolBarType,
UINT uToolBar,
int nBtnWidth);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTrueColorToolBar)
//}}AFX_VIRTUAL
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTrueColorToolBar)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CTrueColorToolBar();
virtual ~CTrueColorToolBar();
// Generated message map functions
// Generated message map functions
protected:
//{{AFX_MSG(CTrueColorToolBar)
afx_msg void OnToolbarDropDown(NMHDR* pnmh, LRESULT* plRes);
//}}AFX_MSG
//{{AFX_MSG(CTrueColorToolBar)
afx_msg void OnToolbarDropDown(NMHDR* pnmh, LRESULT* plRes);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////

View File

@@ -7,10 +7,9 @@
#include "afxdialogex.h"
enum
{
IDM_ENABLECOMPRESS = 0x0010, // <20><>Ƶѹ<EFBFBD><EFBFBD>
IDM_SAVEAVI, // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
enum {
IDM_ENABLECOMPRESS = 0x0010, // <20><>Ƶѹ<C6B5><D1B9>
IDM_SAVEAVI, // <20><><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>
};
// CVideoDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
@@ -20,166 +19,154 @@ AVISTREAMINFO CBmpToAvi::m_si;
CBmpToAvi::CBmpToAvi()
{
m_pfile = NULL;
m_pavi = NULL;
AVIFileInit();
m_pfile = NULL;
m_pavi = NULL;
AVIFileInit();
}
CBmpToAvi::~CBmpToAvi()
{
AVIFileExit();
AVIFileExit();
}
bool CBmpToAvi::Open( LPCTSTR szFile, LPBITMAPINFO lpbmi )
{
if (szFile == NULL)
return false;
m_nFrames = 0;
if (szFile == NULL)
return false;
m_nFrames = 0;
if (AVIFileOpen(&m_pfile, szFile, OF_WRITE | OF_CREATE, NULL))
return false;
if (AVIFileOpen(&m_pfile, szFile, OF_WRITE | OF_CREATE, NULL))
return false;
m_si.fccType = streamtypeVIDEO;
m_si.fccHandler = BI_RGB;
m_si.dwScale = 1;
m_si.dwRate = 8; // ֡<><D6A1>
SetRect(&m_si.rcFrame, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);
m_si.dwSuggestedBufferSize = lpbmi->bmiHeader.biSizeImage;
m_si.fccType = streamtypeVIDEO;
m_si.fccHandler = BI_RGB;
m_si.dwScale = 1;
m_si.dwRate = 8; // ֡<><D6A1>
SetRect(&m_si.rcFrame, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);
m_si.dwSuggestedBufferSize = lpbmi->bmiHeader.biSizeImage;
if (AVIFileCreateStream(m_pfile, &m_pavi, &m_si))
return false;
if (AVIFileCreateStream(m_pfile, &m_pavi, &m_si))
return false;
if (AVIStreamSetFormat(m_pavi, 0, lpbmi, sizeof(BITMAPINFO)) != AVIERR_OK)
return false;
if (AVIStreamSetFormat(m_pavi, 0, lpbmi, sizeof(BITMAPINFO)) != AVIERR_OK)
return false;
return true;
return true;
}
bool CBmpToAvi::Write(LPVOID lpBuffer)
{
if (m_pfile == NULL || m_pavi == NULL)
return false;
if (m_pfile == NULL || m_pavi == NULL)
return false;
return AVIStreamWrite(m_pavi, m_nFrames++, 1, lpBuffer, m_si.dwSuggestedBufferSize, AVIIF_KEYFRAME, NULL, NULL) == AVIERR_OK;
return AVIStreamWrite(m_pavi, m_nFrames++, 1, lpBuffer, m_si.dwSuggestedBufferSize, AVIIF_KEYFRAME, NULL, NULL) == AVIERR_OK;
}
void CBmpToAvi::Close()
{
if (m_pavi)
{
AVIStreamRelease(m_pavi);
m_pavi = NULL;
}
if (m_pfile)
{
AVIFileRelease(m_pfile);
m_pfile = NULL;
}
if (m_pavi) {
AVIStreamRelease(m_pavi);
m_pavi = NULL;
}
if (m_pfile) {
AVIFileRelease(m_pfile);
m_pfile = NULL;
}
}
void CVideoDlg::SaveAvi(void)
{
CMenu *pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu->GetMenuState(IDM_SAVEAVI, MF_BYCOMMAND) & MF_CHECKED)
{
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_UNCHECKED);
m_aviFile.Empty();
m_aviStream.Close();
return;
}
CMenu *pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu->GetMenuState(IDM_SAVEAVI, MF_BYCOMMAND) & MF_CHECKED) {
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_UNCHECKED);
m_aviFile.Empty();
m_aviStream.Close();
return;
}
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.avi");
CFileDialog dlg(FALSE, "avi", strFileName, OFN_OVERWRITEPROMPT, "<EFBFBD><EFBFBD>Ƶ<EFBFBD>ļ<EFBFBD>(*.avi)|*.avi|", this);
if(dlg.DoModal () != IDOK)
return;
m_aviFile = dlg.GetPathName();
if (!m_aviStream.Open(m_aviFile, m_BitmapInfor_Full))
{
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>:"+m_aviFile, "<EFBFBD><EFBFBD>ʾ");
m_aviFile.Empty();
}
else
{
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_CHECKED);
}
CString strFileName = m_IPAddress + CTime::GetCurrentTime().Format("_%Y-%m-%d_%H-%M-%S.avi");
CFileDialog dlg(FALSE, "avi", strFileName, OFN_OVERWRITEPROMPT, "<EFBFBD><EFBFBD>Ƶ<EFBFBD>ļ<EFBFBD>(*.avi)|*.avi|", this);
if(dlg.DoModal () != IDOK)
return;
m_aviFile = dlg.GetPathName();
if (!m_aviStream.Open(m_aviFile, m_BitmapInfor_Full)) {
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>:"+m_aviFile, "<EFBFBD><EFBFBD>ʾ");
m_aviFile.Empty();
} else {
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_CHECKED);
}
}
CVideoDlg::CVideoDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
{
m_nCount = 0;
m_aviFile.Empty();
m_BitmapInfor_Full = NULL;
m_pVideoCodec = NULL;
m_nCount = 0;
m_aviFile.Empty();
m_BitmapInfor_Full = NULL;
m_pVideoCodec = NULL;
m_BitmapData_Full = NULL;
m_BitmapCompressedData_Full = NULL;
ResetScreen();
m_BitmapData_Full = NULL;
m_BitmapCompressedData_Full = NULL;
ResetScreen();
}
void CVideoDlg::ResetScreen(void)
{
if (m_BitmapInfor_Full)
{
delete m_BitmapInfor_Full;
m_BitmapInfor_Full = NULL;
}
if (m_BitmapInfor_Full) {
delete m_BitmapInfor_Full;
m_BitmapInfor_Full = NULL;
}
int iBitMapInforSize = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1;
m_BitmapInfor_Full = (LPBITMAPINFO) new BYTE[iBitMapInforSize];
m_ContextObject->InDeCompressedBuffer.CopyBuffer(m_BitmapInfor_Full, iBitMapInforSize, 1);
m_BitmapData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
m_BitmapCompressedData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
int iBitMapInforSize = m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1;
m_BitmapInfor_Full = (LPBITMAPINFO) new BYTE[iBitMapInforSize];
m_ContextObject->InDeCompressedBuffer.CopyBuffer(m_BitmapInfor_Full, iBitMapInforSize, 1);
m_BitmapData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
m_BitmapCompressedData_Full = new BYTE[m_BitmapInfor_Full->bmiHeader.biSizeImage];
}
CVideoDlg::~CVideoDlg()
{
if (!m_aviFile.IsEmpty())
{
SaveAvi();
m_aviFile.Empty();
}
if (!m_aviFile.IsEmpty()) {
SaveAvi();
m_aviFile.Empty();
}
if (m_pVideoCodec)
{
delete m_pVideoCodec;
m_pVideoCodec = NULL;
}
if (m_pVideoCodec) {
delete m_pVideoCodec;
m_pVideoCodec = NULL;
}
if (m_BitmapData_Full)
{
delete m_BitmapData_Full;
m_BitmapData_Full = NULL;
}
if (m_BitmapData_Full) {
delete m_BitmapData_Full;
m_BitmapData_Full = NULL;
}
if (m_BitmapInfor_Full)
{
delete m_BitmapInfor_Full;
m_BitmapInfor_Full = NULL;
}
if (m_BitmapInfor_Full) {
delete m_BitmapInfor_Full;
m_BitmapInfor_Full = NULL;
}
if (m_BitmapCompressedData_Full)
{
delete m_BitmapCompressedData_Full;
m_BitmapCompressedData_Full = NULL;
}
if (m_BitmapCompressedData_Full) {
delete m_BitmapCompressedData_Full;
m_BitmapCompressedData_Full = NULL;
}
}
void CVideoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CVideoDlg, CDialog)
ON_WM_CLOSE()
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_CLOSE()
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
END_MESSAGE_MAP()
@@ -188,187 +175,172 @@ END_MESSAGE_MAP()
BOOL CVideoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CDialog::OnInitDialog();
CMenu* SysMenu = GetSystemMenu(FALSE);
if (SysMenu != NULL)
{
m_hDD = DrawDibOpen();
CMenu* SysMenu = GetSystemMenu(FALSE);
if (SysMenu != NULL) {
m_hDD = DrawDibOpen();
m_hDC = ::GetDC(m_hWnd);
SysMenu->AppendMenu(MF_STRING, IDM_ENABLECOMPRESS, "<EFBFBD><EFBFBD>Ƶѹ<EFBFBD><EFBFBD>(&C)");
SysMenu->AppendMenu(MF_STRING, IDM_SAVEAVI, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>(&V)");
SysMenu->AppendMenu(MF_SEPARATOR);
m_hDC = ::GetDC(m_hWnd);
SysMenu->AppendMenu(MF_STRING, IDM_ENABLECOMPRESS, "<EFBFBD><EFBFBD>Ƶѹ<EFBFBD><EFBFBD>(&C)");
SysMenu->AppendMenu(MF_STRING, IDM_SAVEAVI, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>(&V)");
SysMenu->AppendMenu(MF_SEPARATOR);
CString strString;
CString strString;
strString.Format("%s - <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> %d<><64>%d", m_IPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
strString.Format("%s - <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> %d<><64>%d", m_IPAddress, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight);
SetWindowText(strString);
SetWindowText(strString);
BYTE bToken = COMMAND_NEXT;
BYTE bToken = COMMAND_NEXT;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
}
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
return TRUE;
return TRUE;
}
void CVideoDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
if (!m_aviFile.IsEmpty())
{
SaveAvi();
m_aviFile.Empty();
}
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
if (!m_aviFile.IsEmpty()) {
SaveAvi();
m_aviFile.Empty();
}
DialogBase::OnClose();
DialogBase::OnClose();
}
void CVideoDlg::OnReceiveComplete(void)
{
++m_nCount;
++m_nCount;
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0))
{
case TOKEN_WEBCAM_DIB:
{
DrawDIB();//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>һ<EBBFB4><D2BB>
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
switch (m_ContextObject->InDeCompressedBuffer.GetBYTE(0)) {
case TOKEN_WEBCAM_DIB: {
DrawDIB();//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>һ<EBBFB4><D2BB>
break;
}
default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break;
}
}
void CVideoDlg::DrawDIB(void)
{
CMenu* SysMenu = GetSystemMenu(FALSE);
if (SysMenu == NULL)
return;
CMenu* SysMenu = GetSystemMenu(FALSE);
if (SysMenu == NULL)
return;
const int nHeadLen = 1 + 1 + 4;
const int nHeadLen = 1 + 1 + 4;
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
LPBYTE szBuffer = tmp.Buf();
UINT ulBufferLen = m_ContextObject->InDeCompressedBuffer.GetBufferLength();
if (szBuffer[1] == 0) // û<>о<EFBFBD><D0BE><EFBFBD>H263ѹ<33><D1B9><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
{
// <20><>һ<EFBFBD>Σ<EFBFBD>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>֧<EFBFBD><D6A7>ָ<EFBFBD><D6B8><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
if (m_nCount == 1)
{
SysMenu->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_UNCHECKED);
memcpy(m_BitmapData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen);
}
else // <20><><EFBFBD><EFBFBD>
{
////<2F><><EFBFBD><EFBFBD><EFBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
InitCodec(*(LPDWORD)(szBuffer + 2)); //<2F>ж<EFBFBD>
if (m_pVideoCodec != NULL)
{
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_CHECKED);
memcpy(m_BitmapCompressedData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen); //<2F><>Ƶû<C6B5>н<EFBFBD>ѹ
//<2F><><EFBFBD>ʼ<EFBFAA><CABC><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬδѹ<CEB4><D1B9><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>ϡ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>avi<76><69>ʽ
m_pVideoCodec->DecodeVideoData(m_BitmapCompressedData_Full, ulBufferLen - nHeadLen,
(LPBYTE)m_BitmapData_Full, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ
}
}
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
LPBYTE szBuffer = tmp.Buf();
UINT ulBufferLen = m_ContextObject->InDeCompressedBuffer.GetBufferLength();
if (szBuffer[1] == 0) { // û<>о<EFBFBD><D0BE><EFBFBD>H263ѹ<33><D1B9><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
// <20><>һ<EFBFBD>Σ<EFBFBD>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>֧<EFBFBD><D6A7>ָ<EFBFBD><D6B8><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
if (m_nCount == 1) {
SysMenu->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_UNCHECKED);
memcpy(m_BitmapData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen);
} else { // <20><><EFBFBD><EFBFBD>
////<2F><><EFBFBD><EFBFBD><EFBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
InitCodec(*(LPDWORD)(szBuffer + 2)); //<2F>ж<EFBFBD>
if (m_pVideoCodec != NULL) {
SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_CHECKED);
memcpy(m_BitmapCompressedData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen); //<2F><>Ƶû<C6B5>н<EFBFBD>ѹ
//<2F><><EFBFBD>ʼ<EFBFAA><CABC><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬδѹ<CEB4><D1B9><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>ϡ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>avi<76><69>ʽ
m_pVideoCodec->DecodeVideoData(m_BitmapCompressedData_Full, ulBufferLen - nHeadLen,
(LPBYTE)m_BitmapData_Full, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ
}
}
PostMessage(WM_PAINT);
PostMessage(WM_PAINT);
}
void CVideoDlg::InitCodec(DWORD fccHandler)
{
if (m_pVideoCodec != NULL)
return;
if (m_pVideoCodec != NULL)
return;
m_pVideoCodec = new CVideoCodec;
if (!m_pVideoCodec->InitCompressor(m_BitmapInfor_Full, fccHandler))
{
Mprintf("======> InitCompressor failed \n");
delete m_pVideoCodec;
// <20><>NULL, <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ΪNULL<4C><4C><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
m_pVideoCodec = NULL;
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}
m_pVideoCodec = new CVideoCodec;
if (!m_pVideoCodec->InitCompressor(m_BitmapInfor_Full, fccHandler)) {
Mprintf("======> InitCompressor failed \n");
delete m_pVideoCodec;
// <20><>NULL, <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ΪNULL<4C><4C><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
m_pVideoCodec = NULL;
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}
}
void CVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
switch (nID)
{
case IDM_SAVEAVI:
{
SaveAvi();
break;
}
case IDM_ENABLECOMPRESS:
{
CMenu *pSysMenu = GetSystemMenu(FALSE);
bool bIsChecked = pSysMenu->GetMenuState(IDM_ENABLECOMPRESS, MF_BYCOMMAND) & MF_CHECKED;
pSysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, bIsChecked ? MF_UNCHECKED : MF_CHECKED);
bIsChecked = !bIsChecked;
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
if (!bIsChecked)
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
break;
}
}
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
switch (nID) {
case IDM_SAVEAVI: {
SaveAvi();
break;
}
case IDM_ENABLECOMPRESS: {
CMenu *pSysMenu = GetSystemMenu(FALSE);
bool bIsChecked = pSysMenu->GetMenuState(IDM_ENABLECOMPRESS, MF_BYCOMMAND) & MF_CHECKED;
pSysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, bIsChecked ? MF_UNCHECKED : MF_CHECKED);
bIsChecked = !bIsChecked;
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
if (!bIsChecked)
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
break;
}
}
CDialog::OnSysCommand(nID, lParam);
CDialog::OnSysCommand(nID, lParam);
}
void CVideoDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CPaintDC dc(this); // device context for painting
if (m_BitmapData_Full==NULL)
{
return;
}
RECT rect;
GetClientRect(&rect);
if (m_BitmapData_Full==NULL) {
return;
}
RECT rect;
GetClientRect(&rect);
DrawDibDraw
(
m_hDD,
m_hDC,
0, 0,
rect.right, rect.bottom,
(LPBITMAPINFOHEADER)m_BitmapInfor_Full,
m_BitmapData_Full,
0, 0,
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight,
DDF_SAME_HDC
);
DrawDibDraw
(
m_hDD,
m_hDC,
0, 0,
rect.right, rect.bottom,
(LPBITMAPINFOHEADER)m_BitmapInfor_Full,
m_BitmapData_Full,
0, 0,
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight,
DDF_SAME_HDC
);
if (!m_aviFile.IsEmpty())
{
m_aviStream.Write(m_BitmapData_Full);
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
SetBkMode(m_hDC, TRANSPARENT);
SetTextColor(m_hDC, RGB(0xff,0x00,0x00));
const LPCTSTR lpTipsString = "Recording";
TextOut(m_hDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
}
if (!m_aviFile.IsEmpty()) {
m_aviStream.Write(m_BitmapData_Full);
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
SetBkMode(m_hDC, TRANSPARENT);
SetTextColor(m_hDC, RGB(0xff,0x00,0x00));
const LPCTSTR lpTipsString = "Recording";
TextOut(m_hDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
}
}

View File

@@ -14,145 +14,143 @@
class CBmpToAvi
{
public:
CBmpToAvi();
virtual ~CBmpToAvi();
bool Open(LPCTSTR szFile, LPBITMAPINFO lpbmi);
bool Open(HWND m_hWnd, LPCTSTR szFile, LPBITMAPINFO lpbmi, BOOL bIsWebCam = FALSE) { return FALSE; }
bool Write(LPVOID lpBuffer);
void Close();
CBmpToAvi();
virtual ~CBmpToAvi();
bool Open(LPCTSTR szFile, LPBITMAPINFO lpbmi);
bool Open(HWND m_hWnd, LPCTSTR szFile, LPBITMAPINFO lpbmi, BOOL bIsWebCam = FALSE)
{
return FALSE;
}
bool Write(LPVOID lpBuffer);
void Close();
private:
PAVIFILE m_pfile;
PAVISTREAM m_pavi;
int m_nFrames;
static AVISTREAMINFO m_si; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ǿ<EFBFBD>̬<EFBFBD><CCAC>
PAVIFILE m_pfile;
PAVISTREAM m_pavi;
int m_nFrames;
static AVISTREAMINFO m_si; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ǿ<EFBFBD>̬<EFBFBD><CCAC>
};
class CVideoCodec
class CVideoCodec
{
COMPVARS m_cv;
HIC m_hIC;
BITMAPINFO* m_lpbmiInput;
BITMAPINFO m_bmiOutput;
COMPVARS m_cv;
HIC m_hIC;
BITMAPINFO* m_lpbmiInput;
BITMAPINFO m_bmiOutput;
public:
bool InitCompressor(BITMAPINFO* lpbmi, DWORD fccHandler)
{
if (lpbmi == NULL)
return false;
bool InitCompressor(BITMAPINFO* lpbmi, DWORD fccHandler)
{
if (lpbmi == NULL)
return false;
m_lpbmiInput = lpbmi;
m_lpbmiInput = lpbmi;
ZeroMemory(&m_cv, sizeof(m_cv));
m_cv.cbSize = sizeof(m_cv);
m_cv.dwFlags = ICMF_COMPVARS_VALID;
m_cv.hic = m_hIC;
m_cv.fccType = ICTYPE_VIDEO;
m_cv.fccHandler = fccHandler;
m_cv.lpbiOut = NULL;
m_cv.lKey = 10;
m_cv.lDataRate = 6;
m_cv.lQ = ICQUALITY_HIGH;
ZeroMemory(&m_cv, sizeof(m_cv));
m_cv.cbSize = sizeof(m_cv);
m_cv.dwFlags = ICMF_COMPVARS_VALID;
m_cv.hic = m_hIC;
m_cv.fccType = ICTYPE_VIDEO;
m_cv.fccHandler = fccHandler;
m_cv.lpbiOut = NULL;
m_cv.lKey = 10;
m_cv.lDataRate = 6;
m_cv.lQ = ICQUALITY_HIGH;
m_hIC = ICOpen(ICTYPE_VIDEO, m_cv.fccHandler, ICMODE_COMPRESS | ICMODE_DECOMPRESS);
m_hIC = ICOpen(ICTYPE_VIDEO, m_cv.fccHandler, ICMODE_COMPRESS | ICMODE_DECOMPRESS);
if (m_hIC == NULL)
{
return false;
}
if (m_hIC == NULL) {
return false;
}
ICCompressGetFormat(m_hIC, m_lpbmiInput, &m_bmiOutput);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
ICSendMessage(m_hIC, 0x60c9, 0xf7329ace, 0xacdeaea2);
ICCompressGetFormat(m_hIC, m_lpbmiInput, &m_bmiOutput);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
ICSendMessage(m_hIC, 0x60c9, 0xf7329ace, 0xacdeaea2);
m_cv.hic = m_hIC;
m_cv.dwFlags = ICMF_COMPVARS_VALID;
m_cv.hic = m_hIC;
m_cv.dwFlags = ICMF_COMPVARS_VALID;
if (!ICSeqCompressFrameStart(&m_cv, m_lpbmiInput))
{
return false;
}
if (!ICSeqCompressFrameStart(&m_cv, m_lpbmiInput)) {
return false;
}
ICDecompressBegin(m_hIC, &m_bmiOutput , m_lpbmiInput);
ICDecompressBegin(m_hIC, &m_bmiOutput, m_lpbmiInput);
return true;
}
return true;
}
bool DecodeVideoData(BYTE *pin, int len, BYTE* pout, int *lenr,DWORD flag)
{
if(!pin || !pout ||!m_hIC)
return false;
if (ICDecompress(m_hIC, flag, &m_bmiOutput.bmiHeader, pin, &m_lpbmiInput->bmiHeader, pout) != ICERR_OK)
return false;
bool DecodeVideoData(BYTE *pin, int len, BYTE* pout, int *lenr,DWORD flag)
{
if(!pin || !pout ||!m_hIC)
return false;
if (ICDecompress(m_hIC, flag, &m_bmiOutput.bmiHeader, pin, &m_lpbmiInput->bmiHeader, pout) != ICERR_OK)
return false;
if (lenr) *lenr = m_lpbmiInput->bmiHeader.biSizeImage;
if (lenr) *lenr = m_lpbmiInput->bmiHeader.biSizeImage;
return true;
}
return true;
}
bool EncodeVideoData(BYTE* pin, int len, BYTE* pout, int* lenr, bool* pKey)
{
BYTE *p;
long s = 1;
BOOL k = true;
if ( !pin || !pout || len != (int)m_lpbmiInput->bmiHeader.biSizeImage || !m_hIC)
return false;
p = (BYTE*)ICSeqCompressFrame(&m_cv, 0, pin, &k, &s);
bool EncodeVideoData(BYTE* pin, int len, BYTE* pout, int* lenr, bool* pKey)
{
BYTE *p;
long s = 1;
BOOL k = true;
if ( !pin || !pout || len != (int)m_lpbmiInput->bmiHeader.biSizeImage || !m_hIC)
return false;
p = (BYTE*)ICSeqCompressFrame(&m_cv, 0, pin, &k, &s);
if (!p) return false;
if (lenr) *lenr = s;
if (pKey) *pKey = k;
if (!p) return false;
if (lenr) *lenr = s;
if (pKey) *pKey = k;
CopyMemory(pout, p, s);
CopyMemory(pout, p, s);
return true;
}
return true;
}
CVideoCodec()
{
m_lpbmiInput = NULL;
}
CVideoCodec()
{
m_lpbmiInput = NULL;
}
virtual ~CVideoCodec()
{
// No init yet or init error
if (m_hIC == NULL)
return;
ICDecompressEnd(m_hIC);
ICSeqCompressFrameEnd(&m_cv);
ICCompressorFree(&m_cv);
ICClose(m_hIC);
}
int MyEnumCodecs(int *fccHandler, char *strName)
{
static int i = 0;
int nRet = 1;
HIC hIC;
ICINFO icInfo;
virtual ~CVideoCodec()
{
// No init yet or init error
if (m_hIC == NULL)
return;
ICDecompressEnd(m_hIC);
ICSeqCompressFrameEnd(&m_cv);
ICCompressorFree(&m_cv);
ICClose(m_hIC);
}
int MyEnumCodecs(int *fccHandler, char *strName)
{
static int i = 0;
int nRet = 1;
HIC hIC;
ICINFO icInfo;
if (fccHandler == NULL)
return 0;
if (fccHandler == NULL)
return 0;
if(!ICInfo(ICTYPE_VIDEO, i, &icInfo))
{
i = 0;
return 0;
}
hIC = ICOpen(icInfo.fccType, icInfo.fccHandler, ICMODE_QUERY);
if(!ICInfo(ICTYPE_VIDEO, i, &icInfo)) {
i = 0;
return 0;
}
hIC = ICOpen(icInfo.fccType, icInfo.fccHandler, ICMODE_QUERY);
if (hIC)
{
ICGetInfo(hIC, &icInfo, sizeof(icInfo));
*fccHandler = icInfo.fccHandler;
//<2F><><EFBFBD>ڵõ<DAB5><C3B5><EFBFBD>szDescription<6F><6E>UNICODE˫<45>ֽ<EFBFBD><D6BD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA>ΪASCII<49><49>
if (strName != NULL)
wcstombs(strName, icInfo.szDescription, 256);
}
else nRet = -1;
if (hIC) {
ICGetInfo(hIC, &icInfo, sizeof(icInfo));
*fccHandler = icInfo.fccHandler;
//<2F><><EFBFBD>ڵõ<DAB5><C3B5><EFBFBD>szDescription<6F><6E>UNICODE˫<45>ֽ<EFBFBD><D6BD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA>ΪASCII<49><49>
if (strName != NULL)
wcstombs(strName, icInfo.szDescription, 256);
} else nRet = -1;
ICClose(hIC);
i++;
return nRet;
}
ICClose(hIC);
i++;
return nRet;
}
};
@@ -160,40 +158,40 @@ public:
class CVideoDlg : public DialogBase
{
DECLARE_DYNAMIC(CVideoDlg)
DECLARE_DYNAMIC(CVideoDlg)
public:
CVideoDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CVideoDlg();
CVideoDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CVideoDlg();
LPBITMAPINFO m_BitmapInfor_Full;
BYTE* m_BitmapData_Full;
BYTE* m_BitmapCompressedData_Full;
void ResetScreen(void);
void OnReceiveComplete(void);
void DrawDIB(void);
LPBITMAPINFO m_BitmapInfor_Full;
BYTE* m_BitmapData_Full;
BYTE* m_BitmapCompressedData_Full;
void ResetScreen(void);
void OnReceiveComplete(void);
void DrawDIB(void);
void SaveAvi(void);
void InitCodec(DWORD fccHandler);
void SaveAvi(void);
void InitCodec(DWORD fccHandler);
CString m_aviFile; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>վ<EFBFBD>д<EFBFBD><D0B4>
CBmpToAvi m_aviStream;
CString m_aviFile; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>վ<EFBFBD>д<EFBFBD><D0B4>
CBmpToAvi m_aviStream;
int m_nCount;
HDC m_hDC;
HDRAWDIB m_hDD;
int m_nCount;
HDC m_hDC;
HDRAWDIB m_hDD;
CVideoCodec *m_pVideoCodec; // <20><>Ƶѹ<C6B5><D1B9><EFBFBD><EFBFBD>
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_VIDEO };
CVideoCodec *m_pVideoCodec; // <20><>Ƶѹ<C6B5><D1B9><EFBFBD><EFBFBD>
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_DIALOG_VIDEO };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
};

View File

@@ -7,16 +7,16 @@
#define TOKEN_ACTIVED 202
enum SENDTASK {
TASK_MAIN,
TASK_PLUG,
TASK_MAIN,
TASK_PLUG,
};
struct DllSendData {
SENDTASK sendtask;
WCHAR DllName[255]; // DL名称
BOOL is_64; // 位数
int DataSize; // DLL大小
WCHAR szVersion[50]; // 版本
WCHAR szcommand[1000];
int i;
SENDTASK sendtask;
WCHAR DllName[255]; // DL名称
BOOL is_64; // 位数
int DataSize; // DLL大小
WCHAR szVersion[50]; // 版本
WCHAR szcommand[1000];
int i;
};

View File

@@ -190,7 +190,7 @@ BOOL CFileManagerDlg::OnInitDialog()
m_list_remote_driver.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES | LVS_SHAREIMAGELISTS);
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);
m_list_remote.SetImageList(&(THIS_APP->m_pImageList_Large), LVSIL_NORMAL);
m_list_remote.SetImageList(&(THIS_APP->m_pImageList_Small), LVSIL_SMALL);
@@ -493,11 +493,11 @@ void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize)
void CFileManagerDlg::OnClose()
{
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DestroyCursor(m_hCursor);
@@ -1425,8 +1425,7 @@ void CFileManagerDlg::WriteLocalRecvFile()
if (i == MAX_WRITE_RETRY && !bResult) {
::MessageBox(m_hWnd, m_strReceiveLocalFile + _T(" <20>ļ<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7>!"), _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), MB_OK | MB_ICONWARNING);
m_bIsStop = true;
}
else {
} else {
dwOffsetLow = 0;
dwOffsetHigh = 0;
dwOffsetLow = SetFilePointer(m_hFileRecv, dwOffsetLow, &dwOffsetHigh, FILE_CURRENT);

View File

@@ -7,185 +7,187 @@
#define MAX_SEND_BUFFER 65535
#define MAX_RECV_BUFFER 65535
namespace file {
namespace file
{
/////////////////////////////////////////////////////////////////////////////
// CFileManagerDlg dialog
typedef CList<CString, CString&> strList;
/////////////////////////////////////////////////////////////////////////////
// CFileManagerDlg dialog
typedef CList<CString, CString&> strList;
typedef struct {
DWORD dwSizeHigh;
DWORD dwSizeLow;
BOOL error;
} FILESIZE;
typedef struct {
DWORD dwSizeHigh;
DWORD dwSizeLow;
BOOL error;
} FILESIZE;
typedef struct {
TCHAR SearchFileName[MAX_PATH];
TCHAR SearchPath[MAX_PATH];
BOOL bEnabledSubfolder;
} FILESEARCH;
typedef struct {
TCHAR SearchFileName[MAX_PATH];
TCHAR SearchPath[MAX_PATH];
BOOL bEnabledSubfolder;
} FILESEARCH;
typedef struct {
LVITEM* plvi;
CString sCol2;
} lvItem, * plvItem;
typedef struct {
LVITEM* plvi;
CString sCol2;
} lvItem, * plvItem;
typedef struct {
BYTE Token;
int w, h, size;
typedef struct {
BYTE Token;
int w, h, size;
} FILEPICINFO;
} FILEPICINFO;
class CFileManagerDlg : public DialogBase
class CFileManagerDlg : public DialogBase
{
// Construction
public:
CString strLpath;
CString m_strDesktopPath;
CString GetDirectoryPath(BOOL bIncludeFiles);
bool m_bCanAdmin, m_bUseAdmin, m_bIsStop;
CString m_strReceiveLocalFile;
CString m_strUploadRemoteFile;
void ShowProgress();
void SendStop(BOOL bIsDownload);
int m_nTransferMode;
CString m_hCopyDestFolder;
void SendContinue();
void SendException();
void EndLocalRecvFile();
void EndRemoteDeleteFile();
CString ExtractNameFromFullPath(CString szFullPath);
HANDLE m_hFileSend;
HANDLE m_hFileRecv;
CString m_strOperatingFile; // <20>ļ<EFBFBD><C4BC><EFBFBD>
CString m_strFileName; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
__int64 m_nOperatingFileLength; // <20>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
__int64 m_nCounter;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteLocalRecvFile();
void CreateLocalRecvFile();
BOOL SendDownloadJob();
BOOL SendUploadJob();
BOOL SendDeleteJob();
strList m_Remote_Download_Job;
strList m_Remote_Upload_Job;
strList m_Remote_Delete_Job;
void ShowMessage(TCHAR* lpFmt, ...);
CString m_Remote_Path;
CStringA CopyFileNAme;;
BYTE m_bRemoteDriveList[2048];
CString GetParentDirectory(CString strPath);
void OnReceiveComplete();
void OnReceive();
void SearchEnd(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void FixedRemoteSearchFileList(BYTE* pbBuffer, DWORD dwBufferLen);
int m_nNewIconBaseIndex; // <20>¼ӵ<C2BC>ICON
CProgressCtrl* m_ProgressCtrl;
HCURSOR m_hCursor;
CString m_Local_Path;
bool FixedUploadDirectory(LPCTSTR lpPathName);
void FixedRemoteDriveList();
void GetRemoteFileList(CString directory = _T(""));
void FixedRemoteFileList(BYTE* pbBuffer, DWORD dwBufferLen);
void fixNetHood(BYTE* pbuffer, int buffersize);//Զ<>̹<EFBFBD><CCB9><EFBFBD>Ŀ¼
bool id_search_result;
CStatusBar m_wndStatusBar;
CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
~CFileManagerDlg()
{
// Construction
public:
CString strLpath;
CString m_strDesktopPath;
CString GetDirectoryPath(BOOL bIncludeFiles);
bool m_bCanAdmin, m_bUseAdmin, m_bIsStop;
CString m_strReceiveLocalFile;
CString m_strUploadRemoteFile;
void ShowProgress();
void SendStop(BOOL bIsDownload);
int m_nTransferMode;
CString m_hCopyDestFolder;
void SendContinue();
void SendException();
void EndLocalRecvFile();
void EndRemoteDeleteFile();
CString ExtractNameFromFullPath(CString szFullPath);
HANDLE m_hFileSend;
HANDLE m_hFileRecv;
CString m_strOperatingFile; // <20>ļ<EFBFBD><C4BC><EFBFBD>
CString m_strFileName; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
__int64 m_nOperatingFileLength; // <20>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
__int64 m_nCounter;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteLocalRecvFile();
void CreateLocalRecvFile();
BOOL SendDownloadJob();
BOOL SendUploadJob();
BOOL SendDeleteJob();
strList m_Remote_Download_Job;
strList m_Remote_Upload_Job;
strList m_Remote_Delete_Job;
void ShowMessage(TCHAR* lpFmt, ...);
CString m_Remote_Path;
CStringA CopyFileNAme;;
BYTE m_bRemoteDriveList[2048];
CString GetParentDirectory(CString strPath);
void OnReceiveComplete();
void OnReceive();
void SearchEnd(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void FixedRemoteSearchFileList(BYTE* pbBuffer, DWORD dwBufferLen);
int m_nNewIconBaseIndex; // <20>¼ӵ<C2BC>ICON
CProgressCtrl* m_ProgressCtrl;
HCURSOR m_hCursor;
CString m_Local_Path;
bool FixedUploadDirectory(LPCTSTR lpPathName);
void FixedRemoteDriveList();
void GetRemoteFileList(CString directory = _T(""));
void FixedRemoteFileList(BYTE* pbBuffer, DWORD dwBufferLen);
void fixNetHood(BYTE* pbuffer, int buffersize);//Զ<>̹<EFBFBD><CCB9><EFBFBD>Ŀ¼
bool id_search_result;
CStatusBar m_wndStatusBar;
CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
~CFileManagerDlg() {
m_bIsClosed = TRUE;
SAFE_DELETE(m_ProgressCtrl);
}
enum {
IDD = IDD_FILE_WINOS
};
CComboBox m_Remote_Directory_ComboBox;
CComboBox m_Local_Directory_ComboBox;
CFileListCtrl m_list_remote;
CListCtrl m_list_remote_driver;
CListCtrl m_list_remote_search;
CImageList I_ImageList0;
CImageList I_ImageList1;
CButton m_BtnSearch;
CString m_SearchStr;
BOOL m_bSubFordle;
BOOL DRIVE_Sys;
BOOL DRIVE_CAZ;
__int64 Bf_nCounters; // <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڱȽ<DAB1><C8BD><EFBFBD>
LONG Bf_dwOffsetHighs;
LONG Bf_dwOffsetLows;
void TransferSend(CString file);
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy();
virtual void OnClose();
protected:
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnBeginDragListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnclkListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnclickListSearch(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnGo();
afx_msg void OnRemotePrev();
afx_msg void OnRemoteView();
afx_msg void OnRemoteRecent();
afx_msg void OnRemoteDesktop();
afx_msg void OnRemoteCopy();
afx_msg void OnTransferSend();
afx_msg void OnRemoteDelete();
afx_msg void OnRemoteStop();
afx_msg void OnRemoteNewFolder();
afx_msg void OnTransferRecv();
afx_msg void OnRename();
afx_msg void OnEndLabelEditListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDelete();
afx_msg void OnDeleteEnforce();
afx_msg void OnNewFolder();
afx_msg void OnRefresh();
afx_msg void OnUseAdmin();
afx_msg void OnRemoteOpenShow();
afx_msg void OnRemoteOpenHide();
afx_msg void OnRemoteEncryption();
afx_msg void OnRemoteDecrypt();
afx_msg void OnRemoteInfo();
afx_msg void OnRemoteCopyFile();
afx_msg void OnRemotePasteFile();
afx_msg void OnRemotezip();
afx_msg void OnRemotezipstop();
afx_msg void OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickListSearch(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL MyShell_GetImageLists();
afx_msg void OnCompress();
afx_msg void OnUncompress();
afx_msg void OnSetfocusRemotePath();
afx_msg void OnBtnSearch();
afx_msg void OnBnClickedSearchStop();
afx_msg void OnBnClickedSearchResult();
DECLARE_MESSAGE_MAP()
private:
bool m_bIsUpload; // <20>Ƿ<EFBFBD><C7B7>ǰѱ<C7B0><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ
BOOL m_bDragging; // during a drag operation
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
void SendTransferMode();
void SendFileData();
void EndLocalUploadFile();
bool DeleteDirectory(LPCTSTR lpszDirectory);
void EnableControl(BOOL bEnable = TRUE);
void ShowSearchPlugList();
m_bIsClosed = TRUE;
SAFE_DELETE(m_ProgressCtrl);
}
enum {
IDD = IDD_FILE_WINOS
};
CComboBox m_Remote_Directory_ComboBox;
CComboBox m_Local_Directory_ComboBox;
CFileListCtrl m_list_remote;
CListCtrl m_list_remote_driver;
CListCtrl m_list_remote_search;
CImageList I_ImageList0;
CImageList I_ImageList1;
CButton m_BtnSearch;
CString m_SearchStr;
BOOL m_bSubFordle;
BOOL DRIVE_Sys;
BOOL DRIVE_CAZ;
__int64 Bf_nCounters; // <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڱȽ<DAB1><C8BD><EFBFBD>
LONG Bf_dwOffsetHighs;
LONG Bf_dwOffsetLows;
void TransferSend(CString file);
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy();
virtual void OnClose();
protected:
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnBeginDragListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnclkListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnclickListSearch(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnGo();
afx_msg void OnRemotePrev();
afx_msg void OnRemoteView();
afx_msg void OnRemoteRecent();
afx_msg void OnRemoteDesktop();
afx_msg void OnRemoteCopy();
afx_msg void OnTransferSend();
afx_msg void OnRemoteDelete();
afx_msg void OnRemoteStop();
afx_msg void OnRemoteNewFolder();
afx_msg void OnTransferRecv();
afx_msg void OnRename();
afx_msg void OnEndLabelEditListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDelete();
afx_msg void OnDeleteEnforce();
afx_msg void OnNewFolder();
afx_msg void OnRefresh();
afx_msg void OnUseAdmin();
afx_msg void OnRemoteOpenShow();
afx_msg void OnRemoteOpenHide();
afx_msg void OnRemoteEncryption();
afx_msg void OnRemoteDecrypt();
afx_msg void OnRemoteInfo();
afx_msg void OnRemoteCopyFile();
afx_msg void OnRemotePasteFile();
afx_msg void OnRemotezip();
afx_msg void OnRemotezipstop();
afx_msg void OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnRclickListSearch(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL MyShell_GetImageLists();
afx_msg void OnCompress();
afx_msg void OnUncompress();
afx_msg void OnSetfocusRemotePath();
afx_msg void OnBtnSearch();
afx_msg void OnBnClickedSearchStop();
afx_msg void OnBnClickedSearchResult();
DECLARE_MESSAGE_MAP()
private:
bool m_bIsUpload; // <20>Ƿ<EFBFBD><C7B7>ǰѱ<C7B0><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ
BOOL m_bDragging; // during a drag operation
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
void SendTransferMode();
void SendFileData();
void EndLocalUploadFile();
bool DeleteDirectory(LPCTSTR lpszDirectory);
void EnableControl(BOOL bEnable = TRUE);
void ShowSearchPlugList();
};
}

View File

@@ -4,28 +4,29 @@
/////////////////////////////////////////////////////////////////////////////
// CFileTransferModeDlg dialog
namespace file {
namespace file
{
class CFileTransferModeDlg : public CDialog
{
public:
CString m_strFileName;
CFileTransferModeDlg(CWnd* pParent = NULL);
class CFileTransferModeDlg : public CDialog
{
public:
CString m_strFileName;
CFileTransferModeDlg(CWnd* pParent = NULL);
enum { IDD = IDD_TRANSFERMODE_DLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
enum { IDD = IDD_TRANSFERMODE_DLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
afx_msg void OnEndDialog(UINT id);
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOverwrite();
afx_msg void OnBnClickedOverwriteAll();
afx_msg void OnBnClickedAddition();
afx_msg void OnBnClickedAdditionAll();
afx_msg void OnBnClickedJump();
afx_msg void OnBnClickedJumpAll();
afx_msg void OnBnClickedCancel();
DECLARE_MESSAGE_MAP()
};
protected:
afx_msg void OnEndDialog(UINT id);
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOverwrite();
afx_msg void OnBnClickedOverwriteAll();
afx_msg void OnBnClickedAddition();
afx_msg void OnBnClickedAdditionAll();
afx_msg void OnBnClickedJump();
afx_msg void OnBnClickedJumpAll();
afx_msg void OnBnClickedCancel();
DECLARE_MESSAGE_MAP()
};
}

View File

@@ -74,61 +74,75 @@ Release:
template<class T, class _Listener, class _Creator> class CHPObjectPtr
{
public:
CHPObjectPtr& Reset(T* pObj = nullptr)
{
if(pObj != m_pObj)
{
if(m_pObj)
_Creator::Destroy(m_pObj);
CHPObjectPtr& Reset(T* pObj = nullptr)
{
if(pObj != m_pObj) {
if(m_pObj)
_Creator::Destroy(m_pObj);
m_pObj = pObj;
}
m_pObj = pObj;
}
return *this;
}
return *this;
}
CHPObjectPtr& Attach(T* pObj)
{
return Reset(pObj);
}
CHPObjectPtr& Attach(T* pObj)
{
return Reset(pObj);
}
T* Detach()
{
T* pObj = m_pObj;
m_pObj = nullptr;
T* Detach()
{
T* pObj = m_pObj;
m_pObj = nullptr;
return pObj;
}
return pObj;
}
BOOL IsValid () const {return m_pObj != nullptr ;}
T* Get () const {return m_pObj ;}
T* operator -> () const {return m_pObj ;}
operator T* () const {return m_pObj ;}
BOOL IsValid () const
{
return m_pObj != nullptr ;
}
T* Get () const
{
return m_pObj ;
}
T* operator -> () const
{
return m_pObj ;
}
operator T* () const
{
return m_pObj ;
}
CHPObjectPtr& operator = (T* pObj) {return Reset(pObj) ;}
CHPObjectPtr& operator = (T* pObj)
{
return Reset(pObj) ;
}
public:
CHPObjectPtr(_Listener* pListener = nullptr)
{
m_pObj = _Creator::Create(pListener);
}
CHPObjectPtr(_Listener* pListener = nullptr)
{
m_pObj = _Creator::Create(pListener);
}
CHPObjectPtr(BOOL bCreate, _Listener* pListener = nullptr)
{
m_pObj = bCreate ? _Creator::Create(pListener) : nullptr;
}
CHPObjectPtr(BOOL bCreate, _Listener* pListener = nullptr)
{
m_pObj = bCreate ? _Creator::Create(pListener) : nullptr;
}
virtual ~CHPObjectPtr()
{
Reset();
}
virtual ~CHPObjectPtr()
{
Reset();
}
private:
CHPObjectPtr(const CHPObjectPtr&);
CHPObjectPtr& operator = (const CHPObjectPtr&);
CHPObjectPtr(const CHPObjectPtr&);
CHPObjectPtr& operator = (const CHPObjectPtr&);
protected:
T* m_pObj;
T* m_pObj;
};
/**************************************************/
@@ -203,129 +217,120 @@ HPSOCKET_API void HP_Destroy_UdpArqClient(IUdpArqClient* pClient);
#endif
// ITcpServer 对象创建器
struct TcpServer_Creator
{
static ITcpServer* Create(ITcpServerListener* pListener)
{
return HP_Create_TcpServer(pListener);
}
struct TcpServer_Creator {
static ITcpServer* Create(ITcpServerListener* pListener)
{
return HP_Create_TcpServer(pListener);
}
static void Destroy(ITcpServer* pServer)
{
HP_Destroy_TcpServer(pServer);
}
static void Destroy(ITcpServer* pServer)
{
HP_Destroy_TcpServer(pServer);
}
};
// ITcpAgent 对象创建器
struct TcpAgent_Creator
{
static ITcpAgent* Create(ITcpAgentListener* pListener)
{
return HP_Create_TcpAgent(pListener);
}
struct TcpAgent_Creator {
static ITcpAgent* Create(ITcpAgentListener* pListener)
{
return HP_Create_TcpAgent(pListener);
}
static void Destroy(ITcpAgent* pAgent)
{
HP_Destroy_TcpAgent(pAgent);
}
static void Destroy(ITcpAgent* pAgent)
{
HP_Destroy_TcpAgent(pAgent);
}
};
// ITcpClient 对象创建器
struct TcpClient_Creator
{
static ITcpClient* Create(ITcpClientListener* pListener)
{
return HP_Create_TcpClient(pListener);
}
struct TcpClient_Creator {
static ITcpClient* Create(ITcpClientListener* pListener)
{
return HP_Create_TcpClient(pListener);
}
static void Destroy(ITcpClient* pClient)
{
HP_Destroy_TcpClient(pClient);
}
static void Destroy(ITcpClient* pClient)
{
HP_Destroy_TcpClient(pClient);
}
};
// ITcpPullServer 对象创建器
struct TcpPullServer_Creator
{
static ITcpPullServer* Create(ITcpServerListener* pListener)
{
return HP_Create_TcpPullServer(pListener);
}
struct TcpPullServer_Creator {
static ITcpPullServer* Create(ITcpServerListener* pListener)
{
return HP_Create_TcpPullServer(pListener);
}
static void Destroy(ITcpPullServer* pServer)
{
HP_Destroy_TcpPullServer(pServer);
}
static void Destroy(ITcpPullServer* pServer)
{
HP_Destroy_TcpPullServer(pServer);
}
};
// ITcpPullAgent 对象创建器
struct TcpPullAgent_Creator
{
static ITcpPullAgent* Create(ITcpAgentListener* pListener)
{
return HP_Create_TcpPullAgent(pListener);
}
struct TcpPullAgent_Creator {
static ITcpPullAgent* Create(ITcpAgentListener* pListener)
{
return HP_Create_TcpPullAgent(pListener);
}
static void Destroy(ITcpPullAgent* pAgent)
{
HP_Destroy_TcpPullAgent(pAgent);
}
static void Destroy(ITcpPullAgent* pAgent)
{
HP_Destroy_TcpPullAgent(pAgent);
}
};
// ITcpPullClient 对象创建器
struct TcpPullClient_Creator
{
static ITcpPullClient* Create(ITcpClientListener* pListener)
{
return HP_Create_TcpPullClient(pListener);
}
struct TcpPullClient_Creator {
static ITcpPullClient* Create(ITcpClientListener* pListener)
{
return HP_Create_TcpPullClient(pListener);
}
static void Destroy(ITcpPullClient* pClient)
{
HP_Destroy_TcpPullClient(pClient);
}
static void Destroy(ITcpPullClient* pClient)
{
HP_Destroy_TcpPullClient(pClient);
}
};
// ITcpPackServer 对象创建器
struct TcpPackServer_Creator
{
static ITcpPackServer* Create(ITcpServerListener* pListener)
{
return HP_Create_TcpPackServer(pListener);
}
struct TcpPackServer_Creator {
static ITcpPackServer* Create(ITcpServerListener* pListener)
{
return HP_Create_TcpPackServer(pListener);
}
static void Destroy(ITcpPackServer* pServer)
{
HP_Destroy_TcpPackServer(pServer);
}
static void Destroy(ITcpPackServer* pServer)
{
HP_Destroy_TcpPackServer(pServer);
}
};
// ITcpPackAgent 对象创建器
struct TcpPackAgent_Creator
{
static ITcpPackAgent* Create(ITcpAgentListener* pListener)
{
return HP_Create_TcpPackAgent(pListener);
}
struct TcpPackAgent_Creator {
static ITcpPackAgent* Create(ITcpAgentListener* pListener)
{
return HP_Create_TcpPackAgent(pListener);
}
static void Destroy(ITcpPackAgent* pAgent)
{
HP_Destroy_TcpPackAgent(pAgent);
}
static void Destroy(ITcpPackAgent* pAgent)
{
HP_Destroy_TcpPackAgent(pAgent);
}
};
// ITcpPackClient 对象创建器
struct TcpPackClient_Creator
{
static ITcpPackClient* Create(ITcpClientListener* pListener)
{
return HP_Create_TcpPackClient(pListener);
}
struct TcpPackClient_Creator {
static ITcpPackClient* Create(ITcpClientListener* pListener)
{
return HP_Create_TcpPackClient(pListener);
}
static void Destroy(ITcpPackClient* pClient)
{
HP_Destroy_TcpPackClient(pClient);
}
static void Destroy(ITcpPackClient* pClient)
{
HP_Destroy_TcpPackClient(pClient);
}
};
// ITcpServer 对象智能指针
@@ -350,87 +355,81 @@ typedef CHPObjectPtr<ITcpPackClient, ITcpClientListener, TcpPackClient_Creator>
#ifdef _UDP_SUPPORT
// IUdpServer 对象创建器
struct UdpServer_Creator
{
static IUdpServer* Create(IUdpServerListener* pListener)
{
return HP_Create_UdpServer(pListener);
}
struct UdpServer_Creator {
static IUdpServer* Create(IUdpServerListener* pListener)
{
return HP_Create_UdpServer(pListener);
}
static void Destroy(IUdpServer* pServer)
{
HP_Destroy_UdpServer(pServer);
}
static void Destroy(IUdpServer* pServer)
{
HP_Destroy_UdpServer(pServer);
}
};
// IUdpClient 对象创建器
struct UdpClient_Creator
{
static IUdpClient* Create(IUdpClientListener* pListener)
{
return HP_Create_UdpClient(pListener);
}
struct UdpClient_Creator {
static IUdpClient* Create(IUdpClientListener* pListener)
{
return HP_Create_UdpClient(pListener);
}
static void Destroy(IUdpClient* pClient)
{
HP_Destroy_UdpClient(pClient);
}
static void Destroy(IUdpClient* pClient)
{
HP_Destroy_UdpClient(pClient);
}
};
// IUdpCast 对象创建器
struct UdpCast_Creator
{
static IUdpCast* Create(IUdpCastListener* pListener)
{
return HP_Create_UdpCast(pListener);
}
struct UdpCast_Creator {
static IUdpCast* Create(IUdpCastListener* pListener)
{
return HP_Create_UdpCast(pListener);
}
static void Destroy(IUdpCast* pCast)
{
HP_Destroy_UdpCast(pCast);
}
static void Destroy(IUdpCast* pCast)
{
HP_Destroy_UdpCast(pCast);
}
};
// IUdpNode 对象创建器
struct UdpNode_Creator
{
static IUdpNode* Create(IUdpNodeListener* pListener)
{
return HP_Create_UdpNode(pListener);
}
struct UdpNode_Creator {
static IUdpNode* Create(IUdpNodeListener* pListener)
{
return HP_Create_UdpNode(pListener);
}
static void Destroy(IUdpNode* pNode)
{
HP_Destroy_UdpNode(pNode);
}
static void Destroy(IUdpNode* pNode)
{
HP_Destroy_UdpNode(pNode);
}
};
// IUdpArqServer 对象创建器
struct UdpArqServer_Creator
{
static IUdpArqServer* Create(IUdpServerListener* pListener)
{
return HP_Create_UdpArqServer(pListener);
}
struct UdpArqServer_Creator {
static IUdpArqServer* Create(IUdpServerListener* pListener)
{
return HP_Create_UdpArqServer(pListener);
}
static void Destroy(IUdpArqServer* pServer)
{
HP_Destroy_UdpArqServer(pServer);
}
static void Destroy(IUdpArqServer* pServer)
{
HP_Destroy_UdpArqServer(pServer);
}
};
// IUdpArqClient 对象创建器
struct UdpArqClient_Creator
{
static IUdpArqClient* Create(IUdpClientListener* pListener)
{
return HP_Create_UdpArqClient(pListener);
}
struct UdpArqClient_Creator {
static IUdpArqClient* Create(IUdpClientListener* pListener)
{
return HP_Create_UdpArqClient(pListener);
}
static void Destroy(IUdpArqClient* pClient)
{
HP_Destroy_UdpArqClient(pClient);
}
static void Destroy(IUdpArqClient* pClient)
{
HP_Destroy_UdpArqClient(pClient);
}
};
// IUdpServer 对象智能指针
@@ -641,59 +640,55 @@ HPSOCKET_API void HP_Destroy_HttpClient(IHttpClient* pClient);
HPSOCKET_API void HP_Destroy_HttpSyncClient(IHttpSyncClient* pClient);
// IHttpServer 对象创建器
struct HttpServer_Creator
{
static IHttpServer* Create(IHttpServerListener* pListener)
{
return HP_Create_HttpServer(pListener);
}
struct HttpServer_Creator {
static IHttpServer* Create(IHttpServerListener* pListener)
{
return HP_Create_HttpServer(pListener);
}
static void Destroy(IHttpServer* pServer)
{
HP_Destroy_HttpServer(pServer);
}
static void Destroy(IHttpServer* pServer)
{
HP_Destroy_HttpServer(pServer);
}
};
// IHttpAgent 对象创建器
struct HttpAgent_Creator
{
static IHttpAgent* Create(IHttpAgentListener* pListener)
{
return HP_Create_HttpAgent(pListener);
}
struct HttpAgent_Creator {
static IHttpAgent* Create(IHttpAgentListener* pListener)
{
return HP_Create_HttpAgent(pListener);
}
static void Destroy(IHttpAgent* pAgent)
{
HP_Destroy_HttpAgent(pAgent);
}
static void Destroy(IHttpAgent* pAgent)
{
HP_Destroy_HttpAgent(pAgent);
}
};
// IHttpClient 对象创建器
struct HttpClient_Creator
{
static IHttpClient* Create(IHttpClientListener* pListener)
{
return HP_Create_HttpClient(pListener);
}
struct HttpClient_Creator {
static IHttpClient* Create(IHttpClientListener* pListener)
{
return HP_Create_HttpClient(pListener);
}
static void Destroy(IHttpClient* pClient)
{
HP_Destroy_HttpClient(pClient);
}
static void Destroy(IHttpClient* pClient)
{
HP_Destroy_HttpClient(pClient);
}
};
// IHttpSyncClient 对象创建器
struct HttpSyncClient_Creator
{
static IHttpSyncClient* Create(IHttpClientListener* pListener = nullptr)
{
return HP_Create_HttpSyncClient(pListener);
}
struct HttpSyncClient_Creator {
static IHttpSyncClient* Create(IHttpClientListener* pListener = nullptr)
{
return HP_Create_HttpSyncClient(pListener);
}
static void Destroy(IHttpSyncClient* pClient)
{
HP_Destroy_HttpSyncClient(pClient);
}
static void Destroy(IHttpSyncClient* pClient)
{
HP_Destroy_HttpSyncClient(pClient);
}
};
// IHttpServer 对象智能指针
@@ -756,7 +751,7 @@ HPSOCKET_API void HP_Destroy_ThreadPool(IHPThreadPool* pThreadPool);
/*
* 名称:创建 TSocketTask 对象
* 描述:创建任务对象,该对象最终需由 HP_Destroy_SocketTaskObj() 销毁
*
*
* 参数: fnTaskProc -- 任务处理函数
* pSender -- 发起对象
* dwConnID -- 连接 ID
@@ -779,17 +774,16 @@ HPSOCKET_API LPTSocketTask HP_Create_SocketTaskObj(Fn_SocketTaskProc fnTaskProc,
HPSOCKET_API void HP_Destroy_SocketTaskObj(LPTSocketTask pTask);
// IHPThreadPool 对象创建器
struct HPThreadPool_Creator
{
static IHPThreadPool* Create(IHPThreadPoolListener* pListener = nullptr)
{
return HP_Create_ThreadPool(pListener);
}
struct HPThreadPool_Creator {
static IHPThreadPool* Create(IHPThreadPoolListener* pListener = nullptr)
{
return HP_Create_ThreadPool(pListener);
}
static void Destroy(IHPThreadPool* pThreadPool)
{
HP_Destroy_ThreadPool(pThreadPool);
}
static void Destroy(IHPThreadPool* pThreadPool)
{
HP_Destroy_ThreadPool(pThreadPool);
}
};
// IHPThreadPool 对象智能指针

View File

@@ -20,7 +20,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
/* HP-Socket 版本号 */
@@ -37,50 +37,50 @@
/* 是否启用 UDP如果定义了 _UDP_DISABLED 则禁用(默认:启用) */
#if !defined(_UDP_DISABLED)
#ifndef _UDP_SUPPORT
#define _UDP_SUPPORT
#endif
#ifndef _UDP_SUPPORT
#define _UDP_SUPPORT
#endif
#endif
/* 是否启用 SSL如果定义了 _SSL_DISABLED 则禁用(默认:启用) */
#if !defined(_SSL_DISABLED)
#ifndef _SSL_SUPPORT
#define _SSL_SUPPORT
#endif
#ifndef _SSL_SUPPORT
#define _SSL_SUPPORT
#endif
#endif
/* 是否启用 HTTP如果定义了 _HTTP_DISABLED 则禁用(默认:启用) */
#if !defined(_HTTP_DISABLED)
#ifndef _HTTP_SUPPORT
#define _HTTP_SUPPORT
#endif
#ifndef _HTTP_SUPPORT
#define _HTTP_SUPPORT
#endif
#endif
/* 是否启用 ZLIB如果定义了 _ZLIB_DISABLED 则禁用(默认:启用) */
#if !defined(_ZLIB_DISABLED)
#ifndef _ZLIB_SUPPORT
#define _ZLIB_SUPPORT
#endif
#ifndef _ZLIB_SUPPORT
#define _ZLIB_SUPPORT
#endif
#endif
/* 是否启用 BROTLI如果定义了 _BROTLI_DISABLED 则禁用(默认:启用) */
#if !defined(_BROTLI_DISABLED)
#ifndef _BROTLI_SUPPORT
#define _BROTLI_SUPPORT
#endif
#ifndef _BROTLI_SUPPORT
#define _BROTLI_SUPPORT
#endif
#endif
/**************************************************/
/********** imports / exports HPSocket4C **********/
#ifdef HPSOCKET_STATIC_LIB
#define HPSOCKET_API EXTERN_C
#define HPSOCKET_API EXTERN_C
#else
#ifdef HPSOCKET_EXPORTS
#define HPSOCKET_API EXTERN_C __declspec(dllexport)
#else
#define HPSOCKET_API EXTERN_C __declspec(dllimport)
#endif
#ifdef HPSOCKET_EXPORTS
#define HPSOCKET_API EXTERN_C __declspec(dllexport)
#else
#define HPSOCKET_API EXTERN_C __declspec(dllimport)
#endif
#endif
#define __HP_CALL __stdcall
@@ -102,48 +102,44 @@ typedef ULONG_PTR CONNID, HP_CONNID;
名称:通信组件服务状态
描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
************************************************************************/
typedef enum EnServiceState
{
SS_STARTING = 0, // 正在启动
SS_STARTED = 1, // 已经启动
SS_STOPPING = 2, // 正在停止
SS_STOPPED = 3, // 已经停止
typedef enum EnServiceState {
SS_STARTING = 0, // 正在启动
SS_STARTED = 1, // 已经启动
SS_STOPPING = 2, // 正在停止
SS_STOPPED = 3, // 已经停止
} En_HP_ServiceState;
/************************************************************************
名称Socket 操作类型
描述:应用程序的 OnClose() 事件中通过该参数标识是哪种操作导致的错误
************************************************************************/
typedef enum EnSocketOperation
{
SO_UNKNOWN = 0, // Unknown
SO_ACCEPT = 1, // Acccept
SO_CONNECT = 2, // Connect
SO_SEND = 3, // Send
SO_RECEIVE = 4, // Receive
SO_CLOSE = 5, // Close
typedef enum EnSocketOperation {
SO_UNKNOWN = 0, // Unknown
SO_ACCEPT = 1, // Acccept
SO_CONNECT = 2, // Connect
SO_SEND = 3, // Send
SO_RECEIVE = 4, // Receive
SO_CLOSE = 5, // Close
} En_HP_SocketOperation;
/************************************************************************
名称:事件处理结果
描述:事件的返回值,不同的返回值会影响通信组件的后续行为
************************************************************************/
typedef enum EnHandleResult
{
HR_OK = 0, // 成功
HR_IGNORE = 1, // 忽略
HR_ERROR = 2, // 错误
typedef enum EnHandleResult {
HR_OK = 0, // 成功
HR_IGNORE = 1, // 忽略
HR_ERROR = 2, // 错误
} En_HP_HandleResult;
/************************************************************************
名称:数据抓取结果
描述:数据抓取操作的返回值
************************************************************************/
typedef enum EnFetchResult
{
FR_OK = 0, // 成功
FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
FR_DATA_NOT_FOUND = 2, // 找不到 ConnID 对应的数据
typedef enum EnFetchResult {
FR_OK = 0, // 成功
FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
FR_DATA_NOT_FOUND = 2, // 找不到 ConnID 对应的数据
} En_HP_FetchResult;
/************************************************************************
@@ -154,11 +150,10 @@ typedef enum EnFetchResult
* 安全发送策略 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
* 直接发送策略 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
************************************************************************/
typedef enum EnSendPolicy
{
SP_PACK = 0, // 打包模式(默认)
SP_SAFE = 1, // 安全模式
SP_DIRECT = 2, // 直接模式
typedef enum EnSendPolicy {
SP_PACK = 0, // 打包模式(默认)
SP_SAFE = 1, // 安全模式
SP_DIRECT = 2, // 直接模式
} En_HP_SendPolicy;
/************************************************************************
@@ -169,103 +164,95 @@ typedef enum EnSendPolicy
* 同步 OnClose :只同步 OnClose 事件,可能同时触发 OnReceive 事件
* 同步 OnReceive :(只用于 TCP 组件)同步 OnReceive 和 OnClose 事件,不可能同时触发 OnReceive 或 OnClose 事件
************************************************************************/
typedef enum EnOnSendSyncPolicy
{
OSSP_NONE = 0, // 同步(默认)
OSSP_CLOSE = 1, // 同步 OnClose
OSSP_RECEIVE = 2, // 同步 OnReceive只用于 TCP 组件)
typedef enum EnOnSendSyncPolicy {
OSSP_NONE = 0, // 不同步(默认)
OSSP_CLOSE = 1, // 同步 OnClose
OSSP_RECEIVE = 2, // 同步 OnReceive只用于 TCP 组件)
} En_HP_OnSendSyncPolicy;
/************************************************************************
名称:地址重用选项
描述:通信组件底层 socket 的地址重用选项
************************************************************************/
typedef enum EnReuseAddressPolicy
{
RAP_NONE = 0, // 重用
RAP_ADDR_ONLY = 1, // 重用地址
RAP_ADDR_AND_PORT = 2, // 重用地址和端口
typedef enum EnReuseAddressPolicy {
RAP_NONE = 0, // 不重用
RAP_ADDR_ONLY = 1, // 重用地址
RAP_ADDR_AND_PORT = 2, // 重用地址和端口
} En_HP_ReuseAddressPolicy;
/************************************************************************
名称:操作结果代码
描述:组件 Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
************************************************************************/
typedef enum EnSocketError
{
SE_OK = NO_ERROR, // 成功
SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
SE_INVALID_PARAM = 2, // 非法参数
SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
SE_CP_CREATE = 7, // 创建完成端口失败
SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
SE_CONNECT_SERVER = 11, // 连接服务器失败
SE_NETWORK = 12, // 网络错误
SE_DATA_PROC = 13, // 数据处理错误
SE_DATA_SEND = 14, // 数据发送失败
SE_GC_START = 15, // 垃圾回收启动失败
typedef enum EnSocketError {
SE_OK = NO_ERROR, // 成功
SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
SE_INVALID_PARAM = 2, // 非法参数
SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
SE_CP_CREATE = 7, // 创建完成端口失败
SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
SE_CONNECT_SERVER = 11, // 连接服务器失败
SE_NETWORK = 12, // 网络错误
SE_DATA_PROC = 13, // 数据处理错误
SE_DATA_SEND = 14, // 数据发送失败
SE_GC_START = 15, // 垃圾回收启动失败
/***** SSL Socket 扩展操作结果代码 *****/
SE_SSL_ENV_NOT_READY = 101, // SSL 环境未就绪
/***** SSL Socket 扩展操作结果代码 *****/
SE_SSL_ENV_NOT_READY = 101, // SSL 环境未就绪
} En_HP_SocketError;
/************************************************************************
名称:播送模式
描述UDP 组件的播送模式(组播或广播)
************************************************************************/
typedef enum EnCastMode
{
CM_UNICAST = -1, //
CM_MULTICAST = 0, //
CM_BROADCAST = 1, // 广播
typedef enum EnCastMode {
CM_UNICAST = -1, // 单播
CM_MULTICAST = 0, //
CM_BROADCAST = 1, // 广
} En_HP_CastMode;
/************************************************************************
名称IP 地址类型
描述IP 地址类型枚举值
************************************************************************/
typedef enum EnIPAddrType
{
IPT_ALL = 0, // 所有
IPT_IPV4 = 1, // IPv4
IPT_IPV6 = 2, // IPv6
typedef enum EnIPAddrType {
IPT_ALL = 0, // 所有
IPT_IPV4 = 1, // IPv4
IPT_IPV6 = 2, // IPv6
} En_HP_IPAddrType;
/************************************************************************
名称IP 地址条目结构体
描述IP 地址的地址簇/地址值结构体
************************************************************************/
typedef struct TIPAddr
{
En_HP_IPAddrType type;
LPCTSTR address;
typedef struct TIPAddr {
En_HP_IPAddrType type;
LPCTSTR address;
} *LPTIPAddr, HP_TIPAddr, *HP_LPTIPAddr;
/************************************************************************
名称:拒绝策略
描述:调用被拒绝后的处理策略
************************************************************************/
typedef enum EnRejectedPolicy
{
TRP_CALL_FAIL = 0, // 立刻返回失败
TRP_WAIT_FOR = 1, // 等待(直到成功、超时或线程池关闭等原因导致失败)
TRP_CALLER_RUN = 2, // 调用者线程直接执行
typedef enum EnRejectedPolicy {
TRP_CALL_FAIL = 0, // 立刻返回失败
TRP_WAIT_FOR = 1, // 等待(直到成功、超时或线程池关闭等原因导致失败
TRP_CALLER_RUN = 2, // 调用者线程直接执行
} En_HP_RejectedPolicy;
/************************************************************************
名称:任务缓冲区类型
描述TSockeTask 对象创建和销毁时,根据不同类型的缓冲区类型作不同的处理
************************************************************************/
typedef enum EnTaskBufferType
{
TBT_COPY = 0, // 拷贝
TBT_REFER = 1, // 浅拷贝
TBT_ATTACH = 2, // 附属(不负责创建,但负责销毁)
typedef enum EnTaskBufferType {
TBT_COPY = 0, // 深拷贝
TBT_REFER = 1, // 拷贝
TBT_ATTACH = 2, // 附属(不负责创建,但负责销毁)
} En_HP_TaskBufferType;
/************************************************************************
@@ -292,16 +279,15 @@ typedef Fn_SocketTaskProc HP_Fn_SocketTaskProc;
名称Socket 任务结构体
描述:封装 Socket 任务相关数据结构
************************************************************************/
typedef struct TSocketTask
{
HP_Fn_SocketTaskProc fn; // 任务处理函数
PVOID sender; // 发起对象
CONNID connID; // 连接 ID
LPCBYTE buf; // 数据缓冲区
INT bufLen; // 数据缓冲区长度
En_HP_TaskBufferType bufType; // 缓冲区类型
WPARAM wparam; // 自定义参数
LPARAM lparam; // 自定义参数
typedef struct TSocketTask {
HP_Fn_SocketTaskProc fn; // 任务处理函数
PVOID sender; // 发起对象
CONNID connID; // 连接 ID
LPCBYTE buf; // 数据缓冲区
INT bufLen; // 数据缓冲区长度
En_HP_TaskBufferType bufType; // 缓冲区类型
WPARAM wparam; // 自定义参数
LPARAM lparam; // 自定义参数
} *LPTSocketTask, HP_TSocketTask, *HP_LPTSocketTask;
/************************************************************************
@@ -310,7 +296,7 @@ typedef struct TSocketTask
************************************************************************/
inline DWORD GetHPSocketVersion()
{
return (HP_VERSION_MAJOR << 24) | (HP_VERSION_MINOR << 16) | (HP_VERSION_REVISE << 8) | HP_VERSION_BUILD;
return (HP_VERSION_MAJOR << 24) | (HP_VERSION_MINOR << 16) | (HP_VERSION_REVISE << 8) | HP_VERSION_BUILD;
}
/*****************************************************************************************************************************************************/
@@ -323,54 +309,51 @@ inline DWORD GetHPSocketVersion()
名称SSL 工作模式
描述:标识 SSL 的工作模式,客户端模式或服务端模式
************************************************************************/
typedef enum EnSSLSessionMode
{
SSL_SM_CLIENT = 0, // 客户端模式
SSL_SM_SERVER = 1, // 服务端模式
typedef enum EnSSLSessionMode {
SSL_SM_CLIENT = 0, // 客户端模式
SSL_SM_SERVER = 1, // 服务端模式
} En_HP_SSLSessionMode;
/************************************************************************
名称SSL 验证模式
描述SSL 验证模式选项SSL_VM_PEER 可以和后面两个选项组合一起
************************************************************************/
typedef enum EnSSLVerifyMode
{
SSL_VM_NONE = 0x00, // SSL_VERIFY_NONE
SSL_VM_PEER = 0x01, // SSL_VERIFY_PEER
SSL_VM_FAIL_IF_NO_PEER_CERT = 0x02, // SSL_VERIFY_FAIL_IF_NO_PEER_CERT
SSL_VM_CLIENT_ONCE = 0x04, // SSL_VERIFY_CLIENT_ONCE
typedef enum EnSSLVerifyMode {
SSL_VM_NONE = 0x00, // SSL_VERIFY_NONE
SSL_VM_PEER = 0x01, // SSL_VERIFY_PEER
SSL_VM_FAIL_IF_NO_PEER_CERT = 0x02, // SSL_VERIFY_FAIL_IF_NO_PEER_CERT
SSL_VM_CLIENT_ONCE = 0x04, // SSL_VERIFY_CLIENT_ONCE
} En_HP_SSLVerifyMode;
/************************************************************************
名称SSL Session 信息类型
描述:用于 GetSSLSessionInfo(),标识输出的 Session 信息类型
************************************************************************/
typedef enum EnSSLSessionInfo
{
SSL_SSI_MIN = 0, //
SSL_SSI_CTX = 0, // SSL CTX 输出类型SSL_CTX*
SSL_SSI_CTX_METHOD = 1, // SSL CTX Mehtod 输出类型SSL_METHOD*
SSL_SSI_CTX_CIPHERS = 2, // SSL CTX Ciphers 输出类型STACK_OF(SSL_CIPHER)*
SSL_SSI_CTX_CERT_STORE = 3, // SSL CTX Cert Store 输出类型X509_STORE*
SSL_SSI_SERVER_NAME_TYPE = 4, // Server Name Type (输出类型:int
SSL_SSI_SERVER_NAME = 5, // Server Name 输出类型LPCSTR
SSL_SSI_VERSION = 6, // SSL Version (输出类型:LPCSTR
SSL_SSI_METHOD = 7, // SSL Method (输出类型:SSL_METHOD*
SSL_SSI_CERT = 8, // SSL Cert 输出类型X509*
SSL_SSI_PKEY = 9, // SSL Private Key 输出类型EVP_PKEY*
SSL_SSI_CURRENT_CIPHER = 10, // SSL Current Cipher 输出类型SSL_CIPHER*
SSL_SSI_CIPHERS = 11, // SSL Available Ciphers输出类型STACK_OF(SSL_CIPHER)*
SSL_SSI_CLIENT_CIPHERS = 12, // SSL Client Ciphers 输出类型STACK_OF(SSL_CIPHER)*
SSL_SSI_PEER_CERT = 13, // SSL Peer Cert 输出类型X509*
SSL_SSI_PEER_CERT_CHAIN = 14, // SSL Peer Cert Chain 输出类型STACK_OF(X509)*
SSL_SSI_VERIFIED_CHAIN = 15, // SSL Verified Chain 输出类型STACK_OF(X509)*
SSL_SSI_MAX = 15, //
typedef enum EnSSLSessionInfo {
SSL_SSI_MIN = 0, //
SSL_SSI_CTX = 0, // SSL CTX 输出类型SSL_CTX*
SSL_SSI_CTX_METHOD = 1, // SSL CTX Mehtod 输出类型SSL_METHOD*
SSL_SSI_CTX_CIPHERS = 2, // SSL CTX Ciphers 输出类型STACK_OF(SSL_CIPHER)*
SSL_SSI_CTX_CERT_STORE = 3, // SSL CTX Cert Store 输出类型X509_STORE*
SSL_SSI_SERVER_NAME_TYPE = 4, // Server Name Type 输出类型int
SSL_SSI_SERVER_NAME = 5, // Server Name (输出类型:LPCSTR
SSL_SSI_VERSION = 6, // SSL Version 输出类型LPCSTR
SSL_SSI_METHOD = 7, // SSL Method (输出类型:SSL_METHOD*
SSL_SSI_CERT = 8, // SSL Cert (输出类型:X509*
SSL_SSI_PKEY = 9, // SSL Private Key 输出类型EVP_PKEY*
SSL_SSI_CURRENT_CIPHER = 10, // SSL Current Cipher 输出类型SSL_CIPHER*
SSL_SSI_CIPHERS = 11, // SSL Available Ciphers(输出类型:STACK_OF(SSL_CIPHER)*
SSL_SSI_CLIENT_CIPHERS = 12, // SSL Client Ciphers 输出类型STACK_OF(SSL_CIPHER)*
SSL_SSI_PEER_CERT = 13, // SSL Peer Cert 输出类型X509*
SSL_SSI_PEER_CERT_CHAIN = 14, // SSL Peer Cert Chain (输出类型:STACK_OF(X509)*
SSL_SSI_VERIFIED_CHAIN = 15, // SSL Verified Chain 输出类型STACK_OF(X509)*
SSL_SSI_MAX = 15, //
} En_HP_SSLSessionInfo;
/************************************************************************
名称SNI 服务名称回调函数
描述:根据服务器名称选择 SSL 证书
参数:
参数:
lpszServerName -- 服务器名称(域名)
返回值:
@@ -395,177 +378,171 @@ typedef Fn_SNI_ServerNameCallback HP_Fn_SNI_ServerNameCallback;
描述:低字节:主版本号,高字节:次版本号
************************************************************************/
typedef enum EnHttpVersion
{
HV_1_0 = MAKEWORD(1, 0), // HTTP/1.0
HV_1_1 = MAKEWORD(1, 1) // HTTP/1.1
typedef enum EnHttpVersion {
HV_1_0 = MAKEWORD(1, 0), // HTTP/1.0
HV_1_1 = MAKEWORD(1, 1) // HTTP/1.1
} En_HP_HttpVersion;
/************************************************************************
名称URL 域
描述HTTP 请求行中 URL 段位的域定义
************************************************************************/
typedef enum EnHttpUrlField
{
HUF_SCHEMA = 0, // Schema
HUF_HOST = 1, // Host
HUF_PORT = 2, // Port
HUF_PATH = 3, // Path
HUF_QUERY = 4, // Query String
HUF_FRAGMENT = 5, // Fragment
HUF_USERINFO = 6, // User Info
HUF_MAX = 7, // (Field Count)
typedef enum EnHttpUrlField {
HUF_SCHEMA = 0, // Schema
HUF_HOST = 1, // Host
HUF_PORT = 2, // Port
HUF_PATH = 3, // Path
HUF_QUERY = 4, // Query String
HUF_FRAGMENT = 5, // Fragment
HUF_USERINFO = 6, // User Info
HUF_MAX = 7, // (Field Count)
} En_HP_HttpUrlField;
/************************************************************************
名称HTTP 解析结果标识
描述:指示 HTTP 解析器是否继续执行解析操作
************************************************************************/
typedef enum EnHttpParseResult
{
HPR_OK = 0, // 解析成功
HPR_SKIP_BODY = 1, // 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)
HPR_UPGRADE = 2, // 升级协议(仅用于 OnHeadersComplete 事件)
HPR_ERROR = -1, // 解析错误,终止解析,断开连接
typedef enum EnHttpParseResult {
HPR_OK = 0, // 解析成功
HPR_SKIP_BODY = 1, // 跳过当前请求 BODY仅用于 OnHeadersComplete 事件)
HPR_UPGRADE = 2, // 升级协议(仅用于 OnHeadersComplete 事件)
HPR_ERROR = -1, // 解析错误,终止解析,断开连接
} En_HP_HttpParseResult;
/************************************************************************
名称HTTP 协议升级类型
描述:标识 HTTP 升级为哪种协议
************************************************************************/
typedef enum EnHttpUpgradeType
{
HUT_NONE = 0, // 没有升级
HUT_WEB_SOCKET = 1, // WebSocket
HUT_HTTP_TUNNEL = 2, // HTTP 隧道
HUT_UNKNOWN = -1, // 未知类型
typedef enum EnHttpUpgradeType {
HUT_NONE = 0, // 没有升级
HUT_WEB_SOCKET = 1, // WebSocket
HUT_HTTP_TUNNEL = 2, // HTTP 隧道
HUT_UNKNOWN = -1, // 未知类型
} En_HP_HttpUpgradeType;
/************************************************************************
名称HTTP 状态码
描述HTTP 标准状态码
************************************************************************/
typedef enum EnHttpStatusCode
{
HSC_CONTINUE = 100,
HSC_SWITCHING_PROTOCOLS = 101,
HSC_PROCESSING = 102,
HSC_EARLY_HINTS = 103,
HSC_RESPONSE_IS_STALE = 110,
HSC_REVALIDATION_FAILED = 111,
HSC_DISCONNECTED_OPERATION = 112,
HSC_HEURISTIC_EXPIRATION = 113,
HSC_MISCELLANEOUS_WARNING = 199,
typedef enum EnHttpStatusCode {
HSC_CONTINUE = 100,
HSC_SWITCHING_PROTOCOLS = 101,
HSC_PROCESSING = 102,
HSC_EARLY_HINTS = 103,
HSC_RESPONSE_IS_STALE = 110,
HSC_REVALIDATION_FAILED = 111,
HSC_DISCONNECTED_OPERATION = 112,
HSC_HEURISTIC_EXPIRATION = 113,
HSC_MISCELLANEOUS_WARNING = 199,
HSC_OK = 200,
HSC_CREATED = 201,
HSC_ACCEPTED = 202,
HSC_NON_AUTHORITATIVE_INFORMATION = 203,
HSC_NO_CONTENT = 204,
HSC_RESET_CONTENT = 205,
HSC_PARTIAL_CONTENT = 206,
HSC_MULTI_STATUS = 207,
HSC_ALREADY_REPORTED = 208,
HSC_TRANSFORMATION_APPLIED = 214,
HSC_IM_USED = 226,
HSC_MISCELLANEOUS_PERSISTENT_WARNING = 299,
HSC_OK = 200,
HSC_CREATED = 201,
HSC_ACCEPTED = 202,
HSC_NON_AUTHORITATIVE_INFORMATION = 203,
HSC_NO_CONTENT = 204,
HSC_RESET_CONTENT = 205,
HSC_PARTIAL_CONTENT = 206,
HSC_MULTI_STATUS = 207,
HSC_ALREADY_REPORTED = 208,
HSC_TRANSFORMATION_APPLIED = 214,
HSC_IM_USED = 226,
HSC_MISCELLANEOUS_PERSISTENT_WARNING = 299,
HSC_MULTIPLE_CHOICES = 300,
HSC_MOVED_PERMANENTLY = 301,
HSC_MOVED_TEMPORARILY = 302,
HSC_SEE_OTHER = 303,
HSC_NOT_MODIFIED = 304,
HSC_USE_PROXY = 305,
HSC_SWITCH_PROXY = 306,
HSC_TEMPORARY_REDIRECT = 307,
HSC_PERMANENT_REDIRECT = 308,
HSC_MULTIPLE_CHOICES = 300,
HSC_MOVED_PERMANENTLY = 301,
HSC_MOVED_TEMPORARILY = 302,
HSC_SEE_OTHER = 303,
HSC_NOT_MODIFIED = 304,
HSC_USE_PROXY = 305,
HSC_SWITCH_PROXY = 306,
HSC_TEMPORARY_REDIRECT = 307,
HSC_PERMANENT_REDIRECT = 308,
HSC_BAD_REQUEST = 400,
HSC_UNAUTHORIZED = 401,
HSC_PAYMENT_REQUIRED = 402,
HSC_FORBIDDEN = 403,
HSC_NOT_FOUND = 404,
HSC_METHOD_NOT_ALLOWED = 405,
HSC_NOT_ACCEPTABLE = 406,
HSC_PROXY_AUTHENTICATION_REQUIRED = 407,
HSC_REQUEST_TIMEOUT = 408,
HSC_CONFLICT = 409,
HSC_GONE = 410,
HSC_LENGTH_REQUIRED = 411,
HSC_PRECONDITION_FAILED = 412,
HSC_REQUEST_ENTITY_TOO_LARGE = 413,
HSC_REQUEST_URI_TOO_LONG = 414,
HSC_UNSUPPORTED_MEDIA_TYPE = 415,
HSC_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
HSC_EXPECTATION_FAILED = 417,
HSC_IM_A_TEAPOT = 418,
HSC_PAGE_EXPIRED = 419,
HSC_ENHANCE_YOUR_CALM = 420,
HSC_MISDIRECTED_REQUEST = 421,
HSC_UNPROCESSABLE_ENTITY = 422,
HSC_LOCKED = 423,
HSC_FAILED_DEPENDENCY = 424,
HSC_UNORDERED_COLLECTION = 425,
HSC_UPGRADE_REQUIRED = 426,
HSC_PRECONDITION_REQUIRED = 428,
HSC_TOO_MANY_REQUESTS = 429,
HSC_REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL = 430,
HSC_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
HSC_LOGIN_TIMEOUT = 440,
HSC_NO_RESPONSE = 444,
HSC_RETRY_WITH = 449,
HSC_BLOCKED_BY_PARENTAL_CONTROL = 450,
HSC_UNAVAILABLE_FOR_LEGAL_REASONS = 451,
HSC_CLIENT_CLOSED_LOAD_BALANCED_REQUEST = 460,
HSC_INVALID_X_FORWARDED_FOR = 463,
HSC_REQUEST_HEADER_TOO_LARGE = 494,
HSC_SSL_CERTIFICATE_ERROR = 495,
HSC_SSL_CERTIFICATE_REQUIRED = 496,
HSC_HTTP_REQUEST_SENT_TO_HTTPS_PORT = 497,
HSC_INVALID_TOKEN = 498,
HSC_CLIENT_CLOSED_REQUEST = 499,
HSC_BAD_REQUEST = 400,
HSC_UNAUTHORIZED = 401,
HSC_PAYMENT_REQUIRED = 402,
HSC_FORBIDDEN = 403,
HSC_NOT_FOUND = 404,
HSC_METHOD_NOT_ALLOWED = 405,
HSC_NOT_ACCEPTABLE = 406,
HSC_PROXY_AUTHENTICATION_REQUIRED = 407,
HSC_REQUEST_TIMEOUT = 408,
HSC_CONFLICT = 409,
HSC_GONE = 410,
HSC_LENGTH_REQUIRED = 411,
HSC_PRECONDITION_FAILED = 412,
HSC_REQUEST_ENTITY_TOO_LARGE = 413,
HSC_REQUEST_URI_TOO_LONG = 414,
HSC_UNSUPPORTED_MEDIA_TYPE = 415,
HSC_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
HSC_EXPECTATION_FAILED = 417,
HSC_IM_A_TEAPOT = 418,
HSC_PAGE_EXPIRED = 419,
HSC_ENHANCE_YOUR_CALM = 420,
HSC_MISDIRECTED_REQUEST = 421,
HSC_UNPROCESSABLE_ENTITY = 422,
HSC_LOCKED = 423,
HSC_FAILED_DEPENDENCY = 424,
HSC_UNORDERED_COLLECTION = 425,
HSC_UPGRADE_REQUIRED = 426,
HSC_PRECONDITION_REQUIRED = 428,
HSC_TOO_MANY_REQUESTS = 429,
HSC_REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL = 430,
HSC_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
HSC_LOGIN_TIMEOUT = 440,
HSC_NO_RESPONSE = 444,
HSC_RETRY_WITH = 449,
HSC_BLOCKED_BY_PARENTAL_CONTROL = 450,
HSC_UNAVAILABLE_FOR_LEGAL_REASONS = 451,
HSC_CLIENT_CLOSED_LOAD_BALANCED_REQUEST = 460,
HSC_INVALID_X_FORWARDED_FOR = 463,
HSC_REQUEST_HEADER_TOO_LARGE = 494,
HSC_SSL_CERTIFICATE_ERROR = 495,
HSC_SSL_CERTIFICATE_REQUIRED = 496,
HSC_HTTP_REQUEST_SENT_TO_HTTPS_PORT = 497,
HSC_INVALID_TOKEN = 498,
HSC_CLIENT_CLOSED_REQUEST = 499,
HSC_INTERNAL_SERVER_ERROR = 500,
HSC_NOT_IMPLEMENTED = 501,
HSC_BAD_GATEWAY = 502,
HSC_SERVICE_UNAVAILABLE = 503,
HSC_GATEWAY_TIMEOUT = 504,
HSC_HTTP_VERSION_NOT_SUPPORTED = 505,
HSC_VARIANT_ALSO_NEGOTIATES = 506,
HSC_INSUFFICIENT_STORAGE = 507,
HSC_LOOP_DETECTED = 508,
HSC_BANDWIDTH_LIMIT_EXCEEDED = 509,
HSC_NOT_EXTENDED = 510,
HSC_NETWORK_AUTHENTICATION_REQUIRED = 511,
HSC_WEB_SERVER_UNKNOWN_ERROR = 520,
HSC_WEB_SERVER_IS_DOWN = 521,
HSC_CONNECTION_TIMEOUT = 522,
HSC_ORIGIN_IS_UNREACHABLE = 523,
HSC_TIMEOUT_OCCURED = 524,
HSC_SSL_HANDSHAKE_FAILED = 525,
HSC_INVALID_SSL_CERTIFICATE = 526,
HSC_RAILGUN_ERROR = 527,
HSC_SITE_IS_OVERLOADED = 529,
HSC_SITE_IS_FROZEN = 530,
HSC_IDENTITY_PROVIDER_AUTHENTICATION_ERROR = 561,
HSC_NETWORK_READ_TIMEOUT = 598,
HSC_NETWORK_CONNECT_TIMEOUT = 599,
HSC_INTERNAL_SERVER_ERROR = 500,
HSC_NOT_IMPLEMENTED = 501,
HSC_BAD_GATEWAY = 502,
HSC_SERVICE_UNAVAILABLE = 503,
HSC_GATEWAY_TIMEOUT = 504,
HSC_HTTP_VERSION_NOT_SUPPORTED = 505,
HSC_VARIANT_ALSO_NEGOTIATES = 506,
HSC_INSUFFICIENT_STORAGE = 507,
HSC_LOOP_DETECTED = 508,
HSC_BANDWIDTH_LIMIT_EXCEEDED = 509,
HSC_NOT_EXTENDED = 510,
HSC_NETWORK_AUTHENTICATION_REQUIRED = 511,
HSC_WEB_SERVER_UNKNOWN_ERROR = 520,
HSC_WEB_SERVER_IS_DOWN = 521,
HSC_CONNECTION_TIMEOUT = 522,
HSC_ORIGIN_IS_UNREACHABLE = 523,
HSC_TIMEOUT_OCCURED = 524,
HSC_SSL_HANDSHAKE_FAILED = 525,
HSC_INVALID_SSL_CERTIFICATE = 526,
HSC_RAILGUN_ERROR = 527,
HSC_SITE_IS_OVERLOADED = 529,
HSC_SITE_IS_FROZEN = 530,
HSC_IDENTITY_PROVIDER_AUTHENTICATION_ERROR = 561,
HSC_NETWORK_READ_TIMEOUT = 598,
HSC_NETWORK_CONNECT_TIMEOUT = 599,
HSC_UNPARSEABLE_RESPONSE_HEADERS = 600
HSC_UNPARSEABLE_RESPONSE_HEADERS = 600
} En_HP_HttpStatusCode;
/************************************************************************
名称Name/Value 结构体
描述:字符串名值对结构体
************************************************************************/
typedef struct TNVPair
{
LPCSTR name;
LPCSTR value;
typedef struct TNVPair {
LPCSTR name;
LPCSTR value;
} HP_TNVPair,
TParam, HP_TParam, *LPPARAM, *HP_LPPARAM,
THeader, HP_THeader, *LPHEADER, *HP_LPHEADER,
TCookie, HP_TCookie, *LPCOOKIE, *HP_LPCOOKIE;
TParam, HP_TParam, *LPPARAM, *HP_LPPARAM,
THeader, HP_THeader, *LPHEADER, *HP_LPHEADER,
TCookie, HP_TCookie, *LPCOOKIE, *HP_LPCOOKIE;
#endif
@@ -576,7 +553,7 @@ TCookie, HP_TCookie, *LPCOOKIE, *HP_LPCOOKIE;
/************************************************************************
名称:数据回调函数
描述:回调处理过程中产生的数据输出
参数:
参数:
pData -- 数据缓冲区
iLength -- 数据长度
pContext -- 回调上下文

View File

@@ -48,19 +48,18 @@ EnHandleResult CProxyConnectServer::OnAccept(ITcpServer* pSender, CONNID dwConnI
if (!m_bIsRun)return HR_ERROR;
ClientContext* pContext = NULL;
{
m_Locker.lock();
if (!m_listFreePool.IsEmpty()) {
pContext = m_listFreePool.RemoveHead();
}
else {
pContext = new(std::nothrow) ClientContext;
}
m_Locker.unlock();
}
{
m_Locker.lock();
if (!m_listFreePool.IsEmpty()) {
pContext = m_listFreePool.RemoveHead();
} else {
pContext = new(std::nothrow) ClientContext;
}
m_Locker.unlock();
}
if (pContext == NULL)
return HR_ERROR;
pContext->InitMember(dwConnID, nullptr);
pContext->m_Socket = dwConnID;
char szAddress[64] = {};
@@ -129,8 +128,8 @@ BOOL CProxyConnectServer::Send(ClientContext* pContext, LPBYTE lpData, UINT nSiz
BOOL rt = FALSE;;
if (nSize > 0 && m_bIsRun) {
pContext->OutCompressedBuffer.Write(lpData, nSize);
rt = SendWithSplit(pContext->m_Socket, pContext->OutCompressedBuffer.GetBuffer(0),
pContext->OutCompressedBuffer.GetBufferLength(), MAX_SEND_BUFFER);
rt = SendWithSplit(pContext->m_Socket, pContext->OutCompressedBuffer.GetBuffer(0),
pContext->OutCompressedBuffer.GetBufferLength(), MAX_SEND_BUFFER);
pContext->OutCompressedBuffer.ClearBuffer();
}
return rt;
@@ -193,8 +192,8 @@ void CProxyConnectServer::Shutdown()
void CProxyConnectServer::ClearClient()
{
DWORD dwCount = 65535;
CONNID* pIDs = new CONNID[dwCount]();
DWORD dwCount = 65535;
CONNID* pIDs = new CONNID[dwCount]();
BOOL status = m_TcpServer->GetAllConnectionIDs(pIDs, dwCount);
if (status && (dwCount > 0)) {
for (DWORD i = 0; i < dwCount; i++) {
@@ -202,7 +201,7 @@ void CProxyConnectServer::ClearClient()
}
}
SAFE_DELETE_ARRAY(pIDs);
SAFE_DELETE_ARRAY(pIDs);
}
BOOL CProxyConnectServer::Disconnect(CONNID dwConnID)

View File

@@ -38,10 +38,10 @@ public:
CTcpPullServerPtr m_TcpServer;
private:
NOTIFYPROC m_pNotifyProc;
NOTIFYPROC m_pNotifyProc;
void* m_pUser;
ContextList m_listFreePool;
CLock m_Locker;
ContextList m_listFreePool;
CLock m_Locker;
int m_nPort; // <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
CONNID m_IDs[65535]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
LONG m_bStop; // <20>˿<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>

View File

@@ -53,17 +53,17 @@ BOOL CProxyMapDlg::OnInitDialog()
// <20><><EFBFBD><EFBFBD>IPCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nPort = 5543;
if (!m_iocpLocal->Initialize(NotifyProc, this, 100000, m_nPort)) {
MessageBox("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!", "<EFBFBD><EFBFBD>ʾ");
if (!m_iocpLocal->Initialize(NotifyProc, this, 100000, m_nPort)) {
MessageBox("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!", "<EFBFBD><EFBFBD>ʾ");
return FALSE;
}
}
TCHAR ip[256] = {};
int len = sizeof(ip);
m_iocpLocal->m_TcpServer->GetListenAddress(ip, len, m_nPort);
CString strString;
strString.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(strString);
CString strString;
strString.Format("%s - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", m_IPAddress);
SetWindowText(strString);
str.Format(_T("SOCKS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>Ϊ: <127.0.0.1:%d>\r\n"), m_nPort);
AddLog(str.GetBuffer(0));
@@ -80,13 +80,13 @@ BOOL CProxyMapDlg::OnInitDialog()
void CProxyMapDlg::OnCancel()
{
m_bIsClosed = true;
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
m_iocpLocal->Shutdown();
SAFE_DELETE(m_iocpLocal);
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
m_iocpLocal->Shutdown();
SAFE_DELETE(m_iocpLocal);
CancelIO();
@@ -119,7 +119,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
case NC_RECEIVE:
if (pContext->m_bProxyConnected == 2) {
g_pProxyMap->m_ContextObject->Send2Client(pContext->InDeCompressedBuffer.GetBuffer(0),
pContext->InDeCompressedBuffer.GetBufferLength());
pContext->InDeCompressedBuffer.GetBufferLength());
wsprintf(szMsg, _T("%d <==<3D><> %d bytes\r\n"), index, pContext->InDeCompressedBuffer.GetBufferLength() - 5);
} else if (pContext->m_bProxyConnected == 0) {
char msg_auth_ok[] = { 0X05, 0X00 }; // VERSION SOCKS, AUTH MODE, OK

View File

@@ -53,7 +53,7 @@ public:
private:
CProxyConnectServer* m_iocpLocal;
CEdit m_Edit;
USHORT m_nPort;
CEdit m_Edit;
USHORT m_nPort;
CEdit m_EditOther;
};

File diff suppressed because it is too large Load Diff

View File

@@ -18,187 +18,196 @@
#pragma comment(lib, "bcrypt.lib")
// ִ<><D6B4>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EEA3AC>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD>Ϣ
std::string execCommand(const char* cmd) {
// <20><><EFBFBD>ùܵ<C3B9><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
std::string execCommand(const char* cmd)
{
// <20><><EFBFBD>ùܵ<C3B9><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺܵ<C4B9>
HANDLE hStdOutRead, hStdOutWrite;
if (!CreatePipe(&hStdOutRead, &hStdOutWrite, &saAttr, 0)) {
Mprintf("CreatePipe failed with error: %d\n", GetLastError());
return "ERROR";
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺܵ<C4B9>
HANDLE hStdOutRead, hStdOutWrite;
if (!CreatePipe(&hStdOutRead, &hStdOutWrite, &saAttr, 0)) {
Mprintf("CreatePipe failed with error: %d\n", GetLastError());
return "ERROR";
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hStdOutWrite; // <20><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>򵽹ܵ<F2B5BDB9>
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hStdOutWrite; // <20><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>򵽹ܵ<F2B5BDB9>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!CreateProcess(
NULL, // Ӧ<>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(LPSTR)cmd, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NULL, // <20><><EFBFBD>̰<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
NULL, // <20>̰߳<DFB3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
TRUE, // <20>Ƿ<EFBFBD><C7B7>̳о<CCB3><D0BE><EFBFBD>
0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
NULL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NULL, // <20><>ǰĿ¼
&si, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
&pi // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
)) {
Mprintf("CreateProcess failed with error: %d\n", GetLastError());
return "ERROR";
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!CreateProcess(
NULL, // Ӧ<>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(LPSTR)cmd, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NULL, // <20><><EFBFBD>̰<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
NULL, // <20>̰߳<DFB3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
TRUE, // <20>Ƿ<EFBFBD><C7B7>̳о<CCB3><D0BE><EFBFBD>
0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
NULL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NULL, // <20><>ǰĿ¼
&si, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
&pi // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
)) {
Mprintf("CreateProcess failed with error: %d\n", GetLastError());
return "ERROR";
}
// <20>ر<EFBFBD>д<EFBFBD><D0B4><EFBFBD>˾<EFBFBD><CBBE><EFBFBD>
CloseHandle(hStdOutWrite);
// <20>ر<EFBFBD>д<EFBFBD><D0B4><EFBFBD>˾<EFBFBD><CBBE><EFBFBD>
CloseHandle(hStdOutWrite);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char buffer[128];
std::string result = "";
DWORD bytesRead;
while (ReadFile(hStdOutRead, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
result.append(buffer, bytesRead);
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char buffer[128];
std::string result = "";
DWORD bytesRead;
while (ReadFile(hStdOutRead, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
result.append(buffer, bytesRead);
}
// <20>رն<D8B1>ȡ<EFBFBD>˾<EFBFBD><CBBE><EFBFBD>
CloseHandle(hStdOutRead);
// <20>رն<D8B1>ȡ<EFBFBD>˾<EFBFBD><CBBE><EFBFBD>
CloseHandle(hStdOutRead);
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WaitForSingleObject(pi.hProcess, INFINITE);
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WaitForSingleObject(pi.hProcess, INFINITE);
// <20>رս<D8B1><D5BD>̺<EFBFBD><CCBA>߳̾<DFB3><CCBE><EFBFBD>
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
// <20>رս<D8B1><D5BD>̺<EFBFBD><CCBA>߳̾<DFB3><CCBE><EFBFBD>
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
// ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7>Ϳո<CDBF>
result.erase(remove(result.begin(), result.end(), '\n'), result.end());
result.erase(remove(result.begin(), result.end(), '\r'), result.end());
// ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7>Ϳո<CDBF>
result.erase(remove(result.begin(), result.end(), '\n'), result.end());
result.erase(remove(result.begin(), result.end(), '\r'), result.end());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return result;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return result;
}
// <20><>ȡӲ<C8A1><D3B2> ID<49><44>CPU + <20><><EFBFBD><EFBFBD> + Ӳ<>̣<EFBFBD>
std::string getHardwareID() {
std::string cpuID = execCommand("wmic cpu get processorid");
std::string boardID = execCommand("wmic baseboard get serialnumber");
std::string diskID = execCommand("wmic diskdrive get serialnumber");
std::string getHardwareID()
{
std::string cpuID = execCommand("wmic cpu get processorid");
std::string boardID = execCommand("wmic baseboard get serialnumber");
std::string diskID = execCommand("wmic diskdrive get serialnumber");
std::string combinedID = cpuID + "|" + boardID + "|" + diskID;
return combinedID;
std::string combinedID = cpuID + "|" + boardID + "|" + diskID;
return combinedID;
}
// ʹ<><CAB9> SHA-256 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ
std::string hashSHA256(const std::string& data) {
HCRYPTPROV hProv;
HCRYPTHASH hHash;
BYTE hash[32];
DWORD hashLen = 32;
std::ostringstream result;
std::string hashSHA256(const std::string& data)
{
HCRYPTPROV hProv;
HCRYPTHASH hHash;
BYTE hash[32];
DWORD hashLen = 32;
std::ostringstream result;
if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT) &&
CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash)) {
if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT) &&
CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash)) {
CryptHashData(hHash, (BYTE*)data.c_str(), data.length(), 0);
CryptGetHashParam(hHash, HP_HASHVAL, hash, &hashLen, 0);
CryptHashData(hHash, (BYTE*)data.c_str(), data.length(), 0);
CryptGetHashParam(hHash, HP_HASHVAL, hash, &hashLen, 0);
for (DWORD i = 0; i < hashLen; i++) {
result << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i];
}
for (DWORD i = 0; i < hashLen; i++) {
result << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i];
}
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
}
return result.str();
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
}
return result.str();
}
std::string genHMAC(const std::string& pwdHash, const std::string& superPass) {
std::string key = hashSHA256(superPass);
std::vector<std::string> list({ "g","h","o","s","t" });
for (int i = 0; i < list.size(); ++i)
key = hashSHA256(key + " - " + list.at(i));
return hashSHA256(pwdHash + " - " + key).substr(0, 16);
std::string genHMAC(const std::string& pwdHash, const std::string& superPass)
{
std::string key = hashSHA256(superPass);
std::vector<std::string> list({ "g","h","o","s","t" });
for (int i = 0; i < list.size(); ++i)
key = hashSHA256(key + " - " + list.at(i));
return hashSHA256(pwdHash + " - " + key).substr(0, 16);
}
// <20><><EFBFBD><EFBFBD> 16 <20>ַ<EFBFBD><D6B7><EFBFBD>Ψһ<CEA8>豸 ID
std::string getFixedLengthID(const std::string& hash) {
return hash.substr(0, 4) + "-" + hash.substr(4, 4) + "-" + hash.substr(8, 4) + "-" + hash.substr(12, 4);
std::string getFixedLengthID(const std::string& hash)
{
return hash.substr(0, 4) + "-" + hash.substr(4, 4) + "-" + hash.substr(8, 4) + "-" + hash.substr(12, 4);
}
std::string deriveKey(const std::string& password, const std::string& hardwareID) {
return hashSHA256(password + " + " + hardwareID);
std::string deriveKey(const std::string& password, const std::string& hardwareID)
{
return hashSHA256(password + " + " + hardwareID);
}
std::string getDeviceID() {
std::string hardwareID = getHardwareID();
std::string hashedID = hashSHA256(hardwareID);
std::string deviceID = getFixedLengthID(hashedID);
return deviceID;
std::string getDeviceID()
{
std::string hardwareID = getHardwareID();
std::string hashedID = hashSHA256(hardwareID);
std::string deviceID = getFixedLengthID(hashedID);
return deviceID;
}
uint64_t SignMessage(const std::string& pwd, BYTE* msg, int len) {
BCRYPT_ALG_HANDLE hAlg = nullptr;
BCRYPT_HASH_HANDLE hHash = nullptr;
BYTE hash[32]; // SHA256 = 32 bytes
DWORD hashObjectSize = 0;
DWORD dataLen = 0;
PBYTE hashObject = nullptr;
uint64_t result = 0;
uint64_t SignMessage(const std::string& pwd, BYTE* msg, int len)
{
BCRYPT_ALG_HANDLE hAlg = nullptr;
BCRYPT_HASH_HANDLE hHash = nullptr;
BYTE hash[32]; // SHA256 = 32 bytes
DWORD hashObjectSize = 0;
DWORD dataLen = 0;
PBYTE hashObject = nullptr;
uint64_t result = 0;
if (BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_SHA256_ALGORITHM, nullptr, BCRYPT_ALG_HANDLE_HMAC_FLAG) != 0)
return 0;
if (BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_SHA256_ALGORITHM, nullptr, BCRYPT_ALG_HANDLE_HMAC_FLAG) != 0)
return 0;
if (BCryptGetProperty(hAlg, BCRYPT_OBJECT_LENGTH, (PUCHAR)&hashObjectSize, sizeof(DWORD), &dataLen, 0) != 0) {
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptGetProperty(hAlg, BCRYPT_OBJECT_LENGTH, (PUCHAR)&hashObjectSize, sizeof(DWORD), &dataLen, 0) != 0) {
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
hashObject = (PBYTE)HeapAlloc(GetProcessHeap(), 0, hashObjectSize);
if (!hashObject) {
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
hashObject = (PBYTE)HeapAlloc(GetProcessHeap(), 0, hashObjectSize);
if (!hashObject) {
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptCreateHash(hAlg, &hHash, hashObject, hashObjectSize,
(PUCHAR)pwd.data(), static_cast<ULONG>(pwd.size()), 0) != 0) {
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptCreateHash(hAlg, &hHash, hashObject, hashObjectSize,
(PUCHAR)pwd.data(), static_cast<ULONG>(pwd.size()), 0) != 0) {
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptHashData(hHash, msg, len, 0) != 0) {
BCryptDestroyHash(hHash);
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptHashData(hHash, msg, len, 0) != 0) {
BCryptDestroyHash(hHash);
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptFinishHash(hHash, hash, sizeof(hash), 0) != 0) {
BCryptDestroyHash(hHash);
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
if (BCryptFinishHash(hHash, hash, sizeof(hash), 0) != 0) {
BCryptDestroyHash(hHash);
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return 0;
}
memcpy(&result, hash, sizeof(result));
memcpy(&result, hash, sizeof(result));
BCryptDestroyHash(hHash);
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
BCryptDestroyHash(hHash);
HeapFree(GetProcessHeap(), 0, hashObject);
BCryptCloseAlgorithmProvider(hAlg, 0);
return result;
return result;
}
bool VerifyMessage(const std::string& pwd, BYTE* msg, int len, uint64_t signature) {
uint64_t computed = SignMessage(pwd, msg, len);
return computed == signature;
bool VerifyMessage(const std::string& pwd, BYTE* msg, int len, uint64_t signature)
{
uint64_t computed = SignMessage(pwd, msg, len);
return computed == signature;
}

Binary file not shown.

Binary file not shown.

View File

@@ -5,32 +5,32 @@
class CInjectCodeDlg : public CDialog
{
DECLARE_DYNAMIC(CInjectCodeDlg)
DECLARE_DYNAMIC(CInjectCodeDlg)
public:
CInjectCodeDlg(CWnd* pParent = nullptr);
virtual ~CInjectCodeDlg();
CInjectCodeDlg(CWnd* pParent = nullptr);
virtual ~CInjectCodeDlg();
CComboBox m_combo_main;
int isel;
CString Str_loacal;
CString Str_remote;
CComboBox m_combo_main;
int isel;
CString Str_loacal;
CString Str_remote;
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef AFX_DESIGN_TIME
enum {
IDD = IDD_INJECTINFO
};
enum {
IDD = IDD_INJECTINFO
};
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedButtonChoose();
afx_msg void OnBnClickedButtonInject();
afx_msg void OnCbnSelchangeComboInjects();
afx_msg void OnBnClickedButtonChoose();
afx_msg void OnBnClickedButtonInject();
afx_msg void OnCbnSelchangeComboInjects();
};

View File

@@ -34,7 +34,8 @@ CMachineDlg::CMachineDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pCon
m_IPConverter = new IPConverter;
}
CMachineDlg::~CMachineDlg() {
CMachineDlg::~CMachineDlg()
{
m_bIsClosed = TRUE;
SAFE_DELETE(m_IPConverter);
DeleteList();
@@ -42,32 +43,36 @@ CMachineDlg::~CMachineDlg() {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`SortItemsEx`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>,
// <20><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>.
class ListItem {
class ListItem
{
public:
CString* data;
int len;
int pid;
ListItem(const CListCtrl& list, int idx, int process = 0) {
ListItem(const CListCtrl& list, int idx, int process = 0)
{
len = list.GetHeaderCtrl()->GetItemCount();
data = new CString[len];
pid = process;
for (int i=0; i < len; ++i){
for (int i=0; i < len; ++i) {
data[i] = list.GetItemText(idx, i);
}
}
void Destroy() {
void Destroy()
{
delete [] data;
delete this;
}
protected:
~ListItem(){}
~ListItem() {}
};
int CALLBACK CMachineDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
int nColumn = pSortInfo->first;
bool bAscending = pSortInfo->second;
// <20><><EFBFBD><EFBFBD>
int CALLBACK CMachineDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
int nColumn = pSortInfo->first;
bool bAscending = pSortInfo->second;
// <20><><EFBFBD><EFBFBD>
ListItem* it1 = (ListItem*)lParam1, * it2 = (ListItem*)lParam2;
if (it1 == NULL || it2 == NULL) return 0;
int n = it1->data[nColumn].Compare(it2->data[nColumn]);
@@ -315,17 +320,17 @@ void CMachineDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
void CMachineDlg::OnClose()
{
CancelIO();
CancelIO();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (IsProcessing()) {
ShowWindow(SW_HIDE);
return;
}
DeleteList();
DeleteList();
if (m_wndStatusBar.GetSafeHwnd())
m_wndStatusBar.DestroyWindow();
SAFE_DELETE(m_IPConverter);
CDialogBase::OnClose();
CDialogBase::OnClose();
}
void CMachineDlg::reflush()
@@ -363,14 +368,14 @@ LRESULT CMachineDlg::OnShowMessage(WPARAM wParam, LPARAM lParam)
LRESULT CMachineDlg::OnWaitMessage(WPARAM wParam, LPARAM lParam)
{
wParam ? BeginWaitCursor() : EndWaitCursor();
return 0;
return 0;
}
void CMachineDlg::DeleteList()
{
if (!m_list.GetSafeHwnd()) return;
for (int i=0, n=m_list.GetItemCount(); i<n; ++i){
for (int i=0, n=m_list.GetItemCount(); i<n; ++i) {
ListItem* item = (ListItem*)m_list.GetItemData(i);
if(item) item->Destroy();
}
@@ -440,8 +445,8 @@ void CMachineDlg::ShowProcessList()
m_list.SetItemText(i, 9, (*is64) ? _T("x64") : _T("x86"));
// ListItem Ϊ<><CEAA><EFBFBD><EFBFBD>ID
m_list.SetItemData(i, (DWORD_PTR)new ListItem(m_list, i, *lpPID));
dwOffset += sizeof(DWORD) * 5 + sizeof(bool) + MAX_PATH * sizeof(char) + lstrlen(strExeFile) * sizeof(char) +
lstrlen(strProcessName) * sizeof(char) + lstrlen(strProcessUser) * sizeof(char) + 6;
dwOffset += sizeof(DWORD) * 5 + sizeof(bool) + MAX_PATH * sizeof(char) + lstrlen(strExeFile) * sizeof(char) +
lstrlen(strProcessName) * sizeof(char) + lstrlen(strProcessUser) * sizeof(char) + 6;
}
str.Format(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD> / %d"), i);
@@ -480,8 +485,8 @@ void CMachineDlg::ShowWindowsList()
m_list.SetItemText(i, 3, m_ibfo.canlook ? _T("<EFBFBD><EFBFBD>ʾ") : _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
str.Format(_T("%d*%d"), m_ibfo.w, m_ibfo.h);
m_list.SetItemText(i, 4, str);
// ListItem Ϊ<><CEAA><EFBFBD><EFBFBD>ID
m_list.SetItemData(i, (DWORD_PTR)new ListItem(m_list, i, m_ibfo.m_poceessid));
// ListItem Ϊ<><CEAA><EFBFBD><EFBFBD>ID
m_list.SetItemData(i, (DWORD_PTR)new ListItem(m_list, i, m_ibfo.m_poceessid));
dwOffset += sizeof(WINDOWSINFO);
}
str.Format(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / %d"), i);
@@ -650,8 +655,8 @@ void CMachineDlg::ShowServiceList()
m_list.SetItemText(i, 7, serfile);
m_list.SetItemData(i, (DWORD_PTR)new ListItem(m_list, i));
dwOffset += lstrlen(DisplayName) + lstrlen(Describe) + lstrlen(serRunway) + lstrlen(serauto) +
lstrlen(Login) + lstrlen(InterActive) + lstrlen(ServiceName) + lstrlen(serfile) + 8;
dwOffset += lstrlen(DisplayName) + lstrlen(Describe) + lstrlen(serRunway) + lstrlen(serauto) +
lstrlen(Login) + lstrlen(InterActive) + lstrlen(ServiceName) + lstrlen(serfile) + 8;
}
CString strMsgShow;
if (i <= 0) {
@@ -1432,7 +1437,7 @@ void CMachineDlg::ShowTaskList_menu()
if (IDOK == dlg->DoModal()) {
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = lstrlen(dlg->m_TaskPath.GetBuffer()) * 2 + lstrlen(dlg->m_TaskNames.GetBuffer()) * 2 + lstrlen(dlg->m_ExePath.GetBuffer()) *
2 + lstrlen(dlg->m_Author.GetBuffer()) * 2 + lstrlen(dlg->m_Description.GetBuffer()) * 2 + 12;
2 + lstrlen(dlg->m_Author.GetBuffer()) * 2 + lstrlen(dlg->m_Description.GetBuffer()) * 2 + 12;
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, len);
if (lpBuffer) {
lpBuffer[0] = COMMAND_TASKCREAT;
@@ -1636,8 +1641,8 @@ void CMachineDlg::ShowHostsList_menu()
HANDLE hFile = INVALID_HANDLE_VALUE;
DWORD dwSize = 0, dwRead;
LPBYTE lpBuffer = NULL;
CFileDialog dlg(TRUE, _T("*.txt"), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
_T("ͼƬ<EFBFBD>ļ<EFBFBD>(*.txt;*.txt)|*.txt;*.txt| All Files (*.*) |*.*||"), NULL);
CFileDialog dlg(TRUE, _T("*.txt"), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
_T("ͼƬ<EFBFBD>ļ<EFBFBD>(*.txt;*.txt)|*.txt;*.txt| All Files (*.*) |*.*||"), NULL);
dlg.m_ofn.lpstrTitle = _T("ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
if (dlg.DoModal() != IDOK)
@@ -1686,8 +1691,8 @@ CString CMachineDlg::oleTime2Str(double time)
time_t t = (time_t)(time * 24 * 3600 - 2209190400);
struct tm tm1;
localtime_s(&tm1, &t);
str.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), tm1.tm_year + 1900, tm1.tm_mon + 1,
tm1.tm_mday, tm1.tm_hour, tm1.tm_min, tm1.tm_sec);
str.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), tm1.tm_year + 1900, tm1.tm_mon + 1,
tm1.tm_mday, tm1.tm_hour, tm1.tm_min, tm1.tm_sec);
}
return str;
}

View File

@@ -35,16 +35,18 @@ protected:
CStatusBar m_wndStatusBar;
IPConverter* m_IPConverter;
CLocker m_Locker;
bool IsReceivingData() {
bool IsReceivingData()
{
m_Locker.Lock();
auto r = m_bIsReceiving;
m_Locker.Unlock();
return r;
}
void SetReceivingStatus(bool b) {
m_Locker.Lock();
m_bIsReceiving = b;
m_Locker.Unlock();
void SetReceivingStatus(bool b)
{
m_Locker.Lock();
m_bIsReceiving = b;
m_Locker.Unlock();
}
virtual BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);

View File

@@ -18,7 +18,7 @@ class CServiceInfoDlg : public CDialog
public:
CServiceInfoDlg(CWnd* pParent = NULL);
ClientContext* m_ContextObject;
ClientContext* m_ContextObject;
enum { IDD = IDD_SERVICE_INFO };
CComboBox m_combox_runway;

File diff suppressed because it is too large Load Diff