Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f03c14fee | ||
|
|
188d5cd24a | ||
|
|
b8ab695e5e | ||
|
|
74c4266eb7 | ||
|
|
fd62f33e60 | ||
|
|
1e7cbcbf5c | ||
|
|
91428795e6 | ||
|
|
af63166fbe | ||
|
|
be45b5bd89 | ||
|
|
bd7b9ed492 | ||
|
|
4283a31e66 | ||
|
|
5aadfc13a6 | ||
|
|
e4793a489e |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
68
ReadMe.txt
68
ReadMe.txt
@@ -109,3 +109,71 @@
|
|||||||
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。
|
||||||
|
|
||||||
|
2019.3.24
|
||||||
|
|
||||||
|
1、将"2015Remote.rc"的一个光标文件"4.cur"的路径由绝对路径改为相对路径。
|
||||||
|
|
||||||
|
2、新增Release模式编译后控制台运行时不可见,新增TestRun向注册表写入开机自启动项。
|
||||||
|
|
||||||
|
2019.3.29
|
||||||
|
|
||||||
|
1、主控端和受控端同时修改LOGIN_INFOR结构,修复了受控端上报的操作系统信息不准确的问题。
|
||||||
|
|
||||||
|
2、发布V1.0.0.5。
|
||||||
|
|
||||||
|
注意:此次更新后的主控端需要和受控端匹配使用,否则可能出现问题。
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,6 +44,7 @@ VOID CAudioManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
{
|
{
|
||||||
case COMMAND_NEXT:
|
case COMMAND_NEXT:
|
||||||
{
|
{
|
||||||
|
if (1 == ulLength)
|
||||||
NotifyDialogIsOpen();
|
NotifyDialogIsOpen();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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_)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -20,6 +20,12 @@ DWORD WINAPI StartClient(LPVOID lParam);
|
|||||||
|
|
||||||
enum { E_RUN, E_STOP } status;
|
enum { E_RUN, E_STOP } status;
|
||||||
|
|
||||||
|
// <20><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
|
||||||
|
// <20>ο<EFBFBD><CEBF><EFBFBD>https://blog.csdn.net/lijia11080117/article/details/44916647
|
||||||
|
// step1: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ΪmainCRTStartup
|
||||||
|
// step2: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ϵͳ"<22><><EFBFBD><EFBFBD>ϵͳΪ<CDB3><CEAA><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
BOOL CALLBACK callback(DWORD CtrlType)
|
BOOL CALLBACK callback(DWORD CtrlType)
|
||||||
{
|
{
|
||||||
if (CtrlType == CTRL_CLOSE_EVENT)
|
if (CtrlType == CTRL_CLOSE_EVENT)
|
||||||
@@ -85,7 +91,7 @@ BOOL APIENTRY DllMain( HINSTANCE hInstance,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ghost
|
||||||
extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort)
|
||||||
{
|
{
|
||||||
memcpy(g_szServerIP,szServerIP,strlen(szServerIP));
|
memcpy(g_szServerIP,szServerIP,strlen(szServerIP));
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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
85
client/CursorInfo.h
Normal 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_)
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -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_)
|
|
||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,118 @@
|
|||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
#include "LoginServer.h"
|
#include "LoginServer.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
---------------------
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>IT1995
|
||||||
|
<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>CSDN
|
||||||
|
ԭ<EFBFBD>ģ<EFBFBD>https://blog.csdn.net/qq78442761/article/details/64440535
|
||||||
|
<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>2019.3.29<EFBFBD><EFBFBD>Ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
************************************************************************/
|
||||||
|
std::string getSystemName()
|
||||||
|
{
|
||||||
|
std::string vname("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ");
|
||||||
|
//<2F><><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊwin8.1<EFBFBD><EFBFBD>win10
|
||||||
|
typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
|
||||||
|
HINSTANCE hinst = LoadLibrary("ntdll.dll");
|
||||||
|
DWORD dwMajor, dwMinor, dwBuildNumber;
|
||||||
|
NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
|
||||||
|
proc(&dwMajor, &dwMinor, &dwBuildNumber);
|
||||||
|
if (dwMajor == 6 && dwMinor == 3) //win 8.1
|
||||||
|
{
|
||||||
|
vname = "Windows 8.1";
|
||||||
|
printf_s("<EFBFBD>˵<EFBFBD><EFBFBD>Եİ汾Ϊ:%s\n", vname.c_str());
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
if (dwMajor == 10 && dwMinor == 0) //win 10
|
||||||
|
{
|
||||||
|
vname = "Windows 10";
|
||||||
|
printf_s("<EFBFBD>˵<EFBFBD><EFBFBD>Եİ汾Ϊ:%s\n", vname.c_str());
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
//<2F><><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD>ж<EFBFBD>Win Server<65><72><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>˻<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5>Ļ<EFBFBD><C4BB>ӣ<EFBFBD><D3A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
//<2F>ж<EFBFBD>win8.1<EFBFBD><EFBFBD><EFBFBD>µİ汾
|
||||||
|
SYSTEM_INFO info; //<2F><>SYSTEM_INFO<46>ṹ<EFBFBD>ж<EFBFBD>64λAMD<4D><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
GetSystemInfo(&info); //<2F><><EFBFBD><EFBFBD>GetSystemInfo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
||||||
|
OSVERSIONINFOEX os;
|
||||||
|
os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
||||||
|
if (GetVersionEx((OSVERSIONINFO *)&os))
|
||||||
|
{
|
||||||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ汾<DDB0><E6B1BE>Ϣ<EFBFBD>жϲ<D0B6><CFB2><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
||||||
|
switch (os.dwMajorVersion)
|
||||||
|
{ //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
||||||
|
case 4:
|
||||||
|
switch (os.dwMinorVersion)
|
||||||
|
{ //<2F>жϴΰ汾<CEB0><E6B1BE>
|
||||||
|
case 0:
|
||||||
|
if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)
|
||||||
|
vname ="Windows NT 4.0"; //1996<39><36>7<EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
|
||||||
|
vname = "Windows 95";
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
vname ="Windows 98";
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
vname = "Windows Me";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
switch (os.dwMinorVersion)
|
||||||
|
{ //<2F>ٱȽ<D9B1>dwMinorVersion<6F><6E>ֵ
|
||||||
|
case 0:
|
||||||
|
vname = "Windows 2000"; //1999<39><39>12<31>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
vname = "Windows XP"; //2001<30><31>8<EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION &&
|
||||||
|
info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||||
|
vname = "Windows XP Professional x64 Edition";
|
||||||
|
else if (GetSystemMetrics(SM_SERVERR2) == 0)
|
||||||
|
vname = "Windows Server 2003"; //2003<30><33>3<EFBFBD>·<EFBFBD><C2B7><EFBFBD>
|
||||||
|
else if (GetSystemMetrics(SM_SERVERR2) != 0)
|
||||||
|
vname = "Windows Server 2003 R2";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
switch (os.dwMinorVersion)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION)
|
||||||
|
vname = "Windows Vista";
|
||||||
|
else
|
||||||
|
vname = "Windows Server 2008"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION)
|
||||||
|
vname = "Windows 7";
|
||||||
|
else
|
||||||
|
vname = "Windows Server 2008 R2";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (os.wProductType == VER_NT_WORKSTATION)
|
||||||
|
vname = "Windows 8";
|
||||||
|
else
|
||||||
|
vname = "Windows Server 2012";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
vname = "δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ";
|
||||||
|
}
|
||||||
|
printf_s("<EFBFBD>˵<EFBFBD><EFBFBD>Եİ汾Ϊ:%s\n", vname.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf_s("<EFBFBD>汾<EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>\n");
|
||||||
|
return vname;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed)
|
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed)
|
||||||
@@ -8,8 +120,7 @@ int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed)
|
|||||||
LOGIN_INFOR LoginInfor = {0};
|
LOGIN_INFOR LoginInfor = {0};
|
||||||
LoginInfor.bToken = TOKEN_LOGIN; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>¼
|
LoginInfor.bToken = TOKEN_LOGIN; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>¼
|
||||||
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ϵͳ<CFB5><CDB3>Ϣ
|
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ϵͳ<CFB5><CDB3>Ϣ
|
||||||
LoginInfor.OsVerInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
strcpy_s(LoginInfor.OsVerInfoEx, getSystemName().c_str());
|
||||||
GetVersionEx((OSVERSIONINFO *)&LoginInfor.OsVerInfoEx); // ע<><D7A2>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD>PCName
|
//<2F><><EFBFBD><EFBFBD>PCName
|
||||||
char szPCName[MAX_PATH] = {0};
|
char szPCName[MAX_PATH] = {0};
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
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>Ϣ
|
char OsVerInfoEx[sizeof(OSVERSIONINFOEX)];// <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>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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>㷨
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,5
|
||||||
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.5"
|
||||||
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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -65,6 +66,8 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -60,6 +60,9 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<IgnoreSpecificDefaultLibraries>libcmt.lib</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>libcmt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
|
<EntryPointSymbol>
|
||||||
|
</EntryPointSymbol>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -79,6 +82,8 @@
|
|||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions> /SAFESEH:NO %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -88,7 +93,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 +115,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" />
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -19,15 +19,50 @@ struct CONNECT_ADDRESS
|
|||||||
int iPort;
|
int iPort;
|
||||||
}g_ConnectAddress={0x1234567,"",0};
|
}g_ConnectAddress={0x1234567,"",0};
|
||||||
|
|
||||||
int main()
|
/**
|
||||||
|
* @brief <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @param[in] *sPath ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||||
|
* @param[in] *sNmae ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @return <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
* @details Win7 64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>\n
|
||||||
|
* HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
|
||||||
|
* @note <20>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>ԱȨ<D4B1><C8A8><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>д<EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*/
|
||||||
|
BOOL SetSelfStart(const char *sPath, const char *sNmae)
|
||||||
{
|
{
|
||||||
|
// д<><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||||
|
#define REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
|
||||||
|
|
||||||
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
HKEY hKey = NULL;
|
||||||
|
LONG lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
|
||||||
|
|
||||||
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
||||||
|
if(lRet != ERROR_SUCCESS)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1);
|
||||||
|
|
||||||
|
// <20>ر<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
|
||||||
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
||||||
|
return lRet == ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
if(!SetSelfStart(argv[0], "a_ghost"))
|
||||||
|
{
|
||||||
|
std::cout<<"<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>.\n";
|
||||||
|
}
|
||||||
char path[_MAX_PATH], *p = path;
|
char path[_MAX_PATH], *p = path;
|
||||||
GetModuleFileNameA(NULL, path, sizeof(path));
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
||||||
while (*p) ++p;
|
while (*p) ++p;
|
||||||
while ('\\' != *p) --p;
|
while ('\\' != *p) --p;
|
||||||
strcpy(p+1, "ServerDll.dll");
|
strcpy(p+1, "ServerDll.dll");
|
||||||
HMODULE hDll = LoadLibraryA(path);
|
HMODULE hDll = LoadLibraryA(path);
|
||||||
typedef void (*TestRun)(char* strHost,int nPort );
|
typedef void (*TestRun)(char* strHost,int nPort);
|
||||||
TestRun run = hDll ? TestRun(GetProcAddress(hDll, "TestRun")) : NULL;
|
TestRun run = hDll ? TestRun(GetProcAddress(hDll, "TestRun")) : NULL;
|
||||||
stop = hDll ? StopRun(GetProcAddress(hDll, "StopRun")) : NULL;
|
stop = hDll ? StopRun(GetProcAddress(hDll, "StopRun")) : NULL;
|
||||||
bStop = hDll ? IsStoped(GetProcAddress(hDll, "IsStoped")) : NULL;
|
bStop = hDll ? IsStoped(GetProcAddress(hDll, "IsStoped")) : NULL;
|
||||||
|
|||||||
Binary file not shown.
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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>", 64 },
|
||||||
{"<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>ϵͳ", 256 },
|
||||||
{"CPU", 80 },
|
{"CPU", 80 },
|
||||||
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ", 81 },
|
{"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ", 72 },
|
||||||
{"PING", 151 }
|
{"PING", 100 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// <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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1010,24 +970,8 @@ LRESULT CMy2015RemoteDlg::OnUserToOnlineList(WPARAM wParam, LPARAM lParam)
|
|||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
strPCName = LoginInfor->szPCName;
|
strPCName = LoginInfor->szPCName;
|
||||||
|
|
||||||
switch (LoginInfor->OsVerInfoEx.dwPlatformId)
|
//<2F>汾<EFBFBD><E6B1BE>Ϣ
|
||||||
{
|
strOS = LoginInfor->OsVerInfoEx;
|
||||||
case VER_PLATFORM_WIN32_NT:
|
|
||||||
if (LoginInfor->OsVerInfoEx.dwMajorVersion <= 4 )
|
|
||||||
strOS = "WindowsNT";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 )
|
|
||||||
strOS = "Windows2000";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 1 )
|
|
||||||
strOS = "WindowsXP";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 5 && LoginInfor->OsVerInfoEx.dwMinorVersion == 2 )
|
|
||||||
strOS = "Windows2003";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 0 )
|
|
||||||
strOS = "WindowsVista";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 1 )
|
|
||||||
strOS = "Windows7";
|
|
||||||
if ( LoginInfor->OsVerInfoEx.dwMajorVersion == 6 && LoginInfor->OsVerInfoEx.dwMinorVersion == 2 )
|
|
||||||
strOS = "Windows8";
|
|
||||||
}
|
|
||||||
|
|
||||||
//CPU
|
//CPU
|
||||||
strCPU.Format("%dMHz", LoginInfor->dwCPUMHz);
|
strCPU.Format("%dMHz", LoginInfor->dwCPUMHz);
|
||||||
@@ -1142,7 +1086,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;
|
||||||
|
|||||||
@@ -9,15 +9,15 @@
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// <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>Ϣ
|
char OsVerInfoEx[sizeof(OSVERSIONINFOEX)];// <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>
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ CCpuUsage::CCpuUsage()
|
|||||||
CCpuUsage::~CCpuUsage()
|
CCpuUsage::~CCpuUsage()
|
||||||
{
|
{
|
||||||
PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (m_pCounterStruct)
|
||||||
delete m_pCounterStruct;
|
delete m_pCounterStruct;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user