10 Commits

Author SHA1 Message Date
yuanyuanxiang
74c4266eb7 发布V1.0.0.4 2019-02-04 17:49:59 +08:00
yuanyuanxiang
fd62f33e60 非代码修改
清理垃圾注释、整理不良排版,对代码略有改动。
2019-02-04 14:49:11 +08:00
yuanyuanxiang
1e7cbcbf5c 解决打开远程视频卡住的问题 2019-01-26 14:50:59 +08:00
yuanyuanxiang
91428795e6 准备分布v1.0.0.3 2019-01-26 14:05:37 +08:00
yuanyuanxiang
af63166fbe 解决语音监听对话框不更新状态的问题
修复语音监听对话框显示已收到数据不更新状态的问题。
发现"发送本地语音"会导致主控端容易崩溃的问题,现象类似于操作远程桌面时的随机崩溃。
2019-01-26 11:53:11 +08:00
yuanyuanxiang
be45b5bd89 完善录制被控端视频的功能
1、修复被控端消息提示对话框在消息换行时显示不完整的问题。
2、添加/完善录制远程被控端视频的功能。
2019-01-26 10:35:10 +08:00
yuanyuanxiang
bd7b9ed492 减少捕获音视频时申请内存次数
减少音频视频捕获过程中频繁申请内存。
2019-01-22 20:44:23 +08:00
yuanyuanxiang
4283a31e66 减少远程桌面new的频次
减少远程桌面new缓冲区的频率,将部分从堆上new固定内存的操作改用从栈上分配内存。
2019-01-21 21:04:17 +08:00
yuanyuanxiang
5aadfc13a6 完善远程控制追踪鼠标 2019-01-20 20:04:11 +08:00
yuanyuanxiang
e4793a489e 因为易崩而弃用lz4
1、发现使用lz4压缩库时监控端程序进行远程桌面操作时容易崩溃,原因不明。

2、修复内存泄漏缺陷,在throw "Bad Buffer"的情况需要释放申请的内存。
2019-01-19 23:26:05 +08:00
49 changed files with 604 additions and 301 deletions

1
.gitignore vendored
View File

@@ -67,3 +67,4 @@ server/2015Remote/2015Remote.aps
server/2015Remote.VC.db server/2015Remote.VC.db
server/2015Remote.opensdf server/2015Remote.opensdf
*.7z *.7z
*.ini

View File

@@ -109,3 +109,57 @@
1、整理部分垃圾代码。 1、整理部分垃圾代码。
2、发布V1.0.0.2。 2、发布V1.0.0.2。
2018.1.19
1、发现使用lz4压缩库时监控端程序进行远程桌面操作时容易崩溃原因不明。
2、修复内存泄漏缺陷在throw "Bad Buffer"的情况需要释放申请的内存。
2019.1.20
1、发现不管是采用zstd还是zlib主控端在进行桌面控制时均有崩溃的几率zlib较小
2、改用zlib压缩解压库。
3、完善追踪鼠标时鼠标形态变化时的展现效果。
4、当退出远程桌面窗口全屏状态时不再向远程被控端发送F11。
5、发现在有线网络条件下主控端崩溃几率较小。
6、禁用主控端输入法解决使用远程桌面在被控端输入时的麻烦问题。
2019.1.21
减少远程桌面new缓冲区的频率将部分从堆上new固定内存的操作改用从栈上分配内存。
2019.1.22
减少音频视频捕获过程中频繁申请内存。
2019.1.25
1、修复被控端消息提示对话框在消息换行时显示不完整的问题。
2、添加/完善录制远程被控端视频的功能。
3、修复语音监听对话框显示已收到数据不更新状态的问题。
4、发现"发送本地语音"会导致主控端容易崩溃的问题,现象类似于操作远程桌面时的随机崩溃。
5、设置视频监控对话框为可调整大小为其设置图标。
2019.1.26
1、发布V1.0.0.3。
2、修复Release模式打不开远程视频或打开视频时画面卡住的问题问题出在CCaptureVideo GetDIB。
2019.2.4
清理垃圾注释、整理不良排版,对代码略有改动。
遗留问题:文件管理功能无效、主控端随机崩溃。因此有必要将文件管理的功能屏蔽。
发布V1.0.0.4。

View File

@@ -147,10 +147,7 @@ LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize)
{ {
return NULL; return NULL;
} }
if (dwBufferSize == NULL)
{
return NULL;
}
SetEvent(m_hStartRecord); SetEvent(m_hStartRecord);
WaitForSingleObject(m_hEventWaveIn, INFINITE); WaitForSingleObject(m_hEventWaveIn, INFINITE);
*dwBufferSize = m_ulBufferLength; *dwBufferSize = m_ulBufferLength;

View File

@@ -31,6 +31,7 @@ CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObj
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->OnServerSending((char*)&bToken, 1);
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szPacket = NULL;
m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread, m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread,
(LPVOID)this, 0, NULL); (LPVOID)this, 0, NULL);
@@ -43,7 +44,8 @@ VOID CAudioManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
case COMMAND_NEXT: case COMMAND_NEXT:
{ {
NotifyDialogIsOpen(); if (1 == ulLength)
NotifyDialogIsOpen();
break; break;
} }
default: default:
@@ -77,17 +79,17 @@ BOOL CAudioManager::SendRecordBuffer()
if (szBuffer == NULL) if (szBuffer == NULL)
return 0; return 0;
//<2F><><EFBFBD><EFBFBD><E4BBBA><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD><E4BBBA><EFBFBD><EFBFBD>
LPBYTE szPacket = new BYTE[dwBufferSize + 1]; szPacket = szPacket ? szPacket : new BYTE[dwBufferSize + 1];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
szPacket[0] = TOKEN_AUDIO_DATA; //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͸<EFBFBD><CDB8><EFBFBD>Ϣ szPacket[0] = TOKEN_AUDIO_DATA; //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͸<EFBFBD><CDB8><EFBFBD>Ϣ
//<2F><><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD> //<2F><><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
memcpy(szPacket + 1, szBuffer, dwBufferSize); memcpy(szPacket + 1, szBuffer, dwBufferSize);
szPacket[dwBufferSize] = 0;
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ //<2F><><EFBFBD>ͳ<EFBFBD>ȥ
if (dwBufferSize > 0) if (dwBufferSize > 0)
{ {
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1); dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1);
} }
delete szPacket;
return dwReturn; return dwReturn;
} }
@@ -103,6 +105,11 @@ CAudioManager::~CAudioManager()
delete m_AudioObject; delete m_AudioObject;
m_AudioObject = NULL; m_AudioObject = NULL;
} }
if (szPacket)
{
delete [] szPacket;
szPacket = NULL;
}
printf("~CAudioManager %x\n", this); printf("~CAudioManager %x\n", this);
} }

View File

@@ -26,6 +26,7 @@ public:
BOOL SendRecordBuffer(); BOOL SendRecordBuffer();
CAudio* m_AudioObject; CAudio* m_AudioObject;
LPBYTE szPacket; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}; };
#endif // !defined(AFX_AUDIOMANAGER_H__B47ECAB3_9810_4031_9E2E_BC34825CAD74__INCLUDED_) #endif // !defined(AFX_AUDIOMANAGER_H__B47ECAB3_9810_4031_9E2E_BC34825CAD74__INCLUDED_)

View File

@@ -20,10 +20,12 @@ CCaptureVideo::CCaptureVideo()
m_pGB = NULL; m_pGB = NULL;
m_pMC = NULL; m_pMC = NULL;
m_pVW = NULL; m_pVW = NULL;
m_bExit = FALSE;
} }
CCaptureVideo::~CCaptureVideo() CCaptureVideo::~CCaptureVideo()
{ {
m_bExit = TRUE;
if(m_pMC)m_pMC->StopWhenReady(); if(m_pMC)m_pMC->StopWhenReady();
if(m_pVW){ if(m_pVW){
m_pVW->put_Visible(OAFALSE); m_pVW->put_Visible(OAFALSE);
@@ -39,7 +41,6 @@ CCaptureVideo::~CCaptureVideo()
CoUninitialize() ; CoUninitialize() ;
} }
//!!<21>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>
HRESULT CCaptureVideo::Open(int iDeviceID,int iPress) HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
{ {
printf("CCaptureVideo call Open\n"); printf("CCaptureVideo call Open\n");
@@ -254,14 +255,16 @@ void CCaptureVideo::SendEnd() //
LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize) LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
{ {
BYTE *szBuffer = NULL; BYTE *szBuffer = NULL;
int n = 200; // 10sû<73>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD>NULL
do do
{ {
if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬ if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬
{ {
szBuffer = mCB.GetNextScreen(dwSize);//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if (szBuffer = mCB.GetNextScreen(dwSize)) //<2F>Ƿ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
break;
} }
} while (szBuffer==NULL); Sleep(50);
} while (!m_bExit && --n);
return szBuffer; return szBuffer;
} }

View File

@@ -36,7 +36,7 @@ public:
LPBITMAPINFO m_BitmapInfor_Full; LPBITMAPINFO m_BitmapInfor_Full;
BYTE* m_BitmapData_Full; BYTE* m_BitmapData_Full;
BOOL bStact; BOOL bStact;
DWORD m_dwSize; DWORD m_dwSize; // <20><>Ƶͼ<C6B5><CDBC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
CSampleGrabberCB() CSampleGrabberCB()
{ {
@@ -152,6 +152,7 @@ public:
} }
}; };
extern CSampleGrabberCB mCB;
class CCaptureVideo class CCaptureVideo
{ {
@@ -165,6 +166,10 @@ public:
LPBYTE GetDIB(DWORD& dwSize); LPBYTE GetDIB(DWORD& dwSize);
int GetDIBBufSize() const { return mCB.m_dwSize; }
BOOL m_bExit;
HWND m_hWnd; HWND m_hWnd;
IGraphBuilder * m_pGB; //ͨ<><CDA8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Է<EFBFBD><D4B7><EFBFBD> FCDO Filter Control Device Object IGraphBuilder * m_pGB; //ͨ<><CDA8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Է<EFBFBD><D4B7><EFBFBD> FCDO Filter Control Device Object

View File

@@ -83,7 +83,6 @@
<ClCompile Include="CaptureVideo.cpp" /> <ClCompile Include="CaptureVideo.cpp" />
<ClCompile Include="ClientDll.cpp" /> <ClCompile Include="ClientDll.cpp" />
<ClCompile Include="Common.cpp" /> <ClCompile Include="Common.cpp" />
<ClCompile Include="CursorInfor.cpp" />
<ClCompile Include="FileManager.cpp" /> <ClCompile Include="FileManager.cpp" />
<ClCompile Include="IOCPClient.cpp" /> <ClCompile Include="IOCPClient.cpp" />
<ClCompile Include="KernelManager.cpp" /> <ClCompile Include="KernelManager.cpp" />
@@ -106,7 +105,7 @@
<ClInclude Include="Buffer.h" /> <ClInclude Include="Buffer.h" />
<ClInclude Include="CaptureVideo.h" /> <ClInclude Include="CaptureVideo.h" />
<ClInclude Include="Common.h" /> <ClInclude Include="Common.h" />
<ClInclude Include="CursorInfor.h" /> <ClInclude Include="CursorInfo.h" />
<ClInclude Include="FileManager.h" /> <ClInclude Include="FileManager.h" />
<ClInclude Include="IOCPClient.h" /> <ClInclude Include="IOCPClient.h" />
<ClInclude Include="KernelManager.h" /> <ClInclude Include="KernelManager.h" />
@@ -138,6 +137,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Image Include="Res\ghost.ico" /> <Image Include="Res\ghost.ico" />
<Image Include="Res\msg.ico" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@@ -33,9 +33,6 @@
<ClCompile Include="Common.cpp"> <ClCompile Include="Common.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="CursorInfor.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="FileManager.cpp"> <ClCompile Include="FileManager.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
@@ -98,9 +95,6 @@
<ClInclude Include="Common.h"> <ClInclude Include="Common.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CursorInfor.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="FileManager.h"> <ClInclude Include="FileManager.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
@@ -158,6 +152,9 @@
<ClInclude Include="zlib.h"> <ClInclude Include="zlib.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CursorInfo.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="Script.rc"> <ResourceCompile Include="Script.rc">
@@ -178,5 +175,8 @@
<Image Include="Res\ghost.ico"> <Image Include="Res\ghost.ico">
<Filter>资源文件</Filter> <Filter>资源文件</Filter>
</Image> </Image>
<Image Include="Res\msg.ico">
<Filter>资源文件</Filter>
</Image>
</ItemGroup> </ItemGroup>
</Project> </Project>

85
client/CursorInfo.h Normal file
View File

@@ -0,0 +1,85 @@
// CursorInfor.h: interface for the CCursorInfor class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)
#define AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define MAX_CURSOR_TYPE 16
class CCursorInfo
{
private:
LPCTSTR m_CursorResArray[MAX_CURSOR_TYPE];
HCURSOR m_CursorHandleArray[MAX_CURSOR_TYPE];
public:
CCursorInfo()
{
LPCTSTR CursorResArray[MAX_CURSOR_TYPE] =
{
IDC_APPSTARTING,
IDC_ARROW,
IDC_CROSS,
IDC_HAND,
IDC_HELP,
IDC_IBEAM,
IDC_ICON,
IDC_NO,
IDC_SIZE,
IDC_SIZEALL,
IDC_SIZENESW,
IDC_SIZENS,
IDC_SIZENWSE,
IDC_SIZEWE,
IDC_UPARROW,
IDC_WAIT
};
for (int i = 0; i < MAX_CURSOR_TYPE; ++i)
{
m_CursorResArray[i] = CursorResArray[i];
m_CursorHandleArray[i] = LoadCursor(NULL, CursorResArray[i]);
}
}
virtual ~CCursorInfo()
{
for (int i = 0; i < MAX_CURSOR_TYPE; ++i)
DestroyCursor(m_CursorHandleArray[i]);
}
int getCurrentCursorIndex()
{
CURSORINFO ci;
ci.cbSize = sizeof(CURSORINFO);
if (!GetCursorInfo(&ci) || ci.flags != CURSOR_SHOWING)
return -1;
int i;
for (i = 0; i < MAX_CURSOR_TYPE; ++i)
{
if (ci.hCursor == m_CursorHandleArray[i])
break;
}
DestroyCursor(ci.hCursor);
int nIndex = i == MAX_CURSOR_TYPE ? -1 : i;
return nIndex;
}
HCURSOR getCursorHandle( int nIndex )
{
if (nIndex >= 0 && nIndex < MAX_CURSOR_TYPE)
return m_CursorHandleArray[nIndex];
else
return NULL;
}
};
#endif // !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)

View File

@@ -1,40 +0,0 @@
// CursorInfor.cpp: implementation of the CCursorInfor class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CursorInfor.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCursorInfor::CCursorInfor()
{
}
CCursorInfor::~CCursorInfor()
{
}
int CCursorInfor::GetCurrentCursorIndex()
{
CURSORINFO ci;
ci.cbSize = sizeof(CURSORINFO);
if (!GetCursorInfo(&ci) || ci.flags != CURSOR_SHOWING)
{
return -1;
}
int iIndex = 0;
for (iIndex = 0; iIndex < MAX_CURSOR_TYPE; iIndex++)
{
break;
}
DestroyCursor(ci.hCursor);
return iIndex == MAX_CURSOR_TYPE ? -1 : iIndex;
}

View File

@@ -1,22 +0,0 @@
// CursorInfor.h: interface for the CCursorInfor class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)
#define AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define MAX_CURSOR_TYPE 16
class CCursorInfor
{
public:
CCursorInfor();
virtual ~CCursorInfor();
int GetCurrentCursorIndex();
};
#endif // !defined(AFX_CURSORINFOR_H__ABC3705B_9461_4A94_B825_26539717C0D6__INCLUDED_)

View File

@@ -253,6 +253,8 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
} }
else{ else{
printf("[ERROR] uncompress failed \n"); printf("[ERROR] uncompress failed \n");
delete [] CompressedBuffer;
delete [] DeCompressedBuffer;
throw "Bad Buffer"; throw "Bad Buffer";
} }

View File

@@ -7,9 +7,9 @@
typedef struct _LOGIN_INFOR typedef struct _LOGIN_INFOR
{ {
BYTE bToken; // = 1 //<EFBFBD><EFBFBD>½<EFBFBD><EFBFBD>Ϣ BYTE bToken; // ȡ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD>Ϣ
OSVERSIONINFOEX OsVerInfoEx; // <20><EFBFBD><E6B1BE>Ϣ OSVERSIONINFOEX OsVerInfoEx; // <20><EFBFBD><E6B1BE>Ϣ
DWORD dwCPUMHz; // CPU<50><55>Ƶ DWORD dwCPUMHz; // CPU<50><55>Ƶ
IN_ADDR ClientAddr; // <20>洢32λ<32><CEBB>IPv4<76>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݽṹ IN_ADDR ClientAddr; // <20>洢32λ<32><CEBB>IPv4<76>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݽṹ
char szPCName[MAX_PATH]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char szPCName[MAX_PATH]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL bWebCamIsExist; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ BOOL bWebCamIsExist; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ

View File

@@ -86,7 +86,6 @@ char* RegisterOperation::FindPath()
if(KeyCount>0&&KeySize>1){ if(KeyCount>0&&KeySize>1){
int Size=sizeof(REGMSG)+1; int Size=sizeof(REGMSG)+1;
//buf=new char[KeyCnt*KeySize+size+1];
DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11] DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11]
szBuffer=(char*)LocalAlloc(LPTR, DataSize); szBuffer=(char*)LocalAlloc(LPTR, DataSize);
ZeroMemory(szBuffer,DataSize); ZeroMemory(szBuffer,DataSize);

View File

@@ -28,6 +28,8 @@ CScreenManager::CScreenManager(IOCPClient* ClientObject, int n):CManager(ClientO
m_ScreenSpyObject = new CScreenSpy(16); m_ScreenSpyObject = new CScreenSpy(16);
szBuffer = new char[4 * m_ScreenSpyObject->m_ulFullWidth * m_ScreenSpyObject->m_ulFullHeight];
m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL); m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL);
} }
@@ -43,7 +45,13 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
clock_t last = clock(); clock_t last = clock();
This->SendFirstScreen(); This->SendFirstScreen();
const int fps = 12;// ֡<><D6A1> #if USING_ZLIB
const int fps = 8;// ֡<><D6A1>
#elif USING_LZ4
const int fps = 8;// ֡<><D6A1>
#else
const int fps = 8;// ֡<><D6A1>
#endif
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73> const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
timeBeginPeriod(1); timeBeginPeriod(1);
while (This->m_bIsWorking) while (This->m_bIsWorking)
@@ -58,8 +66,6 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
printf("SendScreen Span = %d ms\n", span); printf("SendScreen Span = %d ms\n", span);
last = clock(); last = clock();
This->SendNextScreen(szBuffer, ulNextSendLength); This->SendNextScreen(szBuffer, ulNextSendLength);
delete[] szBuffer;
szBuffer = NULL;
} }
} }
timeEndPeriod(1); timeEndPeriod(1);
@@ -96,6 +102,11 @@ CScreenManager::~CScreenManager()
delete[] m_ScreenSpyObject; delete[] m_ScreenSpyObject;
m_ScreenSpyObject = NULL; m_ScreenSpyObject = NULL;
if(szBuffer)
{
delete [] szBuffer;
szBuffer = NULL;
}
} }
VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength) VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
@@ -189,16 +200,12 @@ VOID CScreenManager::SendFirstScreen()
} }
ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength(); ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength();
LPBYTE szBuffer = new BYTE[ulFirstSendLength];
szBuffer[0] = TOKEN_FIRSTSCREEN; szBuffer[0] = TOKEN_FIRSTSCREEN;
memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1); memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1);
m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength); m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength);
szBuffer[ulFirstSendLength] = 0;
delete [] szBuffer;
szBuffer = NULL;
} }
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength) const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
@@ -212,10 +219,9 @@ const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
ulNextSendLength += 1; ulNextSendLength += 1;
char* szBuffer = new char[ulNextSendLength];
szBuffer[0] = TOKEN_NEXTSCREEN; szBuffer[0] = TOKEN_NEXTSCREEN;
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1); memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
szBuffer[ulNextSendLength] = 0;
return szBuffer; return szBuffer;
} }

View File

@@ -17,6 +17,7 @@ class IOCPClient;
class CScreenManager : public CManager class CScreenManager : public CManager
{ {
public: public:
char* szBuffer;
CScreenManager(IOCPClient* ClientObject, int n); CScreenManager(IOCPClient* ClientObject, int n);
virtual ~CScreenManager(); virtual ~CScreenManager();
HANDLE m_hWorkThread; HANDLE m_hWorkThread;

View File

@@ -156,7 +156,7 @@ LPVOID CScreenSpy::GetNextScreenData(ULONG* ulNextSendLength)
WriteRectBuffer((LPBYTE)&CursorPos, sizeof(POINT)); WriteRectBuffer((LPBYTE)&CursorPos, sizeof(POINT));
// д<>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // д<>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE bCursorIndex = m_CursorInfor.GetCurrentCursorIndex(); BYTE bCursorIndex = m_CursorInfor.getCurrentCursorIndex();
WriteRectBuffer(&bCursorIndex, sizeof(BYTE)); WriteRectBuffer(&bCursorIndex, sizeof(BYTE));
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD> // <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>

View File

@@ -10,7 +10,7 @@
#endif // _MSC_VER > 1000 #endif // _MSC_VER > 1000
#define ALGORITHM_DIFF 1 #define ALGORITHM_DIFF 1
#define COPY_ALL 1 // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ֿ鿽<D6BF><E9BFBD><EFBFBD><EFBFBD>added by yuanyuanxiang 2019-1-7<><37> #define COPY_ALL 1 // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ֿ鿽<D6BF><E9BFBD><EFBFBD><EFBFBD>added by yuanyuanxiang 2019-1-7<><37>
#include "CursorInfor.h" #include "CursorInfo.h"
class CScreenSpy class CScreenSpy
@@ -61,7 +61,7 @@ public:
m_RectBufferOffset += ulLength; m_RectBufferOffset += ulLength;
} }
CCursorInfor m_CursorInfor; CCursorInfo m_CursorInfor;
HDC m_hDiffMemDC; HDC m_hDiffMemDC;
HBITMAP m_DiffBitmapHandle; HBITMAP m_DiffBitmapHandle;
PVOID m_DiffBitmapData_Full; PVOID m_DiffBitmapData_Full;

View File

@@ -87,7 +87,7 @@ IDR_WAVE WAVE "Res\\msg.wav"
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,2 FILEVERSION 1,0,0,4
PRODUCTVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
@@ -105,7 +105,7 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "FUCK THE UNIVERSE" VALUE "CompanyName", "FUCK THE UNIVERSE"
VALUE "FileDescription", "A GHOST" VALUE "FileDescription", "A GHOST"
VALUE "FileVersion", "1.0.0.2" VALUE "FileVersion", "1.0.0.4"
VALUE "InternalName", "ServerDl.dll" VALUE "InternalName", "ServerDl.dll"
VALUE "LegalCopyright", "Copyright (C) 2019-2025" VALUE "LegalCopyright", "Copyright (C) 2019-2025"
VALUE "OriginalFilename", "ServerDl.dll" VALUE "OriginalFilename", "ServerDl.dll"

View File

@@ -7,7 +7,7 @@
#define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_ #define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB
#define USING_ZLIB 0 #define USING_ZLIB 1
#if !USING_ZLIB #if !USING_ZLIB
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4 // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4

View File

@@ -15,7 +15,7 @@ using namespace std;
#define ID_TIMER_DELAY_DISPLAY 2 #define ID_TIMER_DELAY_DISPLAY 2
#define ID_TIMER_CLOSE_WINDOW 3 #define ID_TIMER_CLOSE_WINDOW 3
#define WIN_WIDTH 250 #define WIN_WIDTH 360
#define WIN_HEIGHT 200 #define WIN_HEIGHT 200
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// Construction/Destruction // Construction/Destruction
@@ -54,7 +54,6 @@ VOID CTalkManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
memcpy(g_Buffer, szBuffer, ulLength); memcpy(g_Buffer, szBuffer, ulLength);
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>DLG //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>DLG
DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_DIALOG), DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_DIALOG),
NULL,DialogProc); //SDK C MFC C++ NULL,DialogProc); //SDK C MFC C++
break; break;
@@ -126,7 +125,7 @@ VOID CTalkManager::OnDlgTimer(HWND hDlg) //ʱ
{ {
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW); KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
g_IOCPClientObject->OnServerSending((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8> g_IOCPClientObject->OnServerSending((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8>
EndDialog(hDlg,0); EndDialog(hDlg,0);
} }
break; break;

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<RemoteDebuggerCommand>C:\Users\win7\Desktop\Remoter\TestRun.exe</RemoteDebuggerCommand> <RemoteDebuggerCommand>C:\VM\Remoter\TestRun.exe</RemoteDebuggerCommand>
<RemoteDebuggerWorkingDirectory>C:\Users\win7\Desktop\Remoter</RemoteDebuggerWorkingDirectory> <RemoteDebuggerWorkingDirectory>C:\VM\Remoter</RemoteDebuggerWorkingDirectory>
<RemoteDebuggerServerName>192.168.43.2</RemoteDebuggerServerName> <RemoteDebuggerServerName>192.168.43.2</RemoteDebuggerServerName>
<DeploymentDirectory>C:\Users\win7\Desktop\Remoter</DeploymentDirectory> <DeploymentDirectory>C:\VM\Remoter</DeploymentDirectory>
<AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles> <AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles>
<RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime> <RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>

View File

@@ -20,6 +20,7 @@ CVideoManager::CVideoManager(IOCPClient* ClientObject, int n) : CManager(ClientO
m_fccHandler = 1129730893; m_fccHandler = 1129730893;
m_CapVideo.Open(0,0); // <20><><EFBFBD><EFBFBD> m_CapVideo.Open(0,0); // <20><><EFBFBD><EFBFBD>
lpBuffer = NULL;
m_hWorkThread = CreateThread(NULL, 0, m_hWorkThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)WorkThread, this, 0, NULL); (LPTHREAD_START_ROUTINE)WorkThread, this, 0, NULL);
@@ -34,22 +35,35 @@ DWORD CVideoManager::WorkThread(LPVOID lParam)
if (This->Initialize()) //ת<><D7AA>Initialize if (This->Initialize()) //ת<><D7AA>Initialize
{ {
This->m_bIsCompress=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ѹ<EFBFBD><D1B9> This->m_bIsCompress=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ѹ<EFBFBD><D1B9>
printf("ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>.\n");
} }
This->SendBitMapInfor(); //<2F><><EFBFBD><EFBFBD>bmpλͼ<CEBB> This->SendBitMapInfor(); //<2F><><EFBFBD><EFBFBD>bmpλͼ<CEBB>
// <20>ȿ<EFBFBD><C8BF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ȿ<EFBFBD><C8BF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
This->WaitForDialogOpen(); This->WaitForDialogOpen();
#if USING_ZLIB
const int fps = 8;// ֡<><D6A1>
#elif USING_LZ4
const int fps = 8;// ֡<><D6A1>
#else
const int fps = 8;// ֡<><D6A1>
#endif
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
timeBeginPeriod(1);
while (This->m_bIsWorking) while (This->m_bIsWorking)
{ {
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
if ((GetTickCount() - dwLastScreen) < 150) int span = sleep-(GetTickCount() - dwLastScreen);
Sleep(100); Sleep(span > 0 ? span : 1);
if (span < 0)
printf("SendScreen Span = %d ms\n", span);
dwLastScreen = GetTickCount(); dwLastScreen = GetTickCount();
This->SendNextScreen(); //<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ǵ<EFBFBD>sendNextScreen <20><><EFBFBD><EFBFBD> if(FALSE == This->SendNextScreen())
break;
} }
timeEndPeriod(1);
This->Destroy(); This->Destroy();
std::cout<<"CVideoManager WorkThread end\n"; std::cout<<"CVideoManager WorkThread end\n";
@@ -60,7 +74,7 @@ DWORD CVideoManager::WorkThread(LPVOID lParam)
CVideoManager::~CVideoManager() CVideoManager::~CVideoManager()
{ {
InterlockedExchange((LPLONG)&m_bIsWorking, FALSE); InterlockedExchange((LPLONG)&m_bIsWorking, FALSE);
m_CapVideo.m_bExit = TRUE;
WaitForSingleObject(m_hWorkThread, INFINITE); WaitForSingleObject(m_hWorkThread, INFINITE);
CloseHandle(m_hWorkThread); CloseHandle(m_hWorkThread);
std::cout<<"CVideoManager ~CVideoManager \n"; std::cout<<"CVideoManager ~CVideoManager \n";
@@ -69,10 +83,13 @@ CVideoManager::~CVideoManager()
delete m_pVideoCodec; delete m_pVideoCodec;
m_pVideoCodec = NULL; m_pVideoCodec = NULL;
} }
if (lpBuffer)
delete [] lpBuffer;
} }
void CVideoManager::Destroy() void CVideoManager::Destroy()
{ {
m_bIsWorking = FALSE;
std::cout<<"CVideoManager Destroy \n"; std::cout<<"CVideoManager Destroy \n";
if (m_pVideoCodec) //ѹ<><D1B9><EFBFBD><EFBFBD> if (m_pVideoCodec) //ѹ<><D1B9><EFBFBD><EFBFBD>
{ {
@@ -83,26 +100,25 @@ void CVideoManager::Destroy()
void CVideoManager::SendBitMapInfor() void CVideoManager::SendBitMapInfor()
{ {
DWORD dwBytesLength = 1 + sizeof(BITMAPINFO); const int dwBytesLength = 1 + sizeof(BITMAPINFO);
LPBYTE szBuffer = new BYTE[dwBytesLength]; BYTE szBuffer[dwBytesLength + 3] = { 0 };
if (szBuffer == NULL) szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
return;
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; //+ ͷ
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO)); memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength); m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
delete [] szBuffer;
} }
void CVideoManager::SendNextScreen() BOOL CVideoManager::SendNextScreen()
{ {
DWORD dwBmpImageSize=0; DWORD dwBmpImageSize=0;
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize); //m_pVideoCap->GetDIB(); LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize);
// token + IsCompress + m_fccHandler + DIB if(lpDIB == NULL)
int nHeadLen = 1 + 1 + 4; return FALSE;
UINT nBufferLen = nHeadLen + dwBmpImageSize;//m_pVideoCap->m_lpbmi->bmiHeader.biSizeImage; // token + IsCompress + m_fccHandler + DIB
LPBYTE lpBuffer = new BYTE[nBufferLen]; const int nHeadLen = 1 + 1 + 4;
UINT nBufferLen = nHeadLen + dwBmpImageSize;
lpBuffer = lpBuffer ? lpBuffer : new BYTE[nBufferLen];
lpBuffer[0] = TOKEN_WEBCAM_DIB; lpBuffer[0] = TOKEN_WEBCAM_DIB;
lpBuffer[1] = m_bIsCompress; //ѹ<><D1B9> lpBuffer[1] = m_bIsCompress; //ѹ<><D1B9>
@@ -120,8 +136,7 @@ void CVideoManager::SendNextScreen()
if (!nCompressLen) if (!nCompressLen)
{ {
// some thing error // some thing error
delete [] lpBuffer; return FALSE;
return;
} }
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><E3B7A2><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ĵ<EFBFBD>С ʣ<>¾<EFBFBD><C2BE>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ض˿<D8B6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD> //<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><E3B7A2><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ĵ<EFBFBD>С ʣ<>¾<EFBFBD><C2BE>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ض˿<D8B6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6>void CVideoDlg::OnReceiveComplete(void) //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6>void CVideoDlg::OnReceiveComplete(void)
@@ -137,7 +152,7 @@ void CVideoManager::SendNextScreen()
m_ClientObject->OnServerSending((char*)lpBuffer, nPacketLen); m_ClientObject->OnServerSending((char*)lpBuffer, nPacketLen);
delete [] lpBuffer; return TRUE;
} }
@@ -150,6 +165,20 @@ VOID CVideoManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
NotifyDialogIsOpen(); NotifyDialogIsOpen();
break; break;
} }
case COMMAND_WEBCAM_ENABLECOMPRESS: // Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_pVideoCodec)
InterlockedExchange((LPLONG)&m_bIsCompress, true);
printf("ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>.\n");
break;
}
case COMMAND_WEBCAM_DISABLECOMPRESS: // ԭʼ<D4AD><CABC><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
{
InterlockedExchange((LPLONG)&m_bIsCompress, false);
printf("<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>.\n");
break;
}
} }
} }

View File

@@ -23,7 +23,7 @@ public:
HANDLE m_hWorkThread; HANDLE m_hWorkThread;
void SendBitMapInfor(); void SendBitMapInfor();
void SendNextScreen(); BOOL SendNextScreen();
static DWORD WorkThread(LPVOID lParam); static DWORD WorkThread(LPVOID lParam);
CCaptureVideo m_CapVideo; CCaptureVideo m_CapVideo;
@@ -32,6 +32,7 @@ public:
DWORD m_fccHandler; DWORD m_fccHandler;
bool m_bIsCompress; bool m_bIsCompress;
LPBYTE lpBuffer; // ץͼ<D7A5><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CVideoCodec *m_pVideoCodec; //ѹ<><D1B9><EFBFBD><EFBFBD> CVideoCodec *m_pVideoCodec; //ѹ<><D1B9><EFBFBD><EFBFBD>
void Destroy(); void Destroy();

View File

@@ -88,7 +88,6 @@
<ClCompile Include="CaptureVideo.cpp" /> <ClCompile Include="CaptureVideo.cpp" />
<ClCompile Include="ClientDll.cpp" /> <ClCompile Include="ClientDll.cpp" />
<ClCompile Include="Common.cpp" /> <ClCompile Include="Common.cpp" />
<ClCompile Include="CursorInfor.cpp" />
<ClCompile Include="FileManager.cpp" /> <ClCompile Include="FileManager.cpp" />
<ClCompile Include="IOCPClient.cpp" /> <ClCompile Include="IOCPClient.cpp" />
<ClCompile Include="KernelManager.cpp" /> <ClCompile Include="KernelManager.cpp" />
@@ -111,7 +110,7 @@
<ClInclude Include="Buffer.h" /> <ClInclude Include="Buffer.h" />
<ClInclude Include="CaptureVideo.h" /> <ClInclude Include="CaptureVideo.h" />
<ClInclude Include="Common.h" /> <ClInclude Include="Common.h" />
<ClInclude Include="CursorInfor.h" /> <ClInclude Include="CursorInfo.h" />
<ClInclude Include="FileManager.h" /> <ClInclude Include="FileManager.h" />
<ClInclude Include="IOCPClient.h" /> <ClInclude Include="IOCPClient.h" />
<ClInclude Include="KernelManager.h" /> <ClInclude Include="KernelManager.h" />

View File

@@ -33,9 +33,6 @@
<ClCompile Include="Common.cpp"> <ClCompile Include="Common.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="CursorInfor.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="FileManager.cpp"> <ClCompile Include="FileManager.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
@@ -98,9 +95,6 @@
<ClInclude Include="Common.h"> <ClInclude Include="Common.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CursorInfor.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="FileManager.h"> <ClInclude Include="FileManager.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
@@ -158,6 +152,9 @@
<ClInclude Include="zlib.h"> <ClInclude Include="zlib.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CursorInfo.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="Script.rc"> <ResourceCompile Include="Script.rc">

Binary file not shown.

View File

@@ -196,6 +196,7 @@
<Image Include="res\Bitmap_5.bmp" /> <Image Include="res\Bitmap_5.bmp" />
<Image Include="res\toolbar1.bmp" /> <Image Include="res\toolbar1.bmp" />
<Image Include="res\toolbar2.bmp" /> <Image Include="res\toolbar2.bmp" />
<Image Include="res\webcam.ico" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@@ -305,5 +305,8 @@
<Image Include="res\Bitmap_5.bmp"> <Image Include="res\Bitmap_5.bmp">
<Filter>资源文件</Filter> <Filter>资源文件</Filter>
</Image> </Image>
<Image Include="res\webcam.ico">
<Filter>资源文件</Filter>
</Image>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -26,7 +26,9 @@
#define UM_ICONNOTIFY WM_USER+100 #define UM_ICONNOTIFY WM_USER+100
// <20>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3A8>Ϊ<EFBFBD><CEAA><EFBFBD>׵<EFBFBD><D7B5>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2>ԣ<EFBFBD>
std::vector<CFileManagerDlg *> v_FileDlg; std::vector<CFileManagerDlg *> v_FileDlg;
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3A8>Ϊ<EFBFBD><CEAA><EFBFBD>׵<EFBFBD><D7B5>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2>ԣ<EFBFBD>
std::vector<CRegisterDlg *> v_RegDlg; std::vector<CRegisterDlg *> v_RegDlg;
enum enum
@@ -43,35 +45,34 @@ enum
typedef struct typedef struct
{ {
char* szTitle; //<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> const char* szTitle; //<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nWidth; //<2F>б<EFBFBD><D0B1>Ŀ<EFBFBD><C4BF><EFBFBD> int nWidth; //<2F>б<EFBFBD><D0B1>Ŀ<EFBFBD><C4BF><EFBFBD>
}COLUMNSTRUCT; }COLUMNSTRUCT;
const int g_Column_Count_Online = 7; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COLUMNSTRUCT g_Column_Data_Online[] = COLUMNSTRUCT g_Column_Data_Online[g_Column_Count_Online] =
{ {
{"IP", 148 }, {"IP", 148 },
{"<EFBFBD>˿<EFBFBD>", 150 }, {"<EFBFBD>˿<EFBFBD>", 150 },
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ע", 160 }, {"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ע", 160 },
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ", 128 }, {"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ", 128 },
{"CPU", 80 }, {"CPU", 80 },
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ", 81 }, {"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ", 81 },
{"PING", 151 } {"PING", 151 },
}; };
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3>򡰹<EFBFBD><F2A1B0B9>ڡ<EFBFBD><DAA1>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD> CAboutDlg <20>Ի<EFBFBD><D4BB><EFBFBD> // <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3>򡰹<EFBFBD><F2A1B0B9>ڡ<EFBFBD><DAA1>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD> CAboutDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
int g_Column_Count_Online = 7;
COLUMNSTRUCT g_Column_Data_Message[] = const int g_Column_Count_Message = 3; // <20>б<EFBFBD><D0B1>ĸ<EFBFBD><C4B8><EFBFBD>
COLUMNSTRUCT g_Column_Data_Message[g_Column_Count_Message] =
{ {
{"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 200 }, {"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 200 },
{"ʱ<EFBFBD><EFBFBD>", 200 }, {"ʱ<EFBFBD><EFBFBD>", 200 },
{"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 490 } {"<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 490 }
}; };
int g_Column_Count_Message = 3; //<2F>б<EFBFBD><D0B1>ĸ<EFBFBD><C4B8><EFBFBD>
int g_Column_Online_Width = 0; int g_Column_Online_Width = 0;
int g_Column_Message_Width = 0; int g_Column_Message_Width = 0;
IOCPServer *m_iocpServer = NULL; IOCPServer *m_iocpServer = NULL;
@@ -114,8 +115,7 @@ END_MESSAGE_MAP()
// CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD> // CMy2015RemoteDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent /*=NULL*/) CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogEx(CMy2015RemoteDlg::IDD, pParent)
: CDialogEx(CMy2015RemoteDlg::IDD, pParent)
{ {
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
@@ -189,17 +189,9 @@ void CMy2015RemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK: case WM_LBUTTONDBLCLK:
{ {
if (!IsWindowVisible()) ShowWindow(IsWindowVisible() ? SW_HIDE : SW_SHOW);
{
ShowWindow(SW_SHOW);
}
else
{
ShowWindow(SW_HIDE);
}
break; break;
} }
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
{ {
CMenu Menu; CMenu Menu;
@@ -218,8 +210,7 @@ void CMy2015RemoteDlg::OnIconNotify(WPARAM wParam, LPARAM lParam)
VOID CMy2015RemoteDlg::CreateSolidMenu() VOID CMy2015RemoteDlg::CreateSolidMenu()
{ {
HMENU hMenu; //SDK C MFC C++ HMENU hMenu = LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU_MAIN)); //<2F><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>Դ
hMenu = LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU_MAIN)); //<2F><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>Դ
::SetMenu(this->GetSafeHwnd(),hMenu); //Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò˵<C3B2> ::SetMenu(this->GetSafeHwnd(),hMenu); //Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò˵<C3B2>
::DrawMenuBar(this->GetSafeHwnd()); //<2F><>ʾ<EFBFBD>˵<EFBFBD> ::DrawMenuBar(this->GetSafeHwnd()); //<2F><>ʾ<EFBFBD>˵<EFBFBD>
} }
@@ -241,7 +232,7 @@ VOID CMy2015RemoteDlg::CreatStatusBar()
VOID CMy2015RemoteDlg::CreateNotifyBar() VOID CMy2015RemoteDlg::CreateNotifyBar()
{ {
#if SHOW_NOTIFY #if INDEPENDENT
m_Nid.cbSize = sizeof(NOTIFYICONDATA); //<2F><>С<EFBFBD><D0A1>ֵ m_Nid.cbSize = sizeof(NOTIFYICONDATA); //<2F><>С<EFBFBD><D0A1>ֵ
m_Nid.hWnd = m_hWnd; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>CWnd<6E><64><EFBFBD><EFBFBD> m_Nid.hWnd = m_hWnd; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>CWnd<6E><64><EFBFBD><EFBFBD>
m_Nid.uID = IDR_MAINFRAME; //icon ID m_Nid.uID = IDR_MAINFRAME; //icon ID
@@ -317,8 +308,6 @@ VOID CMy2015RemoteDlg::InitControl()
} }
m_CList_Message.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_CList_Message.SetExtendedStyle(LVS_EX_FULLROWSELECT);
SetTimer(0,3000,NULL); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD>
} }
@@ -352,17 +341,10 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName
VOID CMy2015RemoteDlg::ShowMessage(BOOL bOk, CString strMsg) VOID CMy2015RemoteDlg::ShowMessage(BOOL bOk, CString strMsg)
{ {
CString strIsOK,strTime; CTime Timer = CTime::GetCurrentTime();
CTime Timer =CTime::GetCurrentTime(); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>CTime <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> t ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>еij<D0B5>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>GetCurrentTime() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDK<44><4B><EFBFBD><EFBFBD> CString strTime= Timer.Format("%H:%M:%S");
strTime= Timer.Format("%H:%M:%S"); CString strIsOK= bOk ? "ִ<EFBFBD>гɹ<EFBFBD>" : "ִ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
if (bOk)
{
strIsOK="ִ<EFBFBD>гɹ<EFBFBD>";
}
else
{
strIsOK="ִ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
}
m_CList_Message.InsertItem(0,strIsOK); //<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_CList_Message.InsertItem(0,strIsOK); //<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_CList_Message.SetItemText(0,1,strTime); m_CList_Message.SetItemText(0,1,strTime);
m_CList_Message.SetItemText(0,2,strMsg); m_CList_Message.SetItemText(0,2,strMsg);
@@ -419,7 +401,7 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
ListenPort(); ListenPort();
#if !SHOW_NOTIFY #if !INDEPENDENT
ShowWindow(SW_SHOW); ShowWindow(SW_SHOW);
#endif #endif
@@ -433,7 +415,7 @@ void CMy2015RemoteDlg::OnSysCommand(UINT nID, LPARAM lParam)
CAboutDlg dlgAbout; CAboutDlg dlgAbout;
dlgAbout.DoModal(); dlgAbout.DoModal();
} }
#if !SHOW_NOTIFY #if !INDEPENDENT
else if(nID == SC_CLOSE || nID == SC_MINIMIZE) else if(nID == SC_CLOSE || nID == SC_MINIMIZE)
{ {
ShowWindow(SW_HIDE); ShowWindow(SW_HIDE);
@@ -548,30 +530,12 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy)
void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent) void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent)
{ {
// 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(nIDEvent)
{
case 0:
{
break;
}
case 1:
{
break;
}
}
} }
void CMy2015RemoteDlg::OnClose() void CMy2015RemoteDlg::OnClose()
{ {
// 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>ֵ #if INDEPENDENT
KillTimer(0);
#if SHOW_NOTIFY
Shell_NotifyIcon(NIM_DELETE, &m_Nid); Shell_NotifyIcon(NIM_DELETE, &m_Nid);
#endif #endif
@@ -665,15 +629,13 @@ void CMy2015RemoteDlg::OnOnlineDelete()
BYTE bToken = COMMAND_BYE; //<2F>򱻿ض˷<D8B6><CBB7><EFBFBD>һ<EFBFBD><D2BB>COMMAND_SYSTEM BYTE bToken = COMMAND_BYE; //<2F>򱻿ض˷<D8B6><CBB7><EFBFBD>һ<EFBFBD><D2BB>COMMAND_SYSTEM
SendSelectedCommand(&bToken, sizeof(BYTE)); //Context PreSending PostSending SendSelectedCommand(&bToken, sizeof(BYTE)); //Context PreSending PostSending
CString strIP;
int iCount = m_CList_Online.GetSelectedCount(); int iCount = m_CList_Online.GetSelectedCount();
int i = 0;
for (i=0;i<iCount;++i) for (int i=0;i<iCount;++i)
{ {
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition(); POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
int iItem = m_CList_Online.GetNextSelectedItem(Pos); int iItem = m_CList_Online.GetNextSelectedItem(Pos);
strIP = m_CList_Online.GetItemText(iItem,ONLINELIST_IP); CString strIP = m_CList_Online.GetItemText(iItem,ONLINELIST_IP);
m_CList_Online.DeleteItem(iItem); m_CList_Online.DeleteItem(iItem);
strIP+="<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"; strIP+="<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
ShowMessage(true,strIP); ShowMessage(true,strIP);
@@ -693,8 +655,6 @@ VOID CMy2015RemoteDlg::OnOnlineProcessManager()
SendSelectedCommand(&bToken, sizeof(BYTE)); SendSelectedCommand(&bToken, sizeof(BYTE));
} }
VOID CMy2015RemoteDlg::OnOnlineWindowManager() VOID CMy2015RemoteDlg::OnOnlineWindowManager()
{ {
BYTE bToken = COMMAND_WSLIST; BYTE bToken = COMMAND_WSLIST;
@@ -710,26 +670,30 @@ VOID CMy2015RemoteDlg::OnOnlineDesktopManager()
VOID CMy2015RemoteDlg::OnOnlineFileManager() VOID CMy2015RemoteDlg::OnOnlineFileManager()
{ {
BYTE bToken = COMMAND_LIST_DRIVE; //<2F><><EFBFBD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #if INDEPENDENT
BYTE bToken = COMMAND_LIST_DRIVE;
SendSelectedCommand(&bToken, sizeof(BYTE)); SendSelectedCommand(&bToken, sizeof(BYTE));
#else
if(m_CList_Online.GetFirstSelectedItemPosition())
ShowMessage(FALSE, "<EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣʹ<EFBFBD><EFBFBD>");
#endif
} }
VOID CMy2015RemoteDlg::OnOnlineAudioManager() VOID CMy2015RemoteDlg::OnOnlineAudioManager()
{ {
BYTE bToken = COMMAND_AUDIO; //<2F>򱻿ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BYTE bToken = COMMAND_AUDIO;
SendSelectedCommand(&bToken, sizeof(BYTE)); SendSelectedCommand(&bToken, sizeof(BYTE));
} }
VOID CMy2015RemoteDlg::OnOnlineVideoManager() VOID CMy2015RemoteDlg::OnOnlineVideoManager()
{ {
BYTE bToken = COMMAND_WEBCAM; //<2F>򱻿ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BYTE bToken = COMMAND_WEBCAM;
SendSelectedCommand(&bToken, sizeof(BYTE)); SendSelectedCommand(&bToken, sizeof(BYTE));
} }
VOID CMy2015RemoteDlg::OnOnlineServerManager() VOID CMy2015RemoteDlg::OnOnlineServerManager()
{ {
BYTE bToken = COMMAND_SERVICES; //<2F><>ֵһ<D6B5><D2BB><EFBFBD><EFBFBD> Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>COMMAND_SYSTEM BYTE bToken = COMMAND_SERVICES;
SendSelectedCommand(&bToken, sizeof(BYTE)); SendSelectedCommand(&bToken, sizeof(BYTE));
} }
@@ -743,20 +707,24 @@ void CMy2015RemoteDlg::OnOnlineBuildClient()
{ {
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CBuildDlg Dlg; CBuildDlg Dlg;
Dlg.m_strIP = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetStr("settings", "localIp", "");
CString Port;
Port.Format("%d", ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "ghost"));
Dlg.m_strPort = Port;
Dlg.DoModal(); Dlg.DoModal();
} }
VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength) VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
{ {
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition(); //1[pcontext client] 2 3 //1 2 POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
while(Pos) while(Pos)
{ {
int iItem = m_CList_Online.GetNextSelectedItem(Pos); int iItem = m_CList_Online.GetNextSelectedItem(Pos);
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem); //<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ŀ<EFBFBD><C4BF>ȡ<EFBFBD><C8A1>ClientContext<78><EFBFBD><E1B9B9> CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
// <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݰ<EFBFBD> //<2F>鿴ClientContext<78><EFBFBD><E1B9B9> // <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ݰ<EFBFBD>
m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength); //Cleint Context m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength);
} }
} }
@@ -769,15 +737,12 @@ VOID CMy2015RemoteDlg::OnAbout()
//<2F><><EFBFBD><EFBFBD>Menu //<2F><><EFBFBD><EFBFBD>Menu
void CMy2015RemoteDlg::OnNotifyShow() void CMy2015RemoteDlg::OnNotifyShow()
{ {
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ShowWindow(SW_SHOW); ShowWindow(SW_SHOW);
} }
void CMy2015RemoteDlg::OnNotifyExit() void CMy2015RemoteDlg::OnNotifyExit()
{ {
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendMessage(WM_CLOSE); SendMessage(WM_CLOSE);
} }
@@ -815,11 +780,6 @@ VOID CMy2015RemoteDlg::Activate(int nPort,int nMaxConnection)
{ {
m_iocpServer = new IOCPServer; //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_iocpServer = new IOCPServer; //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_iocpServer==NULL)
{
return;
}
if (m_iocpServer->StartServer(NotifyProc, OfflineProc, nPort)==FALSE) if (m_iocpServer->StartServer(NotifyProc, OfflineProc, nPort)==FALSE)
{ {
OutputDebugStringA("======> StartServer Failed \n"); OutputDebugStringA("======> StartServer Failed \n");
@@ -833,7 +793,7 @@ VOID CMy2015RemoteDlg::Activate(int nPort,int nMaxConnection)
VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject) VOID CALLBACK CMy2015RemoteDlg::NotifyProc(CONTEXT_OBJECT* ContextObject)
{ {
AUTO_TICK(5); AUTO_TICK(20);
MessageHandle(ContextObject); MessageHandle(ContextObject);
} }
@@ -1013,7 +973,7 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam)
switch (LoginInfor->OsVerInfoEx.dwPlatformId) switch (LoginInfor->OsVerInfoEx.dwPlatformId)
{ {
case VER_PLATFORM_WIN32_NT: case VER_PLATFORM_WIN32_NT:
if (LoginInfor->OsVerInfoEx.dwMajorVersion <= 4 ) if ( LoginInfor->OsVerInfoEx.dwMajorVersion <= 4 )
strOS = "WindowsNT"; strOS = "WindowsNT";
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 ) if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 )
strOS = "Windows2000"; strOS = "Windows2000";
@@ -1027,6 +987,12 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam)
strOS = "Windows7"; strOS = "Windows7";
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 2 ) if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 2 )
strOS = "Windows8"; strOS = "Windows8";
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 3 )
strOS = "Windows8.1";
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 4 )
strOS = "Windows10";
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 10 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 )
strOS = "Windows10";
} }
//CPU //CPU
@@ -1142,7 +1108,7 @@ LRESULT CMy2015RemoteDlg::OnOpenScreenSpyDialog(WPARAM wParam, LPARAM lParam)
CScreenSpyDlg *Dlg = new CScreenSpyDlg(this,m_iocpServer, ContextObject); //Send s CScreenSpyDlg *Dlg = new CScreenSpyDlg(this,m_iocpServer, ContextObject); //Send s
// <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>Ϊ׿<CEAA><D7BF> // <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>Ϊ׿<CEAA><D7BF>
Dlg->Create(IDD_DIALOG_SCREEN_SPY, GetDesktopWindow()); Dlg->Create(IDD_DIALOG_SCREEN_SPY, GetDesktopWindow());
Dlg->ShowWindow(SW_SHOW); Dlg->ShowWindow(SW_SHOWMAXIMIZED);
ContextObject->v1 = SCREENSPY_DLG; ContextObject->v1 = SCREENSPY_DLG;
ContextObject->hDlg = Dlg; ContextObject->hDlg = Dlg;

View File

@@ -9,16 +9,16 @@
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
#define SHOW_NOTIFY 1 #define INDEPENDENT 1
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
typedef struct _LOGIN_INFOR typedef struct _LOGIN_INFOR
{ {
BYTE bToken; // = 1 //<EFBFBD><EFBFBD>½<EFBFBD><EFBFBD>Ϣ BYTE bToken; // ȡ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD>Ϣ
OSVERSIONINFOEX OsVerInfoEx; // <20><EFBFBD><E6B1BE>Ϣ OSVERSIONINFOEX OsVerInfoEx; // <20><EFBFBD><E6B1BE>Ϣ
DWORD dwCPUMHz; // CPU<50><55>Ƶ DWORD dwCPUMHz; // CPU<50><55>Ƶ
IN_ADDR ClientAddr; // <20>洢32λ<32><CEBB>IPv4<76>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݽṹ IN_ADDR ClientAddr; // <20>洢32λ<32><CEBB>IPv4<76>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ݽṹ
char szPCName[MAX_PATH]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char szPCName[MAX_PATH]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL bWebCamIsExist; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ BOOL bWebCamIsExist; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
@@ -70,7 +70,7 @@ public:
CStatusBar m_StatusBar; //״̬<D7B4><CCAC> CStatusBar m_StatusBar; //״̬<D7B4><CCAC>
CTrueColorToolBar m_ToolBar; CTrueColorToolBar m_ToolBar;
#if SHOW_NOTIFY #if INDEPENDENT
NOTIFYICONDATA m_Nid; NOTIFYICONDATA m_Nid;
#endif #endif
CRITICAL_SECTION m_cs; CRITICAL_SECTION m_cs;

View File

@@ -33,8 +33,7 @@ CAudio::CAudio()
m_ulBufferLength = 1000; m_ulBufferLength = 1000;
int i = 0; for (int i = 0; i < 2; ++i)
for (i = 0; i < 2; ++i)
{ {
m_InAudioData[i] = new BYTE[m_ulBufferLength]; m_InAudioData[i] = new BYTE[m_ulBufferLength];
m_InAudioHeader[i] = new WAVEHDR; m_InAudioHeader[i] = new WAVEHDR;

View File

@@ -46,6 +46,7 @@ void CAudioDlg::DoDataExchange(CDataExchange* pDX)
BEGIN_MESSAGE_MAP(CAudioDlg, CDialog) BEGIN_MESSAGE_MAP(CAudioDlg, CDialog)
ON_WM_CLOSE() ON_WM_CLOSE()
ON_BN_CLICKED(IDC_CHECK, &CAudioDlg::OnBnClickedCheck)
END_MESSAGE_MAP() END_MESSAGE_MAP()
@@ -70,6 +71,9 @@ BOOL CAudioDlg::OnInitDialog()
m_bThreadRun = m_hWorkThread ? TRUE : FALSE; m_bThreadRun = m_hWorkThread ? TRUE : FALSE;
// "<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"OnBnClickedCheck"
GetDlgItem(IDC_CHECK)->EnableWindow(FALSE);
return TRUE; // return TRUE unless you set the focus to a control return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE // <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
} }
@@ -82,7 +86,7 @@ DWORD CAudioDlg::WorkThread(LPVOID lParam)
{ {
if (!This->m_bSend) if (!This->m_bSend)
{ {
Sleep(50); WAIT(This->m_bIsWorking, 1, 50);
continue; continue;
} }
DWORD dwBufferSize = 0; DWORD dwBufferSize = 0;
@@ -101,12 +105,11 @@ void CAudioDlg::OnReceiveComplete(void)
m_nTotalRecvBytes += m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; //1000+ =1000 1 m_nTotalRecvBytes += m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1; //1000+ =1000 1
CString strString; CString strString;
strString.Format("Receive %d KBytes", m_nTotalRecvBytes / 1024); strString.Format("Receive %d KBytes", m_nTotalRecvBytes / 1024);
SetDlgItemText(IDC_TIP, strString); SetDlgItemText(IDC_TIPS, strString);
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0]) switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
{ {
case TOKEN_AUDIO_DATA: case TOKEN_AUDIO_DATA:
{ {
m_AudioObject.PlayBuffer(m_ContextObject->InDeCompressedBuffer.GetBuffer(1), m_AudioObject.PlayBuffer(m_ContextObject->InDeCompressedBuffer.GetBuffer(1),
m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1); //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1); //<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break; break;
@@ -134,3 +137,14 @@ void CAudioDlg::OnClose()
delete this; delete this;
#endif #endif
} }
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
void CAudioDlg::OnBnClickedCheck()
{
// @notice 2019.1.26
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><><EFBFBD>򱻿ض˱<D8B6><CBB1><EFBFBD><EFBFBD><EFBFBD>zlib inffas32.asm
// <20><EFBFBD><E8BDAB><EFBFBD>ض<EFBFBD>zlib<69><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>
// <20><><EFBFBD>Ǽ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڿ<EFBFBD><DABF><EFBFBD>"<22><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1><EFBFBD>ױ<EFBFBD><D7B1><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UpdateData(true);
}

View File

@@ -33,7 +33,8 @@ protected:
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
public: public:
BOOL m_bSend; BOOL m_bSend; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>
virtual BOOL OnInitDialog(); virtual BOOL OnInitDialog();
afx_msg void OnClose(); afx_msg void OnClose();
afx_msg void OnBnClickedCheck();
}; };

View File

@@ -12,7 +12,8 @@ CCpuUsage::CCpuUsage()
CCpuUsage::~CCpuUsage() CCpuUsage::~CCpuUsage()
{ {
PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD> PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
delete m_pCounterStruct; if (m_pCounterStruct)
delete m_pCounterStruct;
} }

View File

@@ -43,7 +43,7 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client
sizeof(SHFILEINFO), sizeof(SHFILEINFO),
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES SHGFI_ICON | SHGFI_USEFILEATTRIBUTES
); );
m_hIcon = sfi.hIcon; m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_FATHER));
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD> // <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo
( (

View File

@@ -69,6 +69,7 @@ IOCPServer::IOCPServer(void)
m_hKillEvent = NULL; m_hKillEvent = NULL;
memset(m_szPacketFlag, 0, sizeof(m_szPacketFlag));
memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH); memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH);
m_NotifyProc = NULL; m_NotifyProc = NULL;
@@ -331,6 +332,7 @@ DWORD IOCPServer::WorkThreadProc(LPVOID lParam)
if (ContextObject && This->m_bTimeToKill == FALSE &&dwTrans==0) if (ContextObject && This->m_bTimeToKill == FALSE &&dwTrans==0)
{ {
ContextObject->olps = NULL; ContextObject->olps = NULL;
OutputDebugStringA("!!! RemoveStaleContext \n");
This->RemoveStaleContext(ContextObject); This->RemoveStaleContext(ContextObject);
} }
SAFE_DELETE(OverlappedPlus); SAFE_DELETE(OverlappedPlus);
@@ -403,7 +405,7 @@ DWORD IOCPServer::WorkThreadProc(LPVOID lParam)
//<2F>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD> //<2F>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
BOOL IOCPServer::HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans) BOOL IOCPServer::HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans)
{ {
AUTO_TICK(5); AUTO_TICK(20);
BOOL bRet = FALSE; BOOL bRet = FALSE;
@@ -479,6 +481,8 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD> m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
}else{ }else{
OutputDebugStringA("[ERROR] uncompress failed \n"); OutputDebugStringA("[ERROR] uncompress failed \n");
delete [] CompressedBuffer;
delete [] DeCompressedBuffer;
throw "Bad Buffer"; throw "Bad Buffer";
} }
delete [] CompressedBuffer; delete [] CompressedBuffer;
@@ -528,7 +532,7 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH; ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH); ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG)); ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG)); ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulOriginalLength, sizeof(ULONG));
ContextObject->OutCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength); ContextObject->OutCompressedBuffer.WriteBuffer(CompressedBuffer, ulCompressedLength);
delete [] CompressedBuffer; delete [] CompressedBuffer;
} }
@@ -537,6 +541,8 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
BOOL bOk = PostQueuedCompletionStatus(m_hCompletionPort, 0, (DWORD)ContextObject, &OverlappedPlus->m_ol); BOOL bOk = PostQueuedCompletionStatus(m_hCompletionPort, 0, (DWORD)ContextObject, &OverlappedPlus->m_ol);
if ( (!bOk && GetLastError() != ERROR_IO_PENDING) ) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7> if ( (!bOk && GetLastError() != ERROR_IO_PENDING) ) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7>
{ {
int a = GetLastError();
OutputDebugStringA("!!! OnClientPreSending Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
RemoveStaleContext(ContextObject); RemoveStaleContext(ContextObject);
SAFE_DELETE(OverlappedPlus); SAFE_DELETE(OverlappedPlus);
} }
@@ -566,6 +572,7 @@ BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompl
if ( iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING ) if ( iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING )
{ {
int a = GetLastError(); int a = GetLastError();
OutputDebugStringA("!!! OnClientPostSending Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
RemoveStaleContext(ContextObject); RemoveStaleContext(ContextObject);
SAFE_DELETE(OverlappedPlus); SAFE_DELETE(OverlappedPlus);
} }
@@ -683,6 +690,8 @@ void IOCPServer::OnAccept()
//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD>ǽ<EFBFBD><C7BD>ܵ<EFBFBD><DCB5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>Ǿͽ<C7BE><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ɶ˿<C9B6> <20><><EFBFBD><EFBFBD><EFBFBD>ǵĹ<C7B5><C4B9><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD> //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD>ǽ<EFBFBD><C7BD>ܵ<EFBFBD><DCB5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>Ǿͽ<C7BE><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ɶ˿<C9B6> <20><><EFBFBD><EFBFBD><EFBFBD>ǵĹ<C7B5><C4B9><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>
if ( (!bOk && GetLastError() != ERROR_IO_PENDING)) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7> if ( (!bOk && GetLastError() != ERROR_IO_PENDING)) //<2F><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>ʧ<EFBFBD><CAA7>
{ {
int a = GetLastError();
OutputDebugStringA("!!! OnAccept Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
RemoveStaleContext(ContextObject); RemoveStaleContext(ContextObject);
SAFE_DELETE(OverlappedPlus); SAFE_DELETE(OverlappedPlus);
return; return;
@@ -707,6 +716,7 @@ VOID IOCPServer::PostRecv(CONTEXT_OBJECT* ContextObject)
if (iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING) if (iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING)
{ {
int a = GetLastError(); int a = GetLastError();
OutputDebugStringA("!!! PostRecv Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n");
RemoveStaleContext(ContextObject); RemoveStaleContext(ContextObject);
SAFE_DELETE(OverlappedPlus); SAFE_DELETE(OverlappedPlus);
} }

View File

@@ -72,7 +72,7 @@ public:
ULONG m_ulKeepLiveTime; ULONG m_ulKeepLiveTime;
char m_szPacketFlag[FLAG_LENGTH]; char m_szPacketFlag[FLAG_LENGTH + 3];
typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject); typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject); typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);

View File

@@ -5,6 +5,7 @@
#include "2015Remote.h" #include "2015Remote.h"
#include "ScreenSpyDlg.h" #include "ScreenSpyDlg.h"
#include "afxdialogex.h" #include "afxdialogex.h"
#include <imm.h>
// CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD> // CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
@@ -28,6 +29,7 @@ IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog)
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
: CDialog(CScreenSpyDlg::IDD, Parent) : CDialog(CScreenSpyDlg::IDD, Parent)
{ {
ImmDisableIME(0);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_bFullScreen = FALSE; m_bFullScreen = FALSE;
m_iocpServer = IOCPServer; m_iocpServer = IOCPServer;
@@ -37,7 +39,7 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC
GetSystemDirectory(szFullPath, MAX_PATH); GetSystemDirectory(szFullPath, MAX_PATH);
lstrcat(szFullPath, "\\shell32.dll"); //ͼ<><CDBC> lstrcat(szFullPath, "\\shell32.dll"); //ͼ<><CDBC>
m_hIcon = ExtractIcon(AfxGetApp()->m_hInstance, szFullPath, 17); m_hIcon = ExtractIcon(AfxGetApp()->m_hInstance, szFullPath, 17);
m_hCursor = LoadCursor(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ARROW)); m_hCursor = LoadCursor(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ARROWS));
sockaddr_in ClientAddr; sockaddr_in ClientAddr;
memset(&ClientAddr, 0, sizeof(ClientAddr)); memset(&ClientAddr, 0, sizeof(ClientAddr));
@@ -231,12 +233,13 @@ VOID CScreenSpyDlg::DrawNextScreenDiff(void)
} }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
BYTE bOldCursorIndex; BYTE bOldCursorIndex = m_bCursorIndex;
memcpy(&bOldCursorIndex, &m_bCursorIndex, sizeof(BYTE)); m_bCursorIndex = m_ContextObject->InDeCompressedBuffer.GetBuffer(2+sizeof(POINT))[0];
memcpy(&m_bCursorIndex, m_ContextObject->InDeCompressedBuffer.GetBuffer(2+sizeof(POINT)), sizeof(BYTE));
if (bOldCursorIndex != m_bCursorIndex) if (bOldCursorIndex != m_bCursorIndex)
{ {
bChange = TRUE; bChange = TRUE;
if (m_bIsCtrl && !m_bIsTraceCursor)//<2F>滻ָ<E6BBBB><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WNDCLASSEX<45>
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex));
} }
// <20><>Ļ<EFBFBD>Ƿ<EFBFBD><C7B7> // <20><>Ļ<EFBFBD>Ƿ<EFBFBD><C7B7>
@@ -298,7 +301,7 @@ void CScreenSpyDlg::OnPaint()
m_hFullDC, m_hFullDC,
m_ClientCursorPos.x - m_ulHScrollPos, m_ClientCursorPos.x - m_ulHScrollPos,
m_ClientCursorPos.y - m_ulVScrollPos, m_ClientCursorPos.y - m_ulVScrollPos,
m_hCursor, m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex),
0,0, 0,0,
0, 0,
NULL, NULL,
@@ -413,6 +416,8 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
case WM_KEYUP: case WM_KEYUP:
case WM_SYSKEYDOWN: case WM_SYSKEYDOWN:
case WM_SYSKEYUP: case WM_SYSKEYUP:
if (pMsg->wParam == VK_F11 && LeaveFullScreen()) // F11: <20>˳<EFBFBD>ȫ<EFBFBD><C8AB>
return TRUE;
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN) if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN)
{ {
MSG Msg; MSG Msg;
@@ -423,9 +428,7 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
SendCommand(&Msg); SendCommand(&Msg);
} }
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
return true; return TRUE;// <20><><EFBFBD><EFBFBD>Enter<65><72>ESC<53>رնԻ<D5B6>
if (pMsg->wParam == VK_F11) // <20>˳<EFBFBD>ȫ<EFBFBD><C8AB>
LeaveFullScreen();
break; break;
} }
@@ -438,12 +441,12 @@ VOID CScreenSpyDlg::SendCommand(MSG* Msg)
if (!m_bIsCtrl) if (!m_bIsCtrl)
return; return;
LPBYTE szData = new BYTE[sizeof(MSG) + 1]; const int length = sizeof(MSG) + 1;
BYTE szData[length + 3];
szData[0] = COMMAND_SCREEN_CONTROL; szData[0] = COMMAND_SCREEN_CONTROL;
memcpy(szData + 1, Msg, sizeof(MSG)); memcpy(szData + 1, Msg, sizeof(MSG));
m_iocpServer->OnClientPreSending(m_ContextObject, szData, sizeof(MSG) + 1); szData[length] = 0;
m_iocpServer->OnClientPreSending(m_ContextObject, szData, length);
delete[] szData;
} }
BOOL CScreenSpyDlg::SaveSnapshot(void) BOOL CScreenSpyDlg::SaveSnapshot(void)
@@ -647,8 +650,8 @@ void CScreenSpyDlg::EnterFullScreen()
} }
} }
// ȫ<><C8AB><EFBFBD>˳<EFBFBD><CBB3>ɹ<EFBFBD><C9B9>򷵻<EFBFBD>true
void CScreenSpyDlg::LeaveFullScreen() bool CScreenSpyDlg::LeaveFullScreen()
{ {
if (m_bFullScreen) if (m_bFullScreen)
{ {
@@ -656,7 +659,9 @@ void CScreenSpyDlg::LeaveFullScreen()
CMenu *SysMenu = GetSystemMenu(FALSE); CMenu *SysMenu = GetSystemMenu(FALSE);
SysMenu->CheckMenuItem(IDM_FULLSCREEN, MF_UNCHECKED); //<2F>˵<EFBFBD><CBB5><EFBFBD>ʽ SysMenu->CheckMenuItem(IDM_FULLSCREEN, MF_UNCHECKED); //<2F>˵<EFBFBD><CBB5><EFBFBD>ʽ
m_bFullScreen = false; m_bFullScreen = false;
return true;
} }
return false;
} }
void CScreenSpyDlg::OnLButtonDown(UINT nFlags, CPoint point) void CScreenSpyDlg::OnLButtonDown(UINT nFlags, CPoint point)

View File

@@ -1,5 +1,6 @@
#pragma once #pragma once
#include "IOCPServer.h" #include "IOCPServer.h"
#include "..\..\client\CursorInfo.h"
// CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD> // CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
@@ -34,6 +35,7 @@ public:
BYTE m_bCursorIndex; BYTE m_bCursorIndex;
CString m_strClientIP; CString m_strClientIP;
BOOL m_bIsTraceCursor; BOOL m_bIsTraceCursor;
CCursorInfo m_CursorInfo; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵͳ<CFB5>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
VOID SendCommand(MSG* Msg); VOID SendCommand(MSG* Msg);
VOID UpdateServerClipboard(char *szBuffer,ULONG ulLength); VOID UpdateServerClipboard(char *szBuffer,ULONG ulLength);
@@ -53,7 +55,7 @@ public:
WINDOWPLACEMENT m_struOldWndpl; WINDOWPLACEMENT m_struOldWndpl;
void EnterFullScreen(); void EnterFullScreen();
void LeaveFullScreen(); bool LeaveFullScreen();
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

View File

@@ -394,5 +394,5 @@ void CSystemDlg::OnWlistMin()
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD)); memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
}// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> }
} }

View File

@@ -25,6 +25,7 @@ void CTalkDlg::DoDataExchange(CDataExchange* pDX)
{ {
CDialog::DoDataExchange(pDX); CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk); DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk);
m_EditTalk.SetLimitText(2048);
} }
@@ -53,7 +54,7 @@ BOOL CTalkDlg::OnInitDialog()
void CTalkDlg::OnBnClickedButtonTalk() void CTalkDlg::OnBnClickedButtonTalk()
{ {
int iLength = m_EditTalk.GetWindowTextLength(); //EditBox <20>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> int iLength = m_EditTalk.GetWindowTextLength();
if (!iLength) if (!iLength)
{ {
@@ -61,17 +62,14 @@ void CTalkDlg::OnBnClickedButtonTalk()
} }
CString strData; CString strData;
m_EditTalk.GetWindowText(strData); //EditBox <20>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_EditTalk.GetWindowText(strData);
char* szBuffer = new char[iLength + 1]; // 2019.1.5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
memset(szBuffer,0,sizeof(char)*iLength);
char szBuffer[4096] = {0};
strcpy(szBuffer,strData.GetBuffer(0)); strcpy(szBuffer,strData.GetBuffer(0));
m_EditTalk.SetWindowText(NULL); //EditBox <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_EditTalk.SetWindowText(NULL);
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));//<2F><><EFBFBD>Լ<EFBFBD><D4BC>ڴ<EFBFBD><DAB4>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));
delete [] szBuffer;
} }

View File

@@ -9,19 +9,114 @@
enum enum
{ {
IDM_ENABLECOMPRESS = 0x0010, // <20><>Ƶѹ<C6B5><D1B9>
IDM_SAVEAVI, // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC> IDM_SAVEAVI, // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>
}; };
// CVideoDlg <20>Ի<EFBFBD><D4BB><EFBFBD> // CVideoDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CVideoDlg, CDialog) IMPLEMENT_DYNAMIC(CVideoDlg, CDialog)
AVISTREAMINFO CBmpToAvi::m_si;
CBmpToAvi::CBmpToAvi()
{
m_pfile = NULL;
m_pavi = NULL;
AVIFileInit();
}
CBmpToAvi::~CBmpToAvi()
{
AVIFileExit();
}
bool CBmpToAvi::Open( LPCTSTR szFile, LPBITMAPINFO lpbmi )
{
if (szFile == NULL)
return false;
m_nFrames = 0;
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;
if (AVIFileCreateStream(m_pfile, &m_pavi, &m_si))
return false;
if (AVIStreamSetFormat(m_pavi, 0, lpbmi, sizeof(BITMAPINFO)) != AVIERR_OK)
return false;
return true;
}
bool CBmpToAvi::Write(LPVOID lpBuffer)
{
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;
}
void CBmpToAvi::Close()
{
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;
}
CString strFileName = m_strIPAddress + 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))
{
m_aviFile.Empty();
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>!");
}
else
{
pSysMenu->CheckMenuItem(IDM_SAVEAVI, MF_CHECKED);
}
}
CVideoDlg::CVideoDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) CVideoDlg::CVideoDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
: CDialog(CVideoDlg::IDD, pParent) : CDialog(CVideoDlg::IDD, pParent)
{ {
m_nCount = 0;
m_aviFile.Empty();
m_ContextObject = ContextObject; m_ContextObject = ContextObject;
m_iocpServer = IOCPServer; m_iocpServer = IOCPServer;
m_BitmapInfor_Full = NULL; m_BitmapInfor_Full = NULL;
m_pVideoCodec = NULL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> <20>ҿ<EFBFBD> m_pVideoCodec = NULL;
sockaddr_in ClientAddress; sockaddr_in ClientAddress;
memset(&ClientAddress, 0, sizeof(ClientAddress)); memset(&ClientAddress, 0, sizeof(ClientAddress));
int iClientAddressLength = sizeof(ClientAddress); int iClientAddressLength = sizeof(ClientAddress);
@@ -52,6 +147,12 @@ void CVideoDlg::ResetScreen(void)
CVideoDlg::~CVideoDlg() CVideoDlg::~CVideoDlg()
{ {
if (!m_aviFile.IsEmpty())
{
SaveAvi();
m_aviFile.Empty();
}
if (m_pVideoCodec) if (m_pVideoCodec)
{ {
delete m_pVideoCodec; delete m_pVideoCodec;
@@ -103,8 +204,9 @@ BOOL CVideoDlg::OnInitDialog()
m_hDD = DrawDibOpen(); m_hDD = DrawDibOpen();
m_hDC = ::GetDC(m_hWnd); 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_STRING, IDM_SAVEAVI, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>(&V)");
SysMenu->AppendMenu(MF_SEPARATOR);
CString strString; CString strString;
@@ -117,12 +219,20 @@ BOOL CVideoDlg::OnInitDialog()
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
} }
return TRUE; // return TRUE unless you set the focus to a control m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_CAMERA));
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
return TRUE;
} }
void CVideoDlg::OnClose() void CVideoDlg::OnClose()
{ {
if (!m_aviFile.IsEmpty())
{
SaveAvi();
m_aviFile.Empty();
}
#if CLOSE_DELETE_DLG #if CLOSE_DELETE_DLG
m_ContextObject->v1 = 0; m_ContextObject->v1 = 0;
#endif #endif
@@ -137,6 +247,8 @@ void CVideoDlg::OnClose()
void CVideoDlg::OnReceiveComplete(void) void CVideoDlg::OnReceiveComplete(void)
{ {
++m_nCount;
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0]) switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
{ {
case TOKEN_WEBCAM_DIB: case TOKEN_WEBCAM_DIB:
@@ -156,35 +268,31 @@ void CVideoDlg::DrawDIB(void)
if (SysMenu == NULL) if (SysMenu == NULL)
return; return;
int nHeadLen = 1 + 1 + 4; const int nHeadLen = 1 + 1 + 4;
LPBYTE szBuffer = m_ContextObject->InDeCompressedBuffer.GetBuffer(); LPBYTE szBuffer = m_ContextObject->InDeCompressedBuffer.GetBuffer();
UINT ulBufferLen = m_ContextObject->InDeCompressedBuffer.GetBufferLength(); 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> 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> // <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) if (m_nCount == 1)
{ {
pSysMenu->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); SysMenu->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
} }
pSysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_UNCHECKED); SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_UNCHECKED);
memcpy(m_lpScreenDIB, lpBuffer + nHeadLen, nBufferLen - nHeadLen);*/ memcpy(m_BitmapData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen);
} }
else // <20><><EFBFBD><EFBFBD> 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> ////<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> InitCodec(*(LPDWORD)(szBuffer + 2)); //<2F>ж<EFBFBD>
if (m_pVideoCodec != NULL) if (m_pVideoCodec != NULL)
{ {
//pSysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_CHECKED); SysMenu->CheckMenuItem(IDM_ENABLECOMPRESS, MF_CHECKED);
memcpy(m_BitmapCompressedData_Full, szBuffer + nHeadLen, ulBufferLen - nHeadLen); //<2F><>Ƶû<C6B5>н<EFBFBD>ѹ 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>ʽ //<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, m_pVideoCodec->DecodeVideoData(m_BitmapCompressedData_Full, ulBufferLen - nHeadLen,
(LPBYTE)m_BitmapData_Full, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ<EFBFBD><EFBFBD>m_lpScreenDIB (LPBYTE)m_BitmapData_Full, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ
/* m_pVideoCodec->DecodeVideoData(m_lpCompressDIB, nBufferLen - nHeadLen,
(LPBYTE)m_lpScreenDIB, NULL, NULL); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݽ<EFBFBD>ѹ<EFBFBD><D1B9>m_lpScreenDIB*/
} }
} }
@@ -198,9 +306,16 @@ void CVideoDlg::InitCodec(DWORD fccHandler)
return; return;
m_pVideoCodec = new CVideoCodec; m_pVideoCodec = new CVideoCodec;
if (!m_pVideoCodec->InitCompressor(m_BitmapInfor_Full, fccHandler)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>ʽ ƥ<><C6A5><EFBFBD><EFBFBD> if (!m_pVideoCodec->InitCompressor(m_BitmapInfor_Full, fccHandler))
{ {
OutputDebugStringA("======> InitCompressor failed \n"); OutputDebugStringA("======> 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_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
} }
} }
@@ -212,6 +327,19 @@ void CVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{ {
case IDM_SAVEAVI: 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_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
break; break;
} }
} }
@@ -243,4 +371,14 @@ void CVideoDlg::OnPaint()
m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight, m_BitmapInfor_Full->bmiHeader.biWidth, m_BitmapInfor_Full->bmiHeader.biHeight,
DDF_SAME_HDC 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));
}
} }

View File

@@ -7,6 +7,25 @@
#pragma comment(lib,"Vfw32.lib") #pragma comment(lib,"Vfw32.lib")
/************************************************************************
* @class CBmpToAvi
* @brief λͼתAVI֡
************************************************************************/
class CBmpToAvi
{
public:
CBmpToAvi();
virtual ~CBmpToAvi();
bool Open(LPCTSTR szFile, LPBITMAPINFO lpbmi);
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>
};
class CVideoCodec class CVideoCodec
{ {
COMPVARS m_cv; COMPVARS m_cv;
@@ -141,6 +160,7 @@ public:
class CVideoDlg : public CDialog class CVideoDlg : public CDialog
{ {
DECLARE_DYNAMIC(CVideoDlg) DECLARE_DYNAMIC(CVideoDlg)
HICON m_hIcon;
public: public:
CVideoDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CVideoDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
@@ -156,8 +176,13 @@ public:
void OnReceiveComplete(void); void OnReceiveComplete(void);
void DrawDIB(void); void DrawDIB(void);
void SaveAvi(void);
void InitCodec(DWORD fccHandler); void InitCodec(DWORD fccHandler);
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; HDC m_hDC;
HDRAWDIB m_hDD; HDRAWDIB m_hDD;

View File

@@ -31,6 +31,20 @@ BOOL iniFile::SetInt(CString MainKey,CString SubKey,int Data)
return ::WritePrivateProfileString(MainKey, SubKey,strData,m_IniFilePath); return ::WritePrivateProfileString(MainKey, SubKey,strData,m_IniFilePath);
} }
CString iniFile::GetStr(CString MainKey, CString SubKey, CString def)
{
char buf[_MAX_PATH];
::GetPrivateProfileString(MainKey, SubKey, def, buf, sizeof(buf), m_IniFilePath);
return buf;
}
BOOL iniFile::SetStr(CString MainKey, CString SubKey, CString Data)
{
return ::WritePrivateProfileString(MainKey, SubKey, Data, m_IniFilePath);
}
iniFile::~iniFile(void) iniFile::~iniFile(void)
{ {
} }

View File

@@ -6,6 +6,8 @@ public:
BOOL ContructIniFile(); BOOL ContructIniFile();
int GetInt(CString MainKey,CString SubKey); int GetInt(CString MainKey,CString SubKey);
BOOL SetInt(CString MainKey,CString SubKey,int Data); BOOL SetInt(CString MainKey,CString SubKey,int Data);
CString GetStr(CString MainKey,CString SubKey, CString def);
BOOL SetStr(CString MainKey,CString SubKey,CString Data);
CString m_IniFilePath; CString m_IniFilePath;
iniFile(void); iniFile(void);
~iniFile(void); ~iniFile(void);

Binary file not shown.

View File

@@ -6,7 +6,7 @@
#pragma once #pragma once
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB
#define USING_ZLIB 0 #define USING_ZLIB 1
#if !USING_ZLIB #if !USING_ZLIB
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4 // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4
@@ -245,7 +245,7 @@ public:
#ifdef _DEBUG #ifdef _DEBUG
// <20><><EFBFBD>ܼ<EFBFBD><DCBC>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ӡ // <20><><EFBFBD>ܼ<EFBFBD><DCBC>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ӡ
#define AUTO_TICK(thresh) auto_tick(__FUNCTION__, thresh) #define AUTO_TICK(thresh) auto_tick TICK(__FUNCTION__, thresh)
#else #else
#define AUTO_TICK(thresh) #define AUTO_TICK(thresh)
#endif #endif