2021-07-15

介绍
gitee链接:https://gitee.com/lensen00/as
复刻gitee中的QTScrcpy项目(https://gitee.com/Barryda/QtScrcpy)。原项目基于QT+vs2017环境开发。
本项目基于vs2017开发。

项目进展。

使用说明

//adbPipe.h

#pragma once
#ifndef ADBPIPE_H
#define ADBPIPE_H
#include 
#include 
#include 

using namespace std;

class Pipe{
   
public:
	enum ADB_EXEC_RESULT
    {
   
		AER_ERROR_START,          // 启动失败
        AER_SUCCESS_START,        // 启动成功 
        AER_SUCCESS_EXEC,         // 执行成功
        AER_ERROR_EXEC,           // 执行失败
        AER_ERROR_MISSING_BINARY, // 找不到文件
    };

    void loop() ;    //循环
    void isloop() ;    //循环
    const string & getError() const;    //获取当前错误信息
    const bool sendCommand(const char *);    //执行命令
	const bool sendCommand(const string &,const char *);
    void setStatus(const char*);    //设置错误信息
	const string &getstrbuff() const;
	void cleanbuffer();

	ADB_EXEC_RESULT adbProcessResult();
	const string getDeviceSerial();
	const string getDeviceIP();
	void reverse(const string &serial, const string &deviceSocketName, int localPort);
	bool reverseRemove(const string &serial, const string &);
	void push(const string &serial, const string &local, const string &remote);
	bool removePath(const string &serial, const string &deviceSocketName);

    Pipe();        //管道执行的命令
    ~Pipe();

private:
    HANDLE hpiperead = NULL;     //读入 匿名管道
    HANDLE hpipewrite = NULL;    //写出 匿名管道
    HANDLE hpiperead2 = NULL;    //读入2 匿名管道
    HANDLE hpipewrite2 = NULL;   //写出2 匿名管道
    HANDLE hProHandle = NULL;
    HANDLE hThrLoop = NULL;
    HANDLE hThrisLoop = NULL;
    SECURITY_ATTRIBUTES ai;     //安全属性
    PROCESS_INFORMATION pi;    //进程信息
    STARTUPINFOA si;

    string errorString;
	string strbuff;

	ADB_EXEC_RESULT processResult;
};
#endif 
//adbPipe.cpp

#include "adbPipe.h"


DWORD __stdcall ThrPipeThreadRead(void *www)
{
   
    Pipe * pipe = (Pipe *)www;
    pipe->loop();
    return 0;
    //创建内核对象使用完之后一定记得关闭,有可能会产生内存泄露
}
DWORD __stdcall WaitPipe(void *www)
{
   
    Pipe * pipe = (Pipe *)www;
    pipe->isloop();
    return 0;
}


Pipe::Pipe(){
   
    ai.nLength = sizeof(SECURITY_ATTRIBUTES);
    ai.bInheritHandle = true;
    ai.lpSecurityDescriptor = NULL;
    if (!CreatePipe(&hpiperead, &hpipewrite, &ai, 0))  //创建读入管道1
    {
   
		this->setStatus("[0x01]Read 流创建失效");
		processResult=AER_ERROR_START;	
		return;
    }

    if (!CreatePipe(&hpiperead2, &hpipewrite2, &ai, 0))  //创建读入管道2
    {
   
		this->setStatus("[0x02]Write 流创建失效");
		processResult=AER_ERROR_START;
		return;
    }
    GetStartupInfoA(&si);    //获取当前进程的STARTUPINFO
    si.cb = sizeof(STARTUPINFO);
    si.hStdError = hpipewrite;    //标准错误输出
    si.hStdOutput = hpipewrite;   //标准输出
    si.hStdInput = hpiperead2;    //标准写入
    si.wShowWindow = SW_SHOW;
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
	
	char com[4] = "cmd";

    if (!(CreateProcessA(NULL, com, NULL, NULL, true, NULL, NULL, NULL, &si, &pi)))      //创建隐藏的CMD进程
    {
   
        this->setStatus("[0x03] CreateProcess函数执行出错");
		processResult=AER_ERROR_START;
        return;
    }
	else processResult=AER_SUCCESS_START;

    DWORD dwThread = FALSE;
 

你可能感兴趣的:(android)