按键精灵等待指定按键6 有N个窗口(可以指定为记事本窗口),第一个窗口移动到(0,0)点

Python&按键精灵自动化
最近在项目中需要进行软件的自动化操作。
本博文以两种方式介绍如何自动化打开软件(Windows下),对其进行最大化最小化关闭等操作。
Python操作:
第一次接触自动化。相对比较熟悉Python自然是希望通过Python来操作软件。一般来说,通过程序来操作软件需要获得该软件的句柄,然后通过该句柄给软件发消息来操作该软件。Python中你需要安装Pywin32模块,该模块提供了访问Windows API的扩展,利用该模块你可以很方便的进行相关软件的操作。
这里先介绍一篇博文,,这篇博文介绍了pywin32模块,同时,介绍了很多有用的操作,如如何获取菜单句柄,下拉栏句柄,如何发送消息等。有更多的需要可以学习这篇博文,我这里只介绍如何通过pywin32打开软件,最大化,最小化,关闭等基本的操作。
首先是如何打开软件。
第一种方式,也是最简单的方式,利用os模块。比如我想打开记事本程序,可以:
def runApp():
os.system(u"C:\\Windows\\System32\\notepad.exe")
os.system(command)中的command即为要执行的命令,也可以附加运行参数。这种方式非常简单,但是它有个缺点,它是阻塞的,即程序运行到这里后要等执行的程序执行完成后才能继续向下运行(个人理解)。
第二种方式是使用win32api中的ShellExecute函数。
该函数是非阻塞的。同样是打开记事本程序,可以这样写:
def runApp():
import win32api
# 最后一个参数表示是窗口属性,0表示不显示,1表示正常显示,2表示最小化,3表示最大化
res = win32api.ShellExecute(0, 'open', 'C:\\Windows\\System32\\notepad.exe', '', '', 3)
其他方式:还有使用win32process中的CreateProcess方法和使用ctypes等方式,我这里没有用到,继续学习可以看博文:。
接着,是获取软件的句柄。
打开软件后,对于窗口程序可以获取窗口句柄。句柄的获得对于后续操作至关重要。
比如我们打开了一个名叫233.txt的记事本程序,想获得它的句柄可以这样:
def findAppHandle():
appName = u"233.txt - 记事本"
hwnd = win32gui.FindWindow(None, appName)
print hwnd
接着是通过句柄操作软件,给软件发消息:
比如想最大化软件,将软件窗口置于最前,关闭软件:
# 关闭软件
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
# 软件最大化
win32gui.PostMessage(hwnd, win32con.WM_SYSCOMMAND, win32con.SC_MAXIMIZE, 0)
# 将软件窗口置于最前
win32gui.SetForegroundWindow(hwnd)
这里面涉及到很多Windows的消息类型和参数,具体需要查阅MSDN。
按键精灵方式:
事实上,自动化软件在大部分情况下还有更方便的工具,那就是使用按键精灵。我这个项目所要自动化的软件中的很多的窗口句柄和操作很难通过程序来直接操作,于是,我又花了一点时间和同伴学了下按键精灵。
按键精灵是一款模拟鼠标键盘动作的软件。软件通过各种鼠标点定位,屏幕坐标或区域取色找色,键盘时间模拟,窗口句柄操作等等一系列强大的操作能够帮助实现各类软件自动化,游戏自动脚本等功能。而且精灵脚本可以进行编程制作,对于学过编程的人来说更容易(没学过也很简单)。
下面我提供一段代码,可以实现,精灵检测一个名叫记事本.txt的程序有没有打开,如果没有打开那么则打开F盘中的记事本.txt,并对该记事本.txt进行最大化,最小化,恢复窗口,向编辑窗口中写入一段话,关闭程序等操作。
// 搜索“记事本.txt - 记事本”,找到返回该程序句柄,否则返回空白
HwndEx = Plugin.Window.Search("记事本.txt - 记事本")
MyArray = Split(HwndEx, "|")
// 如果程序已经打开了
If UBound(MyArray)&=0 Then
// 按照窗口名查找“记事本.txt - 记事本”,并返回该程序的句柄,如果没找到,则返回0
Hwnd = Plugin.Window.Find(0, "记事本.txt - 记事本")
Delay 2000
// 获取记事本的编辑窗口句柄
HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)
Call Plugin.Window.Max(Hwnd)
Delay 2000
Call Plugin.Window.Min(Hwnd)
Delay 2000
Call Plugin.Window.Restore(Hwnd)
Delay 2000
Call Plugin.Window.SendString(HwndEx, "www.baidu.com")
Delay 2000
Call Plugin.Window.Close(Hwnd)
Delay 2000
//如果软件没有打开,那么则打开该软件
RunApp "F:\记事本.txt"
Delay 2000
Hwnd = Plugin.Window.Find(0, "记事本.txt - 记事本")
Delay 2000
HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)
Call Plugin.Window.Max(Hwnd)
Delay 2000
Call Plugin.Window.Min(Hwnd)
Delay 2000
Call Plugin.Window.Restore(Hwnd)
Delay 2000
Call Plugin.Window.SendString(HwndEx, "www.baidu.com")
Delay 2000
Call Plugin.Window.Close(Hwnd)
Delay 2000
按键精灵的脚本可以导出为exe文件,可以直接供调用和运行。
实际操作的情况往往比较复杂,在我的项目里,我用了Python脚本来模拟和管理要自动化的软件的运行环境,调用按键精灵的exe文件来实现整个软件的自动化。
自动化脚本编写实例-python
按键精灵脚本-windows桌面自动化操作
按键精灵的替代品
利用Python和win32编程范例——按需定制一个按键精灵
python学习--python实现按键精灵之windows消息机制文章整理
没有更多推荐了,你的位置:
写一个函数,可以让普通窗口(例如记事本)在屏幕内移动,碰到屏幕边缘随机反向移动
13:39:38 |
来源: 按键精灵资源站
本帖最后由
15:42 编辑
5级题目大泄密
写一个函数,可以让普通窗口(例如记事本)在屏幕内移动,碰到屏幕边缘随机反向移动(类似屏幕保护的汽泡程序),请写出呵呵~!~
有兴趣复制过去玩玩~!~
本帖隐藏的内容需要回复才可以浏览按键精灵5级题目+答案_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
按键精灵5级题目+答案
&&1、(前台)区域范围为(100,150)到(200,300)内的所有点是否均为&FFFFFF&,是则弹出对话框&没有其他颜色&,否则弹出第一个点的颜色值并退出程序. 请写出代码
2、利用多线程对多个记事本的窗口位置进行随机移动.请写出代码
3、筛选出100以内所有个位数加十位数等于10的数,例如82,8+2=10满足条件,请写出代码
4、写一个算法可以将十进制的字符串转成八进制的字符串.例如&8&-&&10&,请写出代码
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩2页未读,
定制HR最喜欢的简历
你可能喜欢求个思路【按键精灵吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:404,268贴子:
求个思路收藏
我在网上找的五级试题
可能是很多年以前的
别人的答案不够最优
想写的完美一点
免root手游脚本-红手指云手机安卓IOS通用,离线打怪不停歇!不怕断网关机,不占内存!红手指完美适配所有系统机型,低配手机也能玩主流游戏,免root手游脚本-手游托管神器.
上面的部分代码没问题
放得下的情况下十几二十个完美平铺启动了放不下怎么按比例缩放以及横纵向分别排列多少个思路是乱的
数学老师已爆炸
算出来横纵向分别放多少个就行了
按比例缩放会写
//题目:将同一标题的所有窗口在桌面进行平铺,要求不得超出屏幕宽、高界限//这里拿记事本做例子//启动6个记事本num = 6//For num
Delay 1000//
RunApp &notepad.exe&//Next//取所有记事本句柄HwndEx = Plugin.Window.Search(&记事本&)TracePrint HwndExHwnd = Split(HwndEx, &|&)//得到屏幕宽,高ScreenX = Plugin.Sys.GetScRX() ScreenY = Plugin.Sys.GetScRY() //得到记事本宽高sRect = Plugin.Window.GetWindowRect(Hwnd(0))TracePrint sRectsRectArr=split(sRect,&|&)HwndX=sRectArr(2)-sRectArr(0)HwndY = sRectArr(3) - sRectArr(1)TracePrint HwndX & HwndY//计算横纵向分别能放几个窗口Xi = Fix(ScreenX / HwndX)Yi = Fix(ScreenY / HwndY)TracePrint Xi & Yi//如果不改变窗口本身大小的情况下屏幕能放下所有窗口 则从横向开始平铺If Xi * Yi &= num Then
Call Plugin.Window.Move(Hwnd(i + j * Xi), 0 + i * HwndX, j * HwndY + 1)
TracePrint i + j * Xi
NextEnd If//如果不改变窗口大小的情况下屏幕放不下
则按窗口原比例进行缩小直到屏幕能放下
算法大佬们呢
登录百度帐号你的位置:
按键精灵怎么移动窗口呢
08:56:37 |
来源: 按键精灵资源站
下载地址请访问原帖这样子 摆窗口的命令到底是什么啊 {:5_135:}{:5_135:}{:5_135:}{:5_135:}{:5_135:}求教&&
MessageBox &望高手帮忙&
//下面这个例子会打开一个记事本,用3个线程3个记事本同时向其中模拟按键
//所谓多线程并不是同时做一件相同的事情,而是不分前后顺序执行脚本。
Dimenv Hwnd1& && && & //定义环境变量(多线程需要)
RunApp &notepad.exe&&&//启动几个记事本测试用
RunApp &notepad.exe&
RunApp &notepad.exe&
RunApp &notepad.exe&
Call Plugin.Msg.ShowScrTXT(400, 100, , &请耐心等待“记事本”打开。。。&, &0000FF&)
& & Delay 300& && && && && && && && && && && && & //等待记事本打开
& & Hwnd = Plugin.Window.Search(&无标题 - 记事本&) //搜索所有记事本窗口句柄
& & MyArray = Split(Hwnd, &|&)& && && && && && && &//分解句柄
& & If UBound(MyArray) &= 0 Then& && && && && && & //判断是否搜到句柄?
& && &&&For i = 0 To UBound(MyArray) - 1
& && && && &Call Plugin.Window.Size(HwndEx, 408, 334)
& && && && &hwndEx = Clng(MyArray(i))& && && && && && && && && && && && & //类型转换
& && && && &Call Plugin.Window.Move(hwndEx, i * 50 + 643, i * 50 + 0)&&//调整窗口位置
& && && && &Call Plugin.Window.Active(hwndEx)& && && && && && && && && &&&//激活前面
& && && && &Hwnd1 = Plugin.Window.FindEx(hwndEx, 0, &Edit&, 0)& && && && &//获取可打字的窗口句柄
& && && && &BeginThread 打字& && && && && && && && && && && && && && && & //启动线程
& && && && &Delay 100& && && && && && && && && && && && && && && && && &&&//启动线程需要点时间
& && &&&Next
& && &&&Exit Do
& & End If
Call Plugin.Msg.ShowScrTXT(400, 100, , &多个记事本中,在后台同时输入20个数字。。。&, &0000FF&)
//无限循环,不至于让脚本停止了!
& & Delay 500
Sub 打字()
& & Hwnd2=Hwnd1& && &//首先获取环境变量句柄
& & //然后开始循环或者无限循环需要执行的脚本内容
& & For i=0 to 19
& && &&&Call Plugin.Bkgnd.SendString(Hwnd2, i)
& && &&&Delay 100
& && &&&Call Plugin.Bkgnd.KeyPress(Hwnd2, 13)
& && &&&Delay 200
& & ExitScript
Sub OnScriptExit()
& & MessageBox &脚本已经停止!&
这是脚本的源码
帮我加那句命令{:5_154:}{:5_154:}{:5_154:}&&拜托了{:5_154:}&&{:5_154:}&&{:5_154:}&&{:5_154:}&&{:5_154:}&&{:5_154:}&&{:5_154:}&&{:5_154:}&&{:5_154:}&&

我要回帖

更多关于 按键精灵等待指定按键6 的文章

 

随机推荐