Python写一个Windows下的android设备截图工具

利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装。代码如下:

import wx,subprocess,os,platform

class AutyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, ‘Android Auty‘, size=(350, 300))
        self.panel = wx.Panel(self, -1)
        #Android devices combox.
        combox_list = []
        r = execute_shell("adb devices")
        for i in range(1,len(r)-1):
            combox_list.append(r[i].split("\t")[0])
        wx.StaticText(self.panel, -1, "Select devices:", (15, 15))
        self.devices_combobox = wx.ComboBox(self.panel, -1, r[1].split("\t")[0], (15, 35), wx.DefaultSize, combox_list, wx.CB_DROPDOWN)
        #Capture button.
        self.capture_button = wx.Button(self.panel, -1, "capture", pos=(188, 35), size=(66,25))
        self.reload_button = wx.Button(self.panel, -1, "reload", pos=(258, 35), size=(66,25))
        self.Bind(wx.EVT_BUTTON, self.captureClick, self.capture_button)
        self.Bind(wx.EVT_BUTTON, self.reloadClick, self.reload_button)
        self.capture_button.SetDefault()
        self.reload_button.SetDefault()
    def captureClick(self, event):
        capture_android(self.devices_combobox.GetValue())
        if("Windows" in platform.platform()):
            os.startfile("d:\\screenshot.png")
    def reloadClick(self, event):
        self.devices_combobox.Clear()
        k = execute_shell("adb devices")
        for i in range(1,len(k)-1):
            self.devices_combobox.Append(k[i].split("\t")[0])
        self.devices_combobox.SetValue(k[1].split("\t")[0])

def execute_shell(shell):
    p = subprocess.Popen(shell,shell=True,stdout=subprocess.PIPE)
    out = p.stdout.readlines()
    return out

def capture_android(device_id):
    sh1 = "adb -s "+device_id+" shell /system/bin/screencap -p /sdcard/screenshot.png"
    sh2 = "adb -s "+device_id+" pull /sdcard/screenshot.png d:/screenshot.png"
    execute_shell(sh1)
    execute_shell(sh2)

if __name__ == ‘__main__‘:
    app = wx.PySimpleApp()
    AutyFrame().Show()
    app.MainLoop()

运行截图:

优点:

1. 比uiautomatorviewer运行速度快,比monitor更快;

2. 可以针对多个设备,选择性进行截屏;

3. 截屏以后截图(保存在D盘根目录下“screenshot.png”文件)会自动打开;

4. 插拔设备后可以reload重新加载设备列表。

时间: 2024-11-08 19:18:20

Python写一个Windows下的android设备截图工具的相关文章

介绍一个windows下用的ftp小工具Xftp 5

官方下载地址:http://www.netsarang.com/download/down_xfp5 选择自用学习 下载安装按照默认就好,官方版本有中文版本的 默认安装即可 接下来是打开Xftp5新建会话 协议必须选sftp 端口默认22即可.主机填远端的IP地址(虚拟机的话也是一样填IP地址),用户名和密码也要填写 然后确定连接即可 以下是连接后的界面,简单明了 给虚拟机上传一些小文件和rpm还是挺方便的

Cocos2d-x 3.1.1 在Windows下搭建Android开发环境

Cocos2d-x 3.1.1 在Windows下搭建Android开发环境 本篇博客来给大家介绍如何在Windows下搭建Cocos2d-x Android开发环境,笔者前面写了几篇博客都是针对如何对Android项目进行交叉编译的,对应了Cocos2d-x 2.2.3版本和Cocos2d-x 3.0版本,其实3.0版本跟3.1.1是一样的,只是笔者介绍如何不适用命令行对Cocos2d-x Android项目进行交叉编译,而直接在Eclipse进行交叉编译. 前面几篇博客,如果有需要比较差别的

C++开发安卓、windows下搭建Android NDK开发环境

1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个工具,我们可以把用C/C++代码编译成可以直接运行在Android平台上的本地代码,这些本地代码以动态链接库( *.so )的形式存在,也正因为这样,我们可以通过复用这些动态链接库从而复用本地代码. 那么,通过NDK这个开发工具包,那么我们是否可以将一个APK完全使用C/C++来编写呢? 答案是不可

从零开始写一个arm下的裸板程序

从零开始写一个arm下的裸板程序.我们整个程序是基于uboot运行的. 所有我们可以借助uboot中的printf来输出,默认开发版的标准输出是串口. 电脑的默认标准输出的屏幕. 1.需要创建的文件由include文件夹,用来存放头文件. 2.创建一个hw.h头文件. 3.编写一个common.h,它定义了借用uboot的printf的宏.和NULL这个宏的定义. 4.hw.c 硬件相关的文件. 5.main.c c文件. 6.start.s 汇编文件. 7.ld.lds 链接脚本, 8.Mak

十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想,比如,当一个usb插入时,在后台自动把usb里的重要文件神不知鬼不觉地拷贝到本地或者上传到某个服务器,就需要特殊的软件辅助. 于是我心想,能不能用python写一个程序,让它在后台运行.每当有u盘插入的时候,就自动拷贝其中重要文件. 如何判断U盘的插入与否? 首先我们打开电脑终端,进入/Volume

写一个Windows上的守护进程(5)文件系统重定向

写一个Windows上的守护进程(5)文件系统重定向 在Windows上经常操作文件或注册表的同学可能知道,有“文件系统/注册表重定向”这么一回事.大致来说就是32位程序在64位的Windows上运行时,操作系统会把对System32文件夹的访问重定向到SysWow64下,把对HKEY_LOCAL_MACHINE\SOFTWARE的访问重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下.当然不止这些路径和注册表.详情请查看MSDN:https://msdn.

一个windows下的ddos样本

一个windows下的ddos样本. 加载器 程序运行之后会在临时目录释放出一个256_res.tmp的文件 之后将该文件移动至system32目录下,以rasmedia.dll命名. 删除原文件. 加载开始释放的dll文件,并调用该dll导出的install函数. Rasmedia.dll 函数install会将将该dll注册成一个服务WinHelp32. 具体如下 服务运行之后会有两个线程开启. 一个线程用于和远端服务器进行通信. 一个线程会将自身拷贝到内存中,当发现映像文件被删除,会将自己

写一个Windows上的守护进程(4)日志其余

写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流输入不好控制格式. printf形式要求日志接口支持不定长参数,我没有直接在日志实现类里边支持不定长参数,而是只接受一个字符串参数,可以参见第一篇. 为什么呢? 如果要成为不定长参数,就是这样 bool log_string(const LOG_LEVEL level, const char* fi

写一个Windows上的守护进程(6)Windows服务

写一个Windows上的守护进程(6)Windows服务 守护进程因为要开机启动,还要高权限,所以我就把它做成Windows服务了. 关于Windows服务的官方文档,大家可以看https://msdn.microsoft.com/en-us/library/windows/desktop/ms686953(v=vs.85).aspx. 总的来说,服务的行为区别于普通应用程序的地方有以下几点: 1. 一般来说,服务是运行于System用户下的,当然也可以自己指定.也就是说服务可以在无用户登录的情