annybaby 发表于 2011-3-27 23:47:56

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

本帖最后由 annybaby 于 2011-3-29 23:54 编辑

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

789

7

786

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

我试了好多次,都是向最后一个被激活的那一个发~~~

easefull 发表于 2011-3-28 00:30:36

两个办法
1.每打开一个记事本的时候先记下窗口句柄,发送文字的时候直接使用窗口句柄
2.枚举窗口句柄,然后用WinGetText、ControlGetText获取窗口文字,然后对字符串进行'=='比较

annybaby 发表于 2011-3-28 00:34:42

回复 2# easefull


    额,不会用句柄发,愿闻其详~~

pcbar 发表于 2011-3-28 08:28:42

Run('notepad.exe')
WinWaitActive("无标题",'')
$h1=WinGetHandle("")
WinActivate('Program Manager')
Run('notepad.exe')
WinWaitActive("无标题",'')
$h2=WinGetHandle("")

ControlSend($h1,'','Edit1','第一个记事本789')
ControlSend($h2,'','Edit1','第2个记事本7')

zitoy 发表于 2011-3-28 13:10:43

WinGetHandle 获取窗口句柄hWnd

easefull 发表于 2011-3-28 15:41:57

回复 3# annybaby


看4楼的例子

annybaby 发表于 2011-3-28 21:11:10

回复 4# pcbar

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

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

另外,帮助文件里面没有介绍说ControlSend的第一个参数可以用句柄啊,你们是怎么知道的??

easefull 发表于 2011-3-28 21:40:44

回复 7# annybaby

因为0x00060634是数字,不是指针.试试ControlSend(Ptr(0x00060634),'','Edit1','第一个记事本789')

gzh888666 发表于 2011-3-29 00:30:19

opt高级中定义WinTitleMatchMode 为4

annybaby 发表于 2011-3-29 17:56:35

回复 8# easefull


    厉害,谢谢,我还想请教下,你是怎么知道这些?帮助里面好像没有这些方面的知识~~

easefull 发表于 2011-3-29 18:37:47

回复 10# annybaby

以前我也碰到这问题.折腾了好久才弄明白的MsgBox(4096, "", VarGetType(0x00870284))
MsgBox(4096, "", VarGetType(Ptr(0x00870284)))

annybaby 发表于 2011-4-16 01:56:26

回复 9# gzh888666


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


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

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



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



示例

$handle = WinGetHandle("无标题 - 记事本", "")
WinClose($handle)
页: [1]
查看完整版本: 如何向指定的窗口发送文字[已解决]