如何向指定的窗口发送文字[已解决]
本帖最后由 annybaby 于 2011-3-29 23:54 编辑比如说,我打开了三个记事本,都是新建的,也就是说:三个类都是一样的,标题也是一样的,它们的内容分别为:
789
7
786
如果是向"789"发的话,我会,现在我想向"7"那个发,应该怎么样呢??(注意:其它两个也包括有文本"7")
我试了好多次,都是向最后一个被激活的那一个发~~~ 两个办法
1.每打开一个记事本的时候先记下窗口句柄,发送文字的时候直接使用窗口句柄
2.枚举窗口句柄,然后用WinGetText、ControlGetText获取窗口文字,然后对字符串进行'=='比较 回复 2# easefull
额,不会用句柄发,愿闻其详~~ Run('notepad.exe')
WinWaitActive("无标题",'')
$h1=WinGetHandle("")
WinActivate('Program Manager')
Run('notepad.exe')
WinWaitActive("无标题",'')
$h2=WinGetHandle("")
ControlSend($h1,'','Edit1','第一个记事本789')
ControlSend($h2,'','Edit1','第2个记事本7') WinGetHandle 获取窗口句柄hWnd 回复 3# annybaby
看4楼的例子 回复 4# pcbar
为什么我新建一个记事本,然后直接用窗口信息抓取句柄来发送却不行的啊??
只是替换ControlSend($h1,'','Edit1','第一个记事本789')中的$h1,比如说
我用msgbox来显示$h1的内容是0x00060634,然后替换下,改成
ControlSend(0x00060634,'','Edit1','第一个记事本789')却没有成功??
另外,帮助文件里面没有介绍说ControlSend的第一个参数可以用句柄啊,你们是怎么知道的?? 回复 7# annybaby
因为0x00060634是数字,不是指针.试试ControlSend(Ptr(0x00060634),'','Edit1','第一个记事本789') opt高级中定义WinTitleMatchMode 为4 回复 8# easefull
厉害,谢谢,我还想请教下,你是怎么知道这些?帮助里面好像没有这些方面的知识~~ 回复 10# annybaby
以前我也碰到这问题.折腾了好久才弄明白的MsgBox(4096, "", VarGetType(0x00870284))
MsgBox(4096, "", VarGetType(Ptr(0x00870284))) 回复 9# gzh888666
谢谢你的指引,原来帮助里面有这样一段说明,看过后就明白了~~
窗口句柄(Window Handles / HWNDs)
AutoIt 中的变量可用来存储窗口句柄(HWND).所谓窗口句柄是指 Windows 自动分配给每个新创建的窗口的特殊值.窗口句柄可用来代替窗口标题参数.使用窗口句柄来代替窗口标题的好处是能够更加精确地识别窗口,比如说有时候我们会同时打开同一应用程序的多个副本,这些窗口具有完全相同的窗口标题和窗口文本,这时就可以利用窗口句柄的唯一性来准确识别窗口了. 另外,当使用窗口句柄代替窗口标题参数时,窗口文本参数将被完全忽略.
很多函数如 WinGetHandle, WinList 和 GUICreate 都会返回窗口句柄. 这里要特别提醒大家的是 不能 简单的把窗口句柄归类为数值或者字符串,它是使用特殊的数据类型的.
注意:不管当前的 WinTitleMatchMode 被设置为何种模式,窗口句柄始终可用.
示例
$handle = WinGetHandle("无标题 - 记事本", "")
WinClose($handle)
页:
[1]