RCAClientLibrary.h
上传用户:hyz2004817
上传日期:2022-03-30
资源大小:226k
文件大小:9k
- #ifndef _RCACLIENTLIBRARY_H_
- #define _RCACLIENTLIBRARY_H_
- #include "stdafx.h"
- #define SERVER_LISTEN_PORT 4813
- #define SAFE_DELETE_ARRAY(x) if(x!=NULL) { delete[] x; x = NULL; }
- #define SAFE_CLOSE_HANDLE(x) if(x!=NULL) { CloseHandle( x ); x = NULL; }
- #define WSAERRORSTRING (WSAErrorString(WSAGetLastError()))
- #ifdef _DEBUG // 调试输出宏
- #define DEBUGOUTPUT1(x) cout << x << endl;
- #define DEBUGOUTPUT2(x, y) cout << x << y << endl;
- #define DEBUGOUTPUT3(x, y, z) cout << x << y << z << endl;
- #else
- #define DEBUGOUTPUT1(x)
- #define DEBUGOUTPUT2(x, y)
- #define DEBUGOUTPUT3(x, y, z)
- #endif
- // 定义应答状态码
- #define RCA_RESPONSE_200_OK 200
- #define RCA_RESPONSE_404_NOTFOUND 404
- #define RCA_RESPONSE_808_BYEBYE 808
- #define RCA_RESPONSE_502_FAILED 502
- ///////////////////////////////////////////
- // RCA 协议头结构 大小为 40 个字节
- //
- typedef struct _RCARequestHeader{
- char rcaID[4]; // "RCA "
- DWORD dwHeaderType; // header type
- BOOL bNeedResponse; // 是否需要应答
- WORD wMajorVersion; // 主版本号
- WORD wMinorVersion; // 次版本号
- DWORD dwRequestID; // 请求操作的 ID 号
- DWORD requestBytes; // 请求的总字节数
- char reserved[16]; // 保留 24 个字节
- } RCAREQUESTHEADER, *PRCAREQUESTHEADER;
- typedef struct _RCAResponseHeader {
-
- char rcaID [4]; // RCA ID "RCA "
- DWORD dwHeaderType; // RCA header type
- DWORD dwStatusCode; // RCA response status code
- DWORD dwTotalBytes; // response total bytes
-
- char reserved[24]; // 保留 28 个字节
- }RCARESPONSEHEADER, *PRCARESPONSEHEADER;
- typedef struct _RCAKeepAliveHeader {
- char rcaID[4];
- DWORD dwHeaderType;
-
- char reserved[32];
- }RCAKEEPALIVEHEADER, *PRCAKEEPALIVEHEADER;
- #define RCAHEADER_TYPE_KEEPALIVE 0 // 保活包
- #define RCAHEADER_TYPE_REQUEST 1 // 请求头
- #define RCAHEADER_TYPE_RESPONSE 2 // 响应头
- typedef struct _RCAHeader {
- char rcaID[4];
- DWORD dwHeaderType;
- char reserved[32];
- }RCAHEADER, *PRCAHEADER;
- // these uses to the dwImageFormat member of RCAGETSCREENDATA struct
- #define IMAGE_FORMAT_BMP 1
- #define IMAGE_FORMAT_JPEG 2
- #define IMAGE_FORMAT_JPE IMAGE_FORMAT_JPEG
- #define IMAGE_FORMAT_JPG IMAGE_FORMAT_JPEG
- #define IMAGE_FORMAT_GIF 3
- ///////////////////////////////////////
- //
- //
- // 描述 : 请求服务器传送屏幕图像. 这个数据结构 大小为 48 字节.
- // 0x20 子协议要求的附带数据为 48 字节, 接收完这 48 字节后
- // 可以将这48 字节强制转换成 RCAGETSCREENDATA 结构
- //
- //
- //
- //
- typedef struct _RCAGetImageData{
- int x; // 截屏矩形的左上角的 x 座标
- int y; // 截屏矩形的左上角的 y 座标
- int w; // 截屏矩形的宽
- int h; // 截屏矩形的高
- int zw; // 返回图象的缩放, 若为0, 则不缩放.
- int zh; // 返回图象的缩放, 若为0, 则不缩放.
- int iBitCount; // 要求的位深, 可以是以下一个值 8, 16, 24, 32
- DWORD dwImageFormat; // 图象格式标记
- DWORD dwFlagEx1; // 保留给特定格式使用
- DWORD dwFlagEx2; // 保留给特定格式使用
- DWORD dwFlagEx3; // 保留给特定格式使用
- DWORD dwFlagEx4; // 保留给特定格式使用
- } RCAGETIMAGEDATA, *PRCAGETIMAGEDATA;
- // 与 WINDOWS MOUSEINPUT 结构兼容. 使用在 0x40 子协议
- typedef struct RCAMouseInput {
- LONG dx;
- LONG dy;
- DWORD mouseData;
- DWORD dwFlags;
- DWORD time;
- ULONG_PTR dwExtraInfo;
- } RCAMOUSEINPUT, *PRCAMOUSEINPUT;
- // 与 WINDOWS KEYBDINPUT 结构兼容. 使用在 0x41 子协议
- typedef struct RCAKeybdInput{
- WORD wVk;
- WORD wScan;
- DWORD dwFlags;
- DWORD time;
- ULONG_PTR dwExtraInfo;
- } RCAKEYBDINPUT, *PRCAKEYBDINPUT;
- // 定义一个信息结构. 在子协议 0x110 中使用
- //
- typedef struct RCAComputerInfo {
- CHAR pszOS[6]; // WIN95 / WIN98 / WINNT / WIN2K / WINXP
- MEMORYSTATUS memoryStatus; // 由 GlobalMemoryStatus 函数获得
- DWORD dwScreenWidth; // 当前显示分辨率的宽
- DWORD dwScreenHeight; // ................高
- DWORD dwScreenBitCount; // ................位深
- } RCACOMPUTERINFO, *PRCACOMPUTERINFO;
- //////////////////////////////////////////
- //
- // 发送数据帮助函数, IO 模型为 event select
- //
- // 在调用函数前 SOCKET s 必须被置为异步模式,
- // 并且用带有 FD_WRITE 事件通知的标志对其调用了 WSAEventSelect 函数
- //
- extern "C"
- BOOL
- WINAPI RCASend_EventSelectIO(
- SOCKET s,
- HANDLE hEventArray[2],
- char * buf,
- int len
- );
- ////////////////////////////////////////
- //
- // 接收数据帮助函数, IO 模型为 Async Event
- //
- // 在调用函数前 SOCKET s 必须被置为异步模式,
- // 并且用带有 FD_READ 事件通知的标志对其调用了 WSAEventSelect 函数
- //
- extern "C"
- BOOL
- WINAPI RCARecv_EventSelectIO(
- SOCKET s,
- HANDLE hEventArray[2],
- char * buf, // 接收缓冲区 . 若成功
- int len //
- );
- ///////////////////////////////////////////
- //
- // 获得整个屏幕的象素信息
- //
- // 参数:
- //
- // pbmi[in,out] -- BITMAPINFO 结构指针, 函数成功调用后会填充这个结构,这个结构反映了象素信息
- //
- // x, y, w, h; 矩形的左上角座标, 以及宽高. 如果这些参数不合法,将被修整为合法参数
- //
- // pBits[in,out] -- void 指针, 函数调用成功后,pBits 将被象素值填充. 如果 pBits 为NULL,
- // 函数将修改 dwBufferSize 参数, 指明需要多少缓冲存放象素值
- //
- // dwBufferSize -- [in, out] 指明 pBits 的大小. 如果函数成功调用后, dwBufferSize 将会被修改,
- // 指明实际拷贝的象素字节数
- // 返回值:
- // BOOL 类型, 函数调用成功后, 将返回 TRUE; 失败,将返回 FALSE;
- //
- HBITMAP
- WINAPI GetDCPixel_BMP (
- HDC hdc,
- int x,
- int y,
- int w,
- int h,
- int zw, // 缩放控制, 0 为不缩放
- int zh, // 缩放控制, 0 为不缩放
- WORD wBitCount,
- VOID ** pBits,
- BITMAPINFOHEADER * pbmih, // 当色深为 8 时, 包含颜色表
- DWORD * pdwBitmapInfoSize
- );
- ////////////////////////////////////////////////
- ////
- //
- // 从一个 JPEG 格式的像素缓冲区解码,
- // 解码后的像素格式为 WINDOWS DIB 格式
- //
- // 存放 WINDOWS DIB 格式的像素缓冲区由此函数分配,
- // 释放交由调用者. 必须用 delete[] 释放
- //
- BOOL
- WINAPI
- DecodeFromJPEGBuffer(
- BYTE * lpJpgBuffer,
- DWORD dwJpgBufferSize,
- BYTE** lppRgbBuffer,
- DWORD* lpdwWidth,
- DWORD* lpdwHeight,
- DWORD* lpdwNumberOfChannels
- );
- ////////////////////////////////////////////////
- //
- // 从一个 WINDOWS DIB 格式的像素缓冲区编码到一个 JPEG 格式的像素缓冲区
- //
- // 存放 JPEG 格式的像素缓冲区由此函数分配
- // 释放交由调用者, 必须用 delete[] 释放
- extern "C"
- BOOL
- WINAPI
- EncodeToJPEGBuffer(
- BYTE* lpRgbBuffer,
- DWORD dwWidth,
- DWORD dwHeight,
- BYTE** lppJpgBuffer,
- DWORD* lpdwJpgBufferSize,
- int iQuality // JPEG 图象质量
- );
- /////////////////////////////////////////////////////
- //
- // 初始化一个应答头, dwTotalBytes 被初始化为 sizeof(RCARESPONSEHEAD)
- //
- extern "C"
- VOID
- WINAPI InitResponseHead(
- RCARESPONSEHEADER* prresh,
- DWORD dwStatusCode,
- DWORD dwSize
- );
- char *
- WINAPI
- WSAErrorString(
- int error
- );
- /////////////////////////////////////////
- //
- // 创建一个 SOCKET 句柄, 并将其置于事件选择 IO 模式
- //
- BOOL WINAPI CreateEventSelectSocket(
- SOCKET * s,
- HANDLE * hEvent,
- LONG lEventFlags
- );
- ////////////////////////////////////////
- //
- // 连接到一个服务器, SOCKET IO 模型: 事件选择
- //
- //
- BOOL
- WINAPI
- RCAConnect_EventSelectIO (
- SOCKET s,
- HANDLE hEventArray[2],
- sockaddr * addr,
- UINT uMsg
-
- );
- /////////////////////////////////////
- //
- // 初始化一个 RCA 请求头
- //
- VOID
- WINAPI
- InitRCARequestHead (
- RCAREQUESTHEADER * rreqh,
- WORD wMajorVersion, // 主版本号
- WORD wMinorVersion, // 次版本号
- DWORD dwRequestID,
- DWORD dwRequestBytes
- );
- ///////////////////////////////////////
- //
- // 向 RCA 服务器请求执行 0x10 号(创建一个进程)操作
- //
- BOOL
- WINAPI
- RCASendRequest_0X10_EventSelectIO(
- SOCKET s,
- HANDLE hEventArray[2],
- HWND hwnd,
- PSTR pOperation,
- PSTR pFile,
- PSTR pParameters,
- PSTR pDirectory,
- INT nShowCmd
- );
- ////////////////////////////////////////////////
- //
- // 向 RCA 服务器请求执行 0x20 号(截取图象) 操作
- //
- //
- BOOL
- WINAPI
- RCASendRequest_0X20_EventSelectIO(
- SOCKET s,
- HANDLE hEventArray[2],
- RCAGETIMAGEDATA * gm
- );
- ////////////////////////////////////////////////
- //
- // 当成功发送图象请求数据后, 可以调用这个函数.
- // 这个函数接收数据并创建 HBITMAP
- HBITMAP
- WINAPI
- RCARecvImageData(
- SOCKET s,
- HANDLE hEventArray[2],
- DWORD dwImageFormat
- );
-
- ////////////////////////////////////////////
- //
- // 发送鼠标输入数据
- //
- BOOL
- WINAPI
- RCASendMouseInput_EventSelectIO(
- SOCKET s,
- HANDLE hEventArray[2],
- BOOL * pbExit,
- RCAMOUSEINPUT * pMouseInput,
- DWORD dwArraySize
- );
- ///////////////////////////////////////////
- //
- // 发送键盘输入数据
- //
- BOOL
- WINAPI
- RCASendKeybdInput_EventSelectIO(
- SOCKET s,
- HANDLE hEventArray[2],
- BOOL* pbExit,
- RCAKEYBDINPUT * pKeybdInput,
- DWORD dwArraySize
- );
- /////////////////////////////////////////////
- //
- // 根据消息构造一个 RCAMOUSEINPUT 结构.
- BOOL
- WINAPI
- CreateMouseInput(
- RCAMOUSEINPUT* pmi,
- UINT msg,
- WPARAM w,
- LPARAM l,
- float fWidthScale,
- float fHeightScale
- );
- ////////////////////////////////////////////
- //
- // 根据消息构造一个 RCAKEYBDINPUT 结构
- //
- BOOL
- WINAPI
- CreateKeybdInput(
- RCAKEYBDINPUT* pbi,
- UINT msg,
- WPARAM w,
- LPARAM l
- );
- #endif