1.窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 微信跳一跳辅助
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            int titleh = Height - ClientSize.Height;
            int titlew = Width - ClientSize.Width;
            Height = height + titleh;
            Width = width + titlew;

}
        int time = int.Parse(System.Configuration.ConfigurationSettings.AppSettings["Time"]);//点击后截图时间;测试发现不能设太小
        string path = System.Configuration.ConfigurationSettings.AppSettings["AdbPath"];//adb.exe所在路径,徐包含adb.exe
        int height = int.Parse(System.Configuration.ConfigurationSettings.AppSettings["Height"]);//图片高度,一般截取第一张图后,打开图片用截图工具拖一下看看图片高度宽度各是多少
        int width =int.Parse(System.Configuration.ConfigurationSettings.AppSettings["Width"]);//图片宽度
        bool canCLick = false;
        Point Start;
        Point End;
        private void pictureBox1_Click(object sender, EventArgs e)

{
            if (!canCLick)
            {
                Text = Application.ProductName + "(不允许点击!)";
                return;
            }
            var me = ((System.Windows.Forms.MouseEventArgs)(e));

if (me.Button == MouseButtons.Left)//黑人位置
            {
                Start = ((System.Windows.Forms.MouseEventArgs)(e)).Location;
            }
            else if (me.Button == MouseButtons.Right)//目标位置
            {
                if(Start.Equals(new Point(0, 0)))
                {
                    GetPhoneScreen();
                    Text = Application.ProductName + "(为你刷新手机屏幕)";
                    return;
                }
                End = ((System.Windows.Forms.MouseEventArgs)(e)).Location;
                //计算两点直接的距离
                //3.999022243950134这个值来自网络大神,本文思路也是按照网上别人给出的实例思路来的!
                double value = Math.Sqrt(Math.Pow(Math.Abs(Start.X - End.X),2)+Math.Pow( Math.Abs(Start.Y - End.Y),2));
               Text = Application.ProductName+ string.Format("(距离{0}需要时间:{1})", value, (3.999022243950134 * value).ToString("0"));
              new ProcessDef(ProcessDefEnum.other)//此处引用本人自己写的,以前封装的类库,文后会贴ProcessDef源码,也可百度或者直接使用DotNet文章中的写法
                {
                    FileName = path,
                    CommandText= string.Format("shell input swipe 100 100 200 200 {0}", (3.999022243950134 * value).ToString("0"))
               }.RunGetResult();
                canCLick = false;
                Start = new Point(0, 0);
                GetPhoneScreen();
            }
        }
        void GetPhoneScreen()
        {
            try
            {
                if (File.Exists("D:tyt.png"))
            {
                pictureBox1.Image = null;
                Thread.Sleep(time);
                GC.Collect();
                File.Delete("D:tyt.png");
            }
            new ProcessDef(ProcessDefEnum.other)
            {
                FileName = path,
                CommandText = "shell /system/bin/screencap -p /sdcard/tyt.png"
            }.RunGetResult();
            Thread.Sleep(5);
            new ProcessDef(ProcessDefEnum.other)
            {
                FileName = path,
                CommandText = "pull /sdcard/tyt.png D:tyt.png"
            }.RunGetResult();
            pictureBox1.Image = new Bitmap("D:tyt.png");
            canCLick = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            GetPhoneScreen();
        }       
    }

}

2.

public class ProcessDef

{
            public ProcessDef(ProcessDefEnum defEnum)
        {
            StartType = defEnum;
            switch (StartType)
            {
                case ProcessDefEnum.cmd:

filename = "cmd.exe";
                    break;
                case ProcessDefEnum.PwoerShell:

filename = "PowerShell.exe";
                    break;
                default: break;
            }
            }
            public delegate void ResultHandler(string msg);
            public event ResultHandler OnResult;
            string filename = string.Empty;
            public string FileName
            {
                get { return filename; }
                set
                {
                    switch (StartType)
                    {
                        case ProcessDefEnum.cmd:

filename = "cmd.exe";
                            break;
                        case ProcessDefEnum.PwoerShell:

filename = "PowerShell.exe";
                            break;
                        case ProcessDefEnum.other:
                            if (!string.IsNullOrEmpty(value))
                            {
                            filename = value;
                            }
                            break;
                    }
                }
            }
            public string WorkDir { get; set; }
            public string CommandText { get; set; } = "echo .....";
            public bool UseShell { set { UseShell = value; } }
            public bool ShowConsole { get; set; } = false;
            public bool RedirectError { get; set; } = true;
            public bool RedirectInput { get; set; } = true;
            public bool RedirectdOutput { get; set; } = true;
            ProcessDefEnum StartType;
            string RuncmdOrPowerShell( bool rtn=false)
            {
                ProcessStartInfo psi = new ProcessStartInfo()
                {
                    FileName = FileName,
                    RedirectStandardError = RedirectError,
                    RedirectStandardInput = RedirectInput,
                    RedirectStandardOutput = RedirectdOutput,
                    CreateNoWindow = !ShowConsole,
                    UseShellExecute = false,
                };
                if (!string.IsNullOrEmpty(WorkDir) && Directory.Exists(WorkDir))
                {
                    psi.WorkingDirectory = WorkDir;

}
                Process process = new Process()
                {
                    StartInfo = psi
                };
                process.Start();
                process.StandardInput.WriteLine(CommandText);
                process.StandardInput.WriteLine ("exit");
                process.StandardInput.AutoFlush = true;
            if (rtn)
            {
                return process.StandardOutput.ReadToEnd();
            }
            else
            {
                while (!process.StandardOutput.EndOfStream)
                {
                    string msg = process.StandardOutput.ReadLine();
                    if (!string.IsNullOrEmpty(msg))
                        OnResult?.Invoke(msg);
                }
                return "";
            }
               // process.WaitForExit();
            }
            string RunOther(bool rtn = false)
        {
            ProcessStartInfo psi = new ProcessStartInfo()
            {
                FileName = FileName,
                RedirectStandardError = RedirectError,
                RedirectStandardInput = RedirectInput,
                RedirectStandardOutput = RedirectdOutput,
                CreateNoWindow = !ShowConsole,
                UseShellExecute = false,
                Arguments = CommandText,
            };

if (!string.IsNullOrEmpty(WorkDir) && Directory.Exists(WorkDir))
            {
                psi.WorkingDirectory = WorkDir;

}
            Process process = new Process()
            {
                StartInfo = psi
            };
            process.Start();
            if (rtn)
            {
                return process.StandardOutput.ReadToEnd();
            }
            else
            {
                OnResult?.Invoke(filename + " " + CommandText);
                while (!process.StandardOutput.EndOfStream)
                {
                    string msg = process.StandardOutput.ReadLine();
                    if (!string.IsNullOrEmpty(msg))
                        OnResult?.Invoke(msg);
                }
                return "";
            }
        }
            public void Run()
            {
            switch (StartType)
            {
                case ProcessDefEnum.cmd:
                case ProcessDefEnum.PwoerShell:
                    RuncmdOrPowerShell();
                    break;
                case ProcessDefEnum.other:
                    RunOther();
                    break;
                default:break;
            }
            }
            public string RunGetResult()
        {
            string result = string.Empty;
            switch (StartType)
            {
                case ProcessDefEnum.cmd:
                case ProcessDefEnum.PwoerShell:
                  result=  RuncmdOrPowerShell();
                    break;
                case ProcessDefEnum.other:
                   result= RunOther();
                    break;
                default:break;
            }
            return result;
        }
       
    }
    public enum ProcessDefEnum
    {
        cmd = 1,
        PwoerShell = 2,
        other = 3
    }

3.Program

namespace 微信跳一跳辅助
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

4.App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdbPath" value="D:\tools\Adb\adb.exe"/>
    <add key="Time" value="700"/>
    <add key="Height" value="620"/>
    <add key ="Width" value="375"/>
  </appSettings>
</configuration>

本文调用adb的程序不建议用文中贴出的类,本人用是因为有封装的Dll直接调用RunGetResult()即可:

给大家搜一个:

建议使用(以下形式)以下代码来自于http://blog.csdn.net/feifei_csdn/article/details/53455490:

  1. System.Diagnostics.Process p = new System.Diagnostics.Process();
  2. p.StartInfo.UseShellExecute = false;
  3. p.StartInfo.CreateNoWindow = true;
  4. p.StartInfo.FileName = "cmd.exe";
  5. p.StartInfo.Arguments = "/c adb shell cat /proc/gesture_state";
  6. p.StartInfo.RedirectStandardError = true;
  7. p.StartInfo.RedirectStandardInput = true;
  8. p.StartInfo.RedirectStandardOutput = true;
  9. p.Start();
  10. string outtr = p.StandardOutput.ReadToEnd();
  11. MessageBox.Show(outtr);
  12. p.Close();

微信小程序挑一挑辅助的更多相关文章

  1. 微信小程序 ui框架(辅助)

    WeUi: https://weui.io/ https://github.com/weui/weui-wxss/ Wa-Ui: https://github.com/liujians/Wa-UI/w ...

  2. 用python一步一步教你玩微信小程序【跳一跳】

    12月28日,微信上线了小游戏「跳一跳」,瞬间成了全民游戏,如何牢牢占据排行榜的第一位呢?用Python帮助你,Python真的无所不能. 作为技术出身的我们,是不是想用技术改变排名呢? 注意:本文适 ...

  3. 微信小程序开发03-这是一个组件

    编写组件 基本结构 接上文:微信小程序开发02-小程序基本介绍 我们今天先来实现这个弹出层: 之前这个组件是一个容器类组件,弹出层可设置载入的html结构,然后再设置各种事件即可,这种组件有一个特点: ...

  4. 微信小程序写tab切换

    微信小程序之tab切换效果,如图: 最近在学习微信小程序并把之前的公司app搬到小程序上,挑一些实现效果记录一下(主要是官方文档里没说的,毕竟官方文档只是介绍功能) .wxml代码: <view ...

  5. 商业版微信小程序开发流程

    一.产品阶段 ①功能规划思维导图——产品经理了解清楚整个项目需求,产出清晰明确的功能需求说明. ②需求报价预算——产品经理确定好功能需求后,输出整个项目开发的报价方案. ③组建技术开发团队——初步确认 ...

  6. Spring+微信小程序 卡券打通

    近期公司项目需要使用到微信卡券模块,主要做的是在小程序打通微信卡券,实现小程序领取卡券的功能效果. 简单说下涉及的东西: Springboot—使用springboot做后端接口,非常便捷 并且根本是 ...

  7. 微信小程序模板消息群发解决思路

    基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...

  8. 「小程序JAVA实战」微信小程序简介(一)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...

  9. 小程序语音红包开发中 汉字转拼音的问题 微信小程序红包开发遇到的坑

    公司最近在开发微信小程序的红包功能,语音红包需要用到文字转拼音的功能. 之前介绍过怎么将中文的汉字转为拼音的,具体看下面这篇文章. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信 ...

  10. BeautyWe.js 一套专注于微信小程序的开发范式

    摘要: 小程序框架... 作者:JerryC 原文:BeautyWe.js 一套专注于微信小程序的开发范式 Fundebug经授权转载,版权归原作者所有. 官网:beautywejs.com Repo ...

随机推荐

  1. LinkedList源码及解析

    package java.util; import java.util.function.Consumer; /** * LinkedList基于链表实现 * 实现了List.Deque.Clonea ...

  2. [转] <context-param>与<init-param>的区别与作用

    看到一篇关于web.xm文件中标签的讲解,顺带还阐述了容器的工作流程,因此转载此,以供参考,原文地址:与的区别与作用 <context-param>的作用: web.xml的配置中< ...

  3. (转)Linux下数据段的区别(数据段、代码段、堆栈段、BSS段)

    进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的, ...

  4. 应用 TransactionScope 报:此操作对该状态的事务无效 的错误

    如果在事务过程跨了数据库服务器(即使在同一台服务器上,两个不同的数据库实例也算跨数据库服务器),而使用 TransactionScope 却报:此操作对该状态的事务无效 的错误 是因为没有启用每台服务 ...

  5. 在Visual Studio中开发Matlab mex文件,生成mexw64/mexw32

    csunking贡献,2015-9-22 1712 1.   概述 通过使用C/C++与Matlab混合编程,既可以享受到C代码快速执行的速度,又可以方便的使用Matlab众多的库函数和强大的绘图功能 ...

  6. [Git] git revert ( revert commit 和 revert merge)

    转载自:http://blog.csdn.net/qinjienj/article/details/7621887 我们难免会因为种种原因执行一些错误的commit / push,git提供了reve ...

  7. 用CRF++开源工具做文本序列标注教程

    本文只介绍如何快速的使用CRF++做序列标注,对其中的原理和训练测试参数不做介绍. 官网地址:CRF++: Yet Another CRF toolkit 主要完成如下功能: 输入 -> &qu ...

  8. 十一.spring-boot 添加http自动转向https

    SSL是为网络通信提供安全以及保证数据完整性的的一种安全协议,SSL在网络传输层对网络连接进行加密. 例:cas 的单点登陆就用到了SSL 一.安全证书的生成 1.可以使用jdk自带的证书生成工具,j ...

  9. [转]create a basic sql server 2005 trigger to send email alerts

    本文转自:http://blog.netnerds.net/2008/02/create-a-basic-sql-server-2005-trigger-to-send-e-mail-alerts/ ...

  10. [Tools] Add a Dynamic Tweet Button to a Webpage

    To let people easily share the patio11bot, we'll add a "Tweet" button to the page. You can ...