找回密码
 加入
搜索
查看: 7273|回复: 11

[AU3基础] 如何向指定的窗口发送文字[已解决]

  [复制链接]
发表于 2011-3-27 23:47:56 | 显示全部楼层 |阅读模式
本帖最后由 annybaby 于 2011-3-29 23:54 编辑

比如说,我打开了三个记事本,都是新建的,也就是说:三个类都是一样的,标题也是一样的,它们的内容分别为:

789

7

786

如果是向"789"发的话,我会,现在我想向"7"那个发,应该怎么样呢??(注意:其它两个也包括有文本"7")

我试了好多次,都是向最后一个被激活的那一个发~~~
发表于 2011-3-28 00:30:36 | 显示全部楼层
两个办法
1.每打开一个记事本的时候先记下窗口句柄,发送文字的时候直接使用窗口句柄
2.枚举窗口句柄,然后用WinGetText、ControlGetText获取窗口文字,然后对字符串进行'=='比较
 楼主| 发表于 2011-3-28 00:34:42 | 显示全部楼层
回复 2# easefull


    额,不会用句柄发,愿闻其详~~
发表于 2011-3-28 08:28:42 | 显示全部楼层
Run('notepad.exe')
WinWaitActive("无标题",'')
$h1=WinGetHandle("[ACTIVE]")
WinActivate('Program Manager')
Run('notepad.exe')
WinWaitActive("无标题",'')
$h2=WinGetHandle("[ACTIVE]")

ControlSend($h1,'','Edit1','第一个记事本789')
ControlSend($h2,'','Edit1','第2个记事本7')
发表于 2011-3-28 13:10:43 | 显示全部楼层
WinGetHandle 获取窗口句柄hWnd
发表于 2011-3-28 15:41:57 | 显示全部楼层
回复 3# annybaby


看4楼的例子
 楼主| 发表于 2011-3-28 21:11:10 | 显示全部楼层
回复 4# pcbar

为什么我新建一个记事本,然后直接用窗口信息抓取句柄来发送却不行的啊??
只是替换  ControlSend($h1,'','Edit1','第一个记事本789')  中的$h1,比如说
我用msgbox来显示$h1的内容是0x00060634,然后替换下,改成

ControlSend(0x00060634,'','Edit1','第一个记事本789')  却没有成功??

另外,帮助文件里面没有介绍说ControlSend的第一个参数可以用句柄啊,你们是怎么知道的??
发表于 2011-3-28 21:40:44 | 显示全部楼层
回复 7# annybaby

因为0x00060634是数字,不是指针.试试
ControlSend(Ptr(0x00060634),'','Edit1','第一个记事本789') 
发表于 2011-3-29 00:30:19 | 显示全部楼层
opt高级中定义WinTitleMatchMode 为4
 楼主| 发表于 2011-3-29 17:56:35 | 显示全部楼层
回复 8# easefull


    厉害,谢谢,我还想请教下,你是怎么知道这些?帮助里面好像没有这些方面的知识~~
发表于 2011-3-29 18:37:47 | 显示全部楼层
回复 10# annybaby

以前我也碰到这问题.折腾了好久才弄明白的
MsgBox(4096, "", VarGetType(0x00870284))
MsgBox(4096, "", VarGetType(Ptr(0x00870284)))
 楼主| 发表于 2011-4-16 01:56:26 | 显示全部楼层
回复 9# gzh888666


    谢谢你的指引,原来帮助里面有这样一段说明,看过后就明白了~~


窗口句柄(Window Handles / HWNDs)
AutoIt 中的变量可用来存储窗口句柄(HWND).所谓窗口句柄是指 Windows 自动分配给每个新创建的窗口的特殊值.窗口句柄可用来代替窗口标题参数.使用窗口句柄来代替窗口标题的好处是能够更加精确地识别窗口,比如说有时候我们会同时打开同一应用程序的多个副本,这些窗口具有完全相同的窗口标题和窗口文本,这时就可以利用窗口句柄的唯一性来准确识别窗口了. 另外,当使用窗口句柄代替窗口标题参数时,窗口文本参数将被完全忽略.

很多函数如 WinGetHandle, WinList 和 GUICreate 都会返回窗口句柄. 这里要特别提醒大家的是 不能 简单的把窗口句柄归类为数值或者字符串,它是使用特殊的数据类型的.



注意:不管当前的 WinTitleMatchMode 被设置为何种模式,窗口句柄始终可用.



示例

$handle = WinGetHandle("无标题 - 记事本", "")
WinClose($handle)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 08:34 , Processed in 0.081335 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表