问题: 现在有windows2003上的一个专用软件X,要求软件开机运行,打开UI界面,界面会弹出窗口要求输入用户和密码登陆,要求能自动输入这些信息登陆进去.
1,解决开机自动运行的问题:
建了一个系统账号admin,设置为开机自动登陆(方法见注1)
然后把X程序的快捷方式放到admin的启动菜单下,这样系统启动之后会自动登陆这个账号,然后打开程序了
2,X程序自动登陆的问题:
由于X程序没有自动登录某个用户的设置,所以这个问题称为解决问题的关键:
实际上是要模拟键盘输入用户名密码,然后点"登录"按钮,这要自动完成.即为此文的关键
在linux上,可以使用shell等脚本语言对命令行的程序进行自动化控制.在windows上一般用批处理来进行自动化的操作.但是如何能够对GUI程序进行自动化控制,这方面的信息还比较少.问了几个高手之后, 转转大哥( http://coolerfeng.blog.51cto.com)给我推荐了AutoIt这个脚本工具.
它的官网是这么介绍它的:
AutoIt v3 is a freeware BASIC-like .ing language designed for automating the Windows GUI and general .ing. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages (e.g. VB. and SendKeys).
译:AutoIt是一个免费软件,是一个与BASIC类似的脚本语言,主要用于自动化windows的GUI程序和一些常规的脚本.它包括模拟敲某个键,鼠标操作,对窗口和控件的操作,达到自动化的目的,而用其他的语言或许不可能或者难办到.
看来确实是我想要的东西,对GUI程序进行直接的控制,以实现自动化的目的!!!令人兴奋的字眼~
下载安装都很简单,只是提醒一点,安装过程中有一步是要选择默认打开脚本文件时是运行还是编辑,对于系统管理员的习惯,当然是选编辑.
然后就是看帮助文档了,此处略过不谈,由于本人任务需要,所以只挑能解决问题的部分看了.下面来说说具体过程.
为了本地调试方便,我以本机上的QQ程序(我的是极速qq2008版)来模拟X程序,实现QQ的自动输入账号密码登陆.假设账号是12345,密码是abcde
打开程序的编辑器,这个编辑器非常不错,具有一般集成开发工具的大部分功能.例如函数自动补完,函数用法提示,自动缩进,代码块收缩,不同颜色代码等
我的代码如下(分号表示注释)
; 运行qq程序
Run("C:\Program Files\Tencent\QQ\FinePlus.exe")
; 沉睡sleep(毫秒),这是为了等用户登录的对话框出现
Sleep(5000)
; 等待QQ用户登录的对话框
WinWait("QQ用户登录")
; 在"密码"框中输入密码
ControlSend("QQ用户登录", "", "[CLASS:Edit; INSTANCE:12]", "abcde")
; 在"用户"框中输入qq号
ControlSetText("QQ用户登录", "", "[CLASS:Edit; INSTANCE:1]", "12345")
; 点击"登录"按钮
ControlClick("QQ用户登录", "", "[CLASS:Button; INSTANCE:11]")
完成后保存文件,默认的扩展名是au3
对于函数我当然不能一个个的解释用法,看帮助文件就行了.我只拿一个举例
ControlSend("QQ用户登录", "", "[CLASS:Edit; INSTANCE:12]", "abcde")
参数"QQ用户登录"是窗口(window)的ID
参数"[CLASS:Edit; INSTANCE:12]"是控件(control)的ID,具体到这里就是qq的那个密码输入框
参数"abcde",就是我要输入的内容
实现的功能看函数名controlsend就知道,就是向某个控件(control)发送(send)某个指令,也就实现了敲密码的效果
具体到window和control是什么意义?那就要好好看看文档了,或许还需要看一些window内幕的基础知识.
而"QQ用户登录","[CLASS:Edit; INSTANCE:12]"这样的窗口和控件信息是从哪里得到的呢?见注2
然后就可以调试运行了
点菜单上的"Tools" -- "Go"
程序就会运行,运行时,右下角的任务栏会出现一个小图标,运行结束后就消失了.如果程序出了问题卡在那了,就会图标就会一直出现,表示程序没执行完.这个时候可以点"Tools" -- "Stop excuting"来退出.
完全没问题之后就可以编译成exe文件了.点"Tools" -- "Compile",会在源码所在的目录下生成同名的.exe文件.
你双击这个exe就可以看到自动打开qq,自动输入密码用户名,自动点登陆按钮登录的效果了
而实际应用到X程序上的时候,发现了一些小问题,当然还是解决了.这里就只说解决要点,有时候你指定对某个ID的控件进行操作,或许并不会应用到相应的控件上去,这或许跟以下几个方面的因素有关:
1. 由于程序是别人开发的,或许使用了非标准的控件或者修改了这个控件响应的方法,所以对我们autoit的标准函数不起作用.
2. 当前焦点(Focus)在哪个控件上,例如我的X程序我指定某个控件的时候,输入的内容都到一个控件里面去了,这个怎么办?使用TAB键将焦点移到指定的控件上,很简单的,你打开某个窗口程序,然后按按TAB按钮,你就懂了.至于focus的问题,也是与windows的基本原理相关.
注1:(__搜自百度)
将某个账号设置为开机自动登录的方法,__对注册表做如下修改:
第1__步:__运行注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon ]__分支,然后在右侧窗口双击“DefaultUserName__”,接着输入你的登录用户名。如果没有预设的用户名称,可以在注册表编辑器的菜单栏点选“编辑→新建→字符串值(s)__→DefaultUserName__”来添加这个项目,注意要区分大小写字母。
第2__步:__同样在该分支下,在注册表编辑器的右侧窗口中双击“DefaultPassword__”,然后在空白栏内输入你的密码。假如未发现“DefaultPassword__”一项,可按上面的步骤来新建该字符串值。
第3__步:__接下来在右侧窗口中双击“AutoAdminLogon__”,将数值设置为“1__”。假如未发现“AutoAdminLogon__”,可按上面的步骤来新建。
注2:
"QQ__用户登录","[CLASS:Edit; INSTANCE:12]"__这样的窗口和控件信息是从哪里来的呢.
AutoIt__提供了一个工具"AutoIt window info",__从开始菜单里面启动它,__然后你把你的鼠标移动到你关心的窗口和控件上,__它就会实时显示它们的信息.__当你需要捕获某个控件信息的时候,__按下ctrl+alt+F,__就会将当前的信息保持住,__你就可以把它们copy__到你的代码中了.__完成后再按一次ctrl+alt+F,__就恢复到实时捕获的状态,__你就可以开始捕捉下一个控件的信息了.__下图就是我截取qq__的用户名输入框这个控件的信息
注3:
很高兴的是,__国内也有对这个程序的研究论坛了:
许久没更新博客了,有时候真的不知道该写什么,说真的也没太大的冲动写.
现在经济不景气,个人工作也碰到了稍许困难,真诚的希望2009年大家和我都顺利,幸福~
原网址: 访问
创建于: 2023-04-04 16:50:52
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论