精华内容
下载资源
问答
  • 在WINCE6上实现的手机滑动解锁效果,GUI基于3DGUI界面库,3D基于嵌入式 的OPENGLES,3D加速采用软件模拟
  • 首先,不得不说苹果手机无论硬件还是软件的设计都做到了极致,然后模仿者趋之若鹜,作为统治智能手机市场半壁江山的Android系统,自然也不例外。  目前来说,小米定制的MIUI里面开关就是模拟的这种(左图),但是...

           首先,不得不说苹果手机无论硬件还是软件的设计都做到了极致,然后模仿者趋之若鹜,作为统治智能手机市场半壁江山的Android系统,自然也不例外。

           目前来说,小米定制的MIUI里面开关就是模拟的这种(左图),但是笔者个人感觉体验一般,没有做到完美。真正做得好的是QQ浏览器(右图)

             
                 

            所以今天,我们来尝试写一个类似的Android控件。

            说到Android自定义控件,无非是三种:独立控件、复合控件、定制化控件。

            独立控件:直接继承自View或者ViewGroup,然后自己定制measure、layout、draw,一般情况难度较大,比如Android自带的TextView、ImageView等。

            复合控件:继承自已实现的布局控件,通过多个视图组合后添加控制逻辑而成的控件,比如知名的下拉刷新开源库PullToRefresh等。

                定制化控件:直接继承已实现的控件,复写某些方法做一些特殊化定制,这种比较常见,也最简单,不多赘述。

                好,我们先来分析下用哪种方式来实现呢?

           分析下将要实现控件的交互特性:
           1、控件外观的背景由两个半圆+一个矩形构成,中间有一个白色圆球来回滚动。
           2、点击时,白色圆球移动至另一侧,能看到一段移动的动画,同时背景底色渐变。
           3、控件表面手指快速滑动时(Fling手势),白色圆球移动,效果同2。
           4、手指按住白色圆球,在控件上来回滑动,圆球跟着手指移动,但不会超出控件边界,同时背景底色渐变。如果手指松开,白色圆球自动移动至最近的一侧,同样能看到移动动画和背景底色渐变。

           我们先来试想一下用独立控件来设计这种功能。首先需要重写onMeasure方法,固定控件尺寸;其次需要在onDraw里面画两边是半圆中间矩形的背景区域,和中间移动的白色小球,难度不大;接下来写交互,由于手势比较复杂,涉及到点击、快速滑动,缓慢滑动等复杂手势,View自身的touchEvent很难去处理,这时就需要借助GestureDetector手势类去处理,难度也还行;最后白色小球移动的动画效果只能借助invalidate去刷新draw,这时头就真正大了!
          
           然后,关于定制化控件,这个不需要想就能放弃,因为SDK就没有类似的控件能让我们直接修改。
           
           最后,我们来分析下复合控件。控件两头半圆中间矩形的样式,通过一个Layout设置圆角shape背景图就能搞定,中间的小球,直接用一个View设置成圆形白色背景。关于手势,同样是用GestureDetector处理。最后难点的动画效果,可以用ObjectAnimator属性动画控制View搞定。这个方案看起来相当靠谱,那我们就不妨来实现一下。

          控件可继承自LinnearLayout、FrameLayout或者RelativeLayout等基本布局控件,都可行,这里笔者采用的是LinnearLayout,控件命名成SwitcherView,就是开关控件的意思,接下来我们来看一下具体代码:

    package com.example.test;
    
    import android.animation.ObjectAnimator;
    import android.animation.ValueAnimator;
    import android.animation.ValueAnimator.AnimatorUpdateListener;
    import android.content.Context;
    import android.graphics.Color;
    import android.graphics.drawable.GradientDrawable;
    import android.util.AttributeSet;
    import android.view.GestureDetector;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    import android.widget.Checkable;
    import android.widget.LinearLayout;
    
    public class SwitcherView extends LinearLayout implements Checkable, AnimatorUpdateListener{
    
    	// 开关状态对应的控件背景底色:这里开关打开用的蓝色、关闭用的灰色
    	private static final int COLOR_CHECK = 0xff479FF4;
    	private static final int COLOR_UNCHECK = 0xffDDDEDF;
    	
    	// 开关状态标识位
    	private boolean mIsChecked;
    	
    	private OnCheckedChangeListener mOnCheckedChangeListener;
    	
    	// 开关状态背景色Drawable
    	private GradientDrawable mGradientDrawable;
    	
    	// 中间白色小球
    	private View mBallView;
    	
    	// 手势交互类
    	private GestureDetector mGestureDetector;
    	
    	// 小球移动动画:属性动画
    	private ObjectAnimator mBallMoveAnimator;
    	
    	// 小球移动最大范围
    	private int mMaxBallMoveDistance;
    
    	// 是否是小球移动状态
    	private boolean mMoveState;
    	
    	private boolean mDelay;
    	
    	public SwitcherView(Context context, AttributeSet attrs, int defStyleAttr) {
    		super(context, attrs, defStyleAttr);
    		init(context);
    	}
    
    	public SwitcherView(Context context, AttributeSet attrs) {
    		this(context, attrs, 0);
    	}
    
    	public SwitcherView(Context context) {
    		this(context, null);
    	}
    
    	private void init(Context context){
    		
    		// 初始化底色背景
    		mGradientDrawable = (GradientDrawable) context.getResources().getDrawable(R.drawable.bg_switcher);
    		mGradientDrawable.setColor(COLOR_UNCHECK);
    		setBackground(mGradientDrawable);
    		
    		// 手势类初始化
    		mGestureDetector = new GestureDetector(getContext(), new CheckOnGestureListener());
    		
    		// 由于findViewById时,视图边界未初始化,导致开关状态失效,所以需要在Layout时设置开关初始状态。
    		getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    			
    			@Override
    			public void onGlobalLayout() {
    				if(mIsChecked && mDelay){
    					mIsChecked = !mIsChecked;
    					toggle();
    				}
    				mDelay = false;
    				getViewTreeObserver().removeOnGlobalLayoutListener(this);
    			}
    		});
    	}
    	
    	@Override
    	protected void onFinishInflate() {
    		// 初始化白色小球
    		mBallView = findViewById(R.id.ball_switcher);
    		mBallMoveAnimator = ObjectAnimator.ofFloat(mBallView, "translationX", 0, 0);
    		mBallMoveAnimator.addUpdateListener(this);
    		super.onFinishInflate();
    	}
    	
    	@Override
    	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    		// 计算小球的滚动范围
    		int width = getMeasuredWidth();
    		if(mBallView != null){
    			int ballRadius = mBallView.getMeasuredWidth() / 2;
    			mMaxBallMoveDistance = width - getPaddingLeft() - getPaddingRight() - ballRadius * 2;
    		}
    		
    		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    	}
    	
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    		// 当手指触摸小球来回移动,手指松开时需要计算消失移动路径和开关状态
    		if(mMoveState && (event.getAction() == MotionEvent.ACTION_CANCEL || event.getAction() == MotionEvent.ACTION_UP)){
    			mMoveState = false;
    			float ballX = (Float)mBallMoveAnimator.getAnimatedValue();
    			// 小球移向最左,表示开关关闭
    			if(ballX < mMaxBallMoveDistance / 2){
    				// 开关是否被切换
    				if(mIsChecked){
    					toggle();
    				}else{
    					startAnimation(0, true);
    				}
    			}
    			// 小球移向最右,表示开关打开
    			if(ballX >= mMaxBallMoveDistance / 2){
    				if(!mIsChecked){
    					toggle();
    				}else{
    					startAnimation(mMaxBallMoveDistance, true);
    				}
    			}
    		}
    		
    		// 触摸手势交给手势类控制
    		return mGestureDetector.onTouchEvent(event);
    	}
    	
    	@Override
    	public void setChecked(boolean checked) {
    		if(checked == mIsChecked){
    			return;
    		}
    		toggle();
    	}
    
    	@Override
    	public boolean isChecked() {
    		return mIsChecked;
    	}
    
    	@Override
    	public void toggle() {
    		mIsChecked = !mIsChecked;
    		
    		if(mMaxBallMoveDistance <= 0){
    			mDelay = true;
    			return;
    		}
    		
    		// 启动开关切换时 小球移动动画
    		startAnimation(mIsChecked ? mMaxBallMoveDistance: 0, true);
    		
    		// 回调状态
    		if(mOnCheckedChangeListener != null){
    			mOnCheckedChangeListener.onCheckedChanged(mIsChecked);
    		}
    	}
    
    	public void startAnimation(float finalX, boolean force){
    		if(mBallMoveAnimator.isRunning()){
    			if(force){
    				mBallMoveAnimator.cancel();
    			}else{
    				return;
    			}
    		}
    		
    		float startX = (Float)mBallMoveAnimator.getAnimatedValue();
    		
    		mBallMoveAnimator.setFloatValues(startX, finalX);
    		
    		float distance = Math.abs(startX- finalX);
    		
    		// 小球移动动画持续时间需要计算,这里是移动1px需要5ms
    		mBallMoveAnimator.setDuration((int)(distance * 5));
    		mBallMoveAnimator.start();
    	}
    	
    
    	@Override
    	public void onAnimationUpdate(ValueAnimator animation) {
    		// 小球移动式,空间背景底色需要变化,在这里计算RGB
    		int delaRed = Color.red(COLOR_UNCHECK) - Color.red(COLOR_CHECK);
    		int delaGreen = Color.green(COLOR_UNCHECK) - Color.green(COLOR_CHECK);
    		int delaBlue = Color.blue(COLOR_UNCHECK) - Color.blue(COLOR_CHECK);
    		float rate = (Float)mBallMoveAnimator.getAnimatedValue() / mMaxBallMoveDistance;
    		
    		int newColor = Color.rgb(Color.red(COLOR_UNCHECK) - (int)(delaRed * rate), 
    				Color.green(COLOR_UNCHECK) - (int)(delaGreen * rate), 
    				Color.blue(COLOR_UNCHECK) - (int)(delaBlue * rate));
    		mGradientDrawable.setColor(newColor);
    	}
    	
    	/**
         * Register a callback to be invoked when the checked state of this button
         * changes.
         *
         * @param listener the callback to call on checked state change
         */
        public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
            mOnCheckedChangeListener = listener;
        }
        
        /**
         * Interface definition for a callback to be invoked when the checked state
         * of a compound button changed.
         */
        public static interface OnCheckedChangeListener {
            /**
             * Called when the checked state of a compound button has changed.
             *
             * @param isChecked  The new checked state of buttonView.
             */
            void onCheckedChanged(boolean isChecked);
        }
    
        private class CheckOnGestureListener extends SimpleOnGestureListener{
        	
        	@Override
        	public boolean onDown(MotionEvent e) {
        		return true;
        	}
        	
        	@Override
        	public boolean onSingleTapUp(MotionEvent e) {
        		// 点击控件切换开关
        		toggle();
        		return super.onSingleTapUp(e);
        	}
        	
        	@Override
        	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        		// 手指拉着小球移动
        		float finalX = (Float) mBallMoveAnimator.getAnimatedValue() - distanceX * 2;
        		if(finalX < 0){
        			finalX = 0;
        		}
        		if(finalX > mMaxBallMoveDistance){
        			finalX = mMaxBallMoveDistance;
        		}
        		if(finalX != (Float) mBallMoveAnimator.getAnimatedValue()){
        			startAnimation(finalX, false);
        			mMoveState = true;
        		}
        		return super.onScroll(e1, e2, distanceX, distanceY);
        	}
        	
        	@Override
        	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        			float velocityY) {
        		// 快速滑动切换开关
        		if(velocityX < 0 && mIsChecked){
        			toggle();
        		}
        		if(velocityX > 0 && !mIsChecked){
        			toggle();
        		}
        		return super.onFling(e1, e2, velocityX, velocityY);
        	}
        }
    }
    


    另外,依赖于两个drawable文件,一并奉上:
    1、 bg_switcher.xml  控件背景
    </pre>     <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    
        <corners android:radius="25dip" />
    
    </shape>

    2、 ball_switcher.xml  白色小圆球背景
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval" >
    
        <solid android:color="@android:color/white"/>
    </shape>


    关于控件使用,需要定义一个layout:
    switcher_layout.xml
    <?xml version="1.0" encoding="utf-8"?>
    <com.example.test.SwitcherView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="50dip"
        android:layout_height="25dip"
        android:gravity="center_vertical"
        android:paddingLeft="1dip"
        android:paddingRight="1dip" >
    
        <View
            android:id="@+id/ball_switcher"
            android:layout_width="23dip"
            android:layout_height="23dip"
            android:background="@drawable/ball_switcher" />
    
    </com.example.test.SwitcherView>

    直接在layout布局文件里面include就可以啦
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.test.MainActivity" >
    
        <include
            android:id="@+id/switcher"
            android:layout_width="50dip"
            android:layout_height="25dip"
            layout="@layout/switcher_layout" />
    
    </RelativeLayout>

    我们来看看效果图吧


    总结:控件的基本特性和功能以及实现完成,但是评价一个控件写得好不好,光是完成功能还是远远不够的。
                  还应该考虑到扩展性和使用性。
                  比如说开关底色需要用橙色或者红色怎么办?现在代码里写死蓝色的,扩展性明显不好。
                  再者,一个控件需要依赖多个xml文件,使用起来相当繁琐,很难做成公共控件多个项目使用。
                  当然啦,笔者这里就简单实现下核心功能,代码的封装就由各位开发者自己去完善啦!

    展开全文
  • 一款Android手机实时投屏软件,此应用...默认自带了针对和平精英手游和抖音进行键鼠映射的映射脚本,开启平精英手游后可以用键鼠像玩端游一样玩和平精英手游,开启抖音映射以后可以使用上下左右方向键模拟上下左右滑动
  • SlideUnlock(滑动解锁)是一款功能强大的手机加解锁和桌面快捷增强软件,具有炫彩百变的操作界面和强大的软件主题DIY扩展功能。加解锁方面提供丰富的加解锁方式,包括按键、触屏、距离感应器和重力感应器的辅助加解锁...
  • 支持快速的点击,滑动,读取和设置剪切板(支持中文),模拟输入,查找控件并单击等类似操作,支持可视化布局分析。大小不到3Mib,默认运行端口9999 。 基于无障碍的功能 坐标点击 坐标滑动 根据控件id的点击(如果...
  • 按键精灵手机助手是一款由按键精灵专门针对手机脚本开发的模拟鼠标键盘动作的软件软件可以实现电脑与手机互联,并在电脑上实现实时截图、取色、取坐标并编写脚本的功能。不仅如此,生成的脚本还能在手机端独立运行...
  • 按键精灵手机助手是一款由按键精灵专门针对手机脚本开发的模拟鼠标键盘动作的软件软件可以实现电脑与手机互联,并在电脑上实现实时截图、取色、取坐标并编写脚本的功能。不仅如此,生成的脚本还能在手机端独立运行...
  • 软件是一款运行在以Android 1.6以上操作系统的智能手机(包括Ophone和乐风)或者平板电脑上面的手机桌面插件,模拟了windows7的界面风格和操作习惯,完美支持包括QVGA、WQVGA、VGA、WVGA、HVGA等各种尺寸的屏幕。...
  • 一款可以模拟手机点击和滑动的简单编写脚本和运行脚本工具,开发之初主要目的是用于手机自动化测试使用,主要编写脚本的命令都在右击菜单栏里。压缩包里有使用说明文档,请自行查看。第一次使用将自动修改环境变量,...
  • 软件是一款运行在以Android 1.6以上操作系统的智能手机(包括Ophone和乐风)或者平板电脑上面的手机桌面插件,模拟了windows7的界面风格和操作习惯,完美支持包括QVGA、WQVGA、VGA、WVGA、HVGA等各种尺寸的屏幕。...
  • QtScrcpy QtScrcpy通过USB(或通过TCP / IP)连接到Android设备以进行显示和控制。... 或者您可以使用向上/向下/向左/向右方向键来模拟向上/向下/向左/向右滑动。 您还可以根据为其他游戏编写自己的映射
  • 或者您可以使用向上/向下/向左/向右方向键来模拟向上/向下/向左/向右滑动。 您还可以根据为其他游戏编写自己的映射文件。 默认的键映射如下: 这是添加新的自定义映射文件的说明。 编写自定义脚本并将其放在keymap...
  • 手机抖音设置自动切换下一个视频

    万次阅读 2019-01-16 11:35:04
    1.软件安装 链接:https://pan.baidu.com/s/1Z6UciLvLX4LswHRvr3BLhw  提取码:jcw4  2.新建或导入脚本文件 滑动脚本代码: "auto"; setInterval(function(){   /**  * 同时模拟三个手势:  * 从...

    1.软件安装

    链接:https://pan.baidu.com/s/1Z6UciLvLX4LswHRvr3BLhw 
    提取码:jcw4 
    2.新建或导入脚本文件

    滑动脚本代码:

    "auto";
    setInterval(function(){
       

    /**
     * 同时模拟三个手势:
     * 从(300, 400)到(300, 1400)
     * 从(600, 400)到(600, 1400)
     * 从(900, 400)到(900, 1400)
     * 每一个的时长都为350毫秒
     */

    gestures([350, [300, 1400], [300, 400]],
             [350, [600, 1400], [600, 400]],
             [350, [900, 1400], [900, 400]]
    );

    },15*1000);

     

    最后一行的15为间隔时间15秒,可自行修改。

    悬浮窗代码

    var path = "/storage/emulated/0/脚本/douyin.js";
    if(!files.exists(path)){
        toast("脚本文件不存在: " + path);
        exit();
    }
    var window = floaty.window(
        <frame>
            <button id="action" text="开始运行" w="90" h="40" bg="#77ffffff"/>
        </frame>
    );

    setInterval(()=>{}, 1000);

    var execution = null;

    //记录按键被按下时的触摸坐标
    var x = 0, y = 0;
    //记录按键被按下时的悬浮窗位置
    var windowX, windowY;
    //记录按键被按下的时间以便判断长按等动作
    var downTime;

    window.action.setOnTouchListener(function(view, event){
        switch(event.getAction()){
            case event.ACTION_DOWN:
                x = event.getRawX();
                y = event.getRawY();
                windowX = window.getX();
                windowY = window.getY();
                downTime = new Date().getTime();
                return true;
            case event.ACTION_MOVE:
                //移动手指时调整悬浮窗位置
                window.setPosition(windowX + (event.getRawX() - x),
                    windowY + (event.getRawY() - y));
                //如果按下的时间超过1.5秒判断为长按,退出脚本
                if(new Date().getTime() - downTime > 1500){
                    exit();
                }
                return true;
            case event.ACTION_UP:
                //手指弹起时如果偏移很小则判断为点击
                if(Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5){
                    onClick();
                }
                return true;
        }
        return true;
    });

    function onClick(){
        if(window.action.getText() == '开始运行'){
            execution = engines.execScriptFile(path);
            window.action.setText('停止运行');
        }else{
            if(execution){
                execution.getEngine().forceStop();
            }
            window.action.setText('开始运行');
        }
    }

     

    第一行为滑动脚本的路径,可以先运行一遍。然后在管理日志里查看。

    3.开放权限,系统会提示不安全,不要管,没有事。

    将软件在后锁定,不要被清理掉。

    4.运行悬浮窗脚本,打开抖音,点击开始运行,就OK了。

    长按悬浮窗关闭。

    展开全文
  • 一、Monkey简介Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性...

    编辑推荐:

    本文来自于网络,介绍了自动化测试工具Monkey使用过程,Monkey命令参数说明,注意事项等知识。

    一、Monkey简介

    Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。它的原理是向系统发送伪随机的用户事件流(如按键输入、触摸输入、手势输入等),实现对正在开发的应用程序进行压力测试。至于Monkey的名字是有何而来的呢?这个没有去怎么考究,Monkey这个工具就是一个调皮的猴子,在App中乱按、乱摸、乱滚、乱跳。

    二、使用过程

    1.安装你要测试的apk(秽话...)

    2.在电脑上运行cmd,找到Android SDK的playform-tools目录,并输入命令

    adb shell monkey -p com.xxx... -v 10000 >D:\monkeylog.txt

    3.回车执行,手机进入monkey测试,测试结束后log日志在对应设置的路径位置(PC)

    三、Monkey命令参数说明

    通过上文我们已经了解到,通过adb命令开始执行monkey测试,monkey命令的基本格式为:

    adb shell monkey –p com.xxx –v 10000 这条命令中,-p代表一个包,即我们monkey测试的对象,一条命令可以有多个包,每添加一个包则需要一个-p,如

    adb shell monkey –p 包1 –p 包2…..com.xxx 就是我们需要执行测试的对象-v

    代表返回结果的详尽程度,分为3级,分别是level 1 level 2 level 3,级别越高,返回的log会更详尽,1级为-v

    ,2级为-v –v,3级为 –v –v –v .更为详细格式:

    adb shell monkey -p com.xxx...--ignore-crashes --ignore-timeouts

    --throttle 500 -v -s 3500 10000 > D:\monkeylog.txt

    --ignore-crashes代表当应用程序崩溃时,如果执行次数不到将继续执行,默认不设置应用崩溃Monkey会停止

    --throttle 500 代表间隔时间,即每次操作的时间间隔。为了更好的模拟用户操作,需要在每次操作之间增加时间间隔,单位是毫秒,此命令的含义就是增加500ms的时间间隔。

    -s 3500 代表伪随机数 10000 代表执行次数,根据实际测试需要来修改。

    通过参数的设置,可以完成更多的调试功能,Monkey命令行参数中文相关说明见下表。官方英文版

    553811982c4a84a35efa10d71599fafb.png

    四、注意事项

    如果提示error: unknown host service说明adb的5037端口被哪个应用程序占用的被占用

    解决办法:运行cmd输入命令netstat -ano | findstr "5037",查看到对应的进程的PID是12216

    8e843784bdf1b02d8bb751634d21f6f8.png

    Ctrl+alt+delete,打开任务管理器,查看是哪个进程占用了12216

    81a492dcc5787bafe0e56f21309764d6.png

    这里是LdsMobileLink.exe(鲁大师手机助手)占用了此进程,需要将该进程结束

    fb6f89209adacbd83eb057bec51deaf8.png

    如果无法结束进程,那么我们可以修改adb的端口号

    1.打开我的电脑右键属性-高级系统设置-环境变量-系统变量-新建

    2.变量名:ANDROID_ADB_SERVER_PORT 变量值:6666(你要的端口号这里为6666)

    3.打开cmd输入命令netstat -ano |findstr "6666",没有返回任何结果证明该端口号没有被占用,如果有请重新设置变量值

    4.在Android SDK的playform-tools目录,并输入命令adb kill-server,回车,再输入命令adb

    start-server,回车。

    c8a45343ae3431bd86591a9d6ce27293.png

    红色位置说明重启adb成功并且端口号为6666,若端口号不正确,请重新打开cmd,还是不对那就是环境变量设置有误。如果想设置为默认端口号只需要将添加的环境变量删除

    366608516a4c3766ba7105ae45304a00.png

    展开全文
  • 软件纯绿色,支持各种软件查杀,软件太大是因为python编译后最小的一个都8M, ...AppwerMirror可以控制手机的时候就可以打开软件即可 刷宝下载地址:点击【t.cn/EJOOVo4】下载【刷宝APP】看视频赚零花钱一元可...

    本软件纯绿色,支持各种软件查杀,软件太大是因为python编译后最小的一个都8M,

    使用方法下载AppwerMirror和手机一起搭配使用!
    官方地址:https://software.airmore.cn/apowermirror

    AppwerMirror可以控制手机的时候
    就可以打开软件即可

     

    刷宝下载地址:点击【t.cn/EJOOVo4】
    下载【刷宝APP】
    看视频赚零花钱
    一元可立即提现到微信
    填我邀请码【4PCUM2】
    复制信息打开刷宝APP自动填邀请码立即赚钱!

    刷宝官网:https://www.shuabaola.cn

    注册了刷宝后麻烦亲们,在右下角的《我的》填我的邀请码:【4PCUM2】,就当我支持了哈!谢谢!
    每天可以刷到2W金币,大约2元钱左右,手机电脑放半个多小时多差不多就可以了!

    提示:停止后不要立即点开始,大约等待15秒左右后即可点开始
    QQ496631085,有疑问和意见,或者有其他需求的可联系我

     

    缺点有点,还不是很完美,用没问题,有编译成EXE的,百度网盘链接点我

    百度网盘:链接: https://pan.baidu.com/s/1qIZMSCRiEBSG5SCFr8Y4LA 提取码: xn6j 

     

    下面是开源的代码,可以自行编译

     1 #-*- coding: utf-8 -*-  ##设置编码方式
     2 #QQ496631085 第一次没安装pywin32模块的,请自行下载 然后命令(pip instll 文件名)回车 安装哦
     3 start_b = True #是否开始刷屏
     4 text_button = '开始刷视频' 
     5 
     6 import threading
     7 import win32gui, win32api, win32con,time,random
     8 import tkinter
     9 # import tkMessageBox
    10 
    11 
    12 
    13 def mouse_move(x,y,new_x, new_y,time_run):    #移动鼠标
    14     win32api.SetCursorPos([x,y])    #为鼠标焦点设定一个位置
    15     time.sleep(0.1)
    16     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0,0,0,0)    # 鼠标左键按下
    17     for yy in range(y,new_y,-5):
    18         win32api.SetCursorPos([x,yy])    #为鼠标焦点设定一个位置
    19         time.sleep(0.005)
    20     time.sleep(time_run)
    21     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
    22     time.sleep(time_run)
    23 
    24 def suiji_num(): #随机点击位置
    25     y=random.randint(460,570)
    26     x=random.randint(200,280)
    27     new_x=random.randint(220,330)
    28     new_y=random.randint(100,230)
    29     return x,y,new_x,new_y
    30 
    31 def show_top(hwnd): #把窗口显示到左上角,准备点击
    32     win32gui.MoveWindow(hwnd,0,0,480,855,True)#改变窗口大小
    33     win32gui.SetForegroundWindow(hwnd)#指定句柄设置为前台,也就是激活
    34     time.sleep(0.1)
    35 
    36 def kaiguan():
    37     global start_b,text_button
    38     t= threading.Thread(target = shua)
    39     if B['text']=='停止':
    40         B['text']='开始'
    41         start_b = False
    42         print('stop')      
    43     else:
    44         B['text']='停止'
    45         start_b = True
    46         print('start')
    47         t.start()
    48 
    49 def shua():
    50     global start_b52         windowtitle = 'ApowerMirror' #窗口名
    53         hwnd = win32gui.FindWindow(None, windowtitle)
    54         if hwnd>0:
    55             print('找到%s'%windowtitle)
    56             while start_b:
    57                 temp=random.randint(1,3)/10
    58                 huadong=random.randint(10,15)
    59                 x,y,new_x,new_y = suiji_num()#取随机点击地方
    60                 show_top(hwnd)
    61                 mouse_move(x,y,new_x,new_y,temp)
    62                 print(huadong)
    63 
    64                 time.sleep(huadong)
    65                 if huadong>13 and start_b:#点赞
    66                     show_top(hwnd)
    67                     win32api.SetCursorPos([419,419])
    68                     time.sleep(0.2)
    69                     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0,0,0,0)    # 鼠标左键按下
    70                     time.sleep(0.1)
    71                     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
    72                     time.sleep(random.randint(1,3))#点赞后延时一下
    73         else:
    74             win32api.MessageBox(win32con.NULL, '没有打开ApowerMirror哦', '提示:', win32con.MB_OK)  
    75         
    76 top = tkinter.Tk()
    77 top.title("刷宝辅组QQ:496631085")
    78 top.geometry("330x100")
    79 B = tkinter.Button(top,text='点击开始',font=('KaiTi',36,'bold'),bg='gray',fg='red',bd=2,width=10,command=kaiguan)
    80 B.pack()
    81 top.mainloop()

    下面在保存一个没有行号的:

    #-*- coding: utf-8 -*-  ##设置编码方式
    #QQ496631085 第一次没安装pywin32模块的,请自行下载 然后命令(pip instll 文件名)回车 安装哦
    start_b = True #是否开始刷屏
    text_button = '开始刷视频' 
    
    import threading
    import win32gui, win32api, win32con,time,random
    import tkinter
    # import tkMessageBox
    
    
    
    def mouse_move(x,y,new_x, new_y,time_run):    #移动鼠标
        win32api.SetCursorPos([x,y])    #为鼠标焦点设定一个位置
        time.sleep(0.1)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0,0,0,0)    # 鼠标左键按下
        for yy in range(y,new_y,-5):
            win32api.SetCursorPos([x,yy])    #为鼠标焦点设定一个位置
            time.sleep(0.005)
        time.sleep(time_run)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
        time.sleep(time_run)
    
    def suiji_num(): #随机点击位置
        y=random.randint(460,570)
        x=random.randint(200,280)
        new_x=random.randint(220,330)
        new_y=random.randint(100,230)
        return x,y,new_x,new_y
    
    def show_top(hwnd): #把窗口显示到左上角,准备点击
        win32gui.MoveWindow(hwnd,0,0,480,855,True)#改变窗口大小
        win32gui.SetForegroundWindow(hwnd)#指定句柄设置为前台,也就是激活
        time.sleep(0.1)
    
    def kaiguan():
        global start_b,text_button
        t= threading.Thread(target = shua)
        if B['text']=='停止':
            B['text']='开始'
            start_b = False
            print('stop')      
        else:
            B['text']='停止'
            start_b = True
            print('start')
            t.start()
    
    def shua():
        global start_b
        
            windowtitle = 'ApowerMirror' #窗口名
            hwnd = win32gui.FindWindow(None, windowtitle)
            if hwnd>0:
                print('找到%s'%windowtitle)
                while start_b:
                    temp=random.randint(1,3)/10
                    huadong=random.randint(10,15)
                    x,y,new_x,new_y = suiji_num()#取随机点击地方
                    show_top(hwnd)
                    mouse_move(x,y,new_x,new_y,temp)
                    print(huadong)
    
                    time.sleep(huadong)
                    if huadong>13 and start_b:#点赞
                        show_top(hwnd)
                        win32api.SetCursorPos([419,419])
                        time.sleep(0.2)
                        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0,0,0,0)    # 鼠标左键按下
                        time.sleep(0.1)
                        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
                        time.sleep(random.randint(1,3))#点赞后延时一下
            else:
                win32api.MessageBox(win32con.NULL, '没有打开ApowerMirror哦', '提示:', win32con.MB_OK)  
            
    top = tkinter.Tk()
    top.title("刷宝辅组QQ:496631085")
    top.geometry("330x100")
    B = tkinter.Button(top,text='点击开始',font=('KaiTi',36,'bold'),bg='gray',fg='red',bd=2,width=10,command=kaiguan)
    B.pack()
    top.mainloop()

     

    转载于:https://www.cnblogs.com/xiaohe520/articles/10975659.html

    展开全文
  • 鼠标模拟手指的滑动和点击,键盘高效模拟手机打字输入 手机屏幕录像 玩手机、手游的同时直接录制视频到电脑 同时控制多台手机 电脑同时控制多台手机,操作主控手机,其他手机联动 小萝贝控机大师软件特色 手机...
  • 微信营销系统,就是在微信上能够营销推广的各种软件系统的统称。在这里我们主要介绍的是微信自动加人的营销。微信自动加人营销系统主要是...我们用它来实现跨应用的模拟点击,模拟输入,模拟滑动等等操作。 其中微...
  • 目前有很多的用户都是在使用各种各样的安卓模拟器在电脑上面进行体验手机上面的玩法,软件支持天天,逍遥,海马玩模拟器,如果是玩手机游戏都是需要一些脚本的,人工或者是在网上有很多的问题,可以直接的使用果核...
  • 说白了就是这个软件可以调用android的无障碍服务,最终实现在不需要root的情况下模拟人手和手机的交互(比如滑动,点击),够强大吧?!由于软件是开源的,因此安全性是有保证的,使用起来大可以放心。 那auto.j...
  • AppSync for iOSx(可安装破解软件)、afc2add补丁(可访问整个iOS设备的系统文件)、openssh(可打开ssh服务)、open(可执行open 启动app的命令)、Activator(实现手势)、SimulateTouch(模拟点击滑动)、...
  • 很实用的rpa软件,对个人免费,学习成本不...用户通过可视化的流程图设计,就可以完成控件点击,数据提取,浏览器模拟,文件保存,手机点击滑动,数据库操作等任务,让普通业务工作者也能做到快速的自动化开发及运营。
  • C#控制鼠标点击,移动,滑轮滚动

    千次阅读 2018-04-15 23:41:57
    前不久无意中发现了一款手机上的软件,看新闻就可以得金币,通过金币可以换取RMB,怀着好奇,我下载了并且点击进去查看了,通过使用,发现这款软件获取金币的方法很简单,就是点击一篇新闻,进去后,隔一段时间滑动...
  • SmartTouch:悬浮窗-源码

    2021-05-13 11:03:35
    支持长按移动,支持单击,双击,四个方向滑动的手势判定,支持呼出通知栏,模拟返回键,呼出最近任务,模拟home键,打开相机等功能。 可以改变大小,透明度,形状等。 由于作者纯为个人兴趣开发,所以不含有广告, ...
  • monkey测试指南

    2015-04-23 16:40:27
    Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。它的原理是向...
  • 前不久无意中发现了一款手机上的软件,看新闻就可以得金币,通过金币可以换取RMB,怀着好奇,我下载了并且点击进去查看了,通过使用,发现这款软件获取金币的方法很简单,就是点击一篇新闻,进去后,隔一段时间滑动...
  • Monkey工具

    2015-11-25 16:50:00
    Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。它的原理是向...
  • Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。它的原理是向...
  • Monkey使用

    2017-01-18 15:42:31
     Monkey测试是Android平台下自动化测试的一种快速有效的手段,可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。它的原理是向系统发送伪...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

手机模拟滑动软件