ControlSend

首页  后退  前进

ControlSend
down2

ControlSend

发送字符串到字符控件.

 

ControlSend ( "title", "text", controlID, "string" [, flag = 0] )

参数

title

目标窗口标题, 或句柄, 或类名. 参考 窗口标题与文本

text

目标窗口文本.  参考 窗口标题与文本

controlID

控件标识符. 相关说明见 控件

string

发送到控件的字符串

flag

[可选] 修改特殊代码字符的处理方式:

   0 = (默认值), 文本含有特殊字符, 比如 + 将被视为 SHIFT 键, {LEFT} 将被视为左箭头键.

   1 = 按原样发送.

 

常量定义在 "AutoItConstants.au3"

返回值

成功:

返回 1.

失败:

返回 0, 未找到窗口/控件.

备注

ControlSend() 的工作方式类似 Send() 但它能直接对窗口/控件发送键击命令, 不只限于激活窗口.

 

ControlSend() 发送命令提示符是不可靠的, 命令提示符对不同工作的正常窗口似乎是检查实际状态, 而不是接受击键消息.

对于常规 windows(操作系统), ControlSend() 的可靠方法应该是使用 Send() 函数 - 发送 shift(换档键), ctrl(控制键), alt(备用键) 等等.

如同 Send() 函数帮助页提到的, 在大写锁定时, 无法模拟使用 Shift 键. 一个例子是使用捷克键盘. 很好的替换方法是使用 ControlSetText() 函数.

 

控件可能需要用 ControlFocus() 命令获得焦点, 特别是引用由脚本创建的控件 ID 时.

 

Opt("SendKeyDelay",...) 修改发送按键之间的间歇时间长度.

Opt("SendKeyDownDelay",...) 修改按键在释放之前按压的时间长度.

 

函数示例

Example()
Func Example()
    ; Run Notepad
    Run("notepad.exe")
    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
    ; Wait for 2 seconds.
    Sleep(2000)
    ; Send a string of text to the edit control of Notepad. The handle returned by WinWait is used for the "title" parameter of ControlSend.
    ControlSend($hWnd, "", "Edit1", "This is some text")
    ; Wait for 2 seconds.
    Sleep(2000)
    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
    ; Now a screen will pop up and ask to save the changes, the classname of the window is called
    ; "#32770" and simulating the "TAB" key to move to the second button in which the "ENTER" is simulated to not "save the file"
    WinWaitActive("[CLASS:#32770]")
    Sleep(500)
    Send("{TAB}{ENTER}")
EndFunc   ;==>Example

----------------------------------------

 

该函数可以通过命令 exect 调用

参见:

ControlCommand, Send, ControlSetText, ControlFocus, SendKeyDelay (Опция), SendKeyDownDelay (Опция)

例子
copy

exect=ControlSend('Безымянный~~~~Блокнот','''','Edit1','Hello') ;;在窗口"记事本"中插入文本"hello"(应该被启动,可以最小化)

 

exect=$var_h=WinActivate('Безымянный~~~~Блокнот')||ControlSend(Eval('var_h'),'''','[CLASS:Edit;INSTANCE:1]','Это~~некоторый~~текст') ;; 激活"记事本"窗口并插入指定的文本(应该启动)

 

tcimg=$cm498 pause=500 exect=ControlSend('[CLASS:TBUTTONCHANGEDLG]','''','TAltEdit1','+{INSERT}',0) ;;在"提示"字段(TC x32)中调用工具栏并输入文字从剪贴板

 

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),'''','Edit1','Hello') ;; 运行"记事本",等待激活并输入"hello"

 

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),'''','Edit1','закройте~~окно')||WinWaitClose(Eval('var_h'))||MsgBox(4096,'''','окно~~закрыто') ;; 运行"记事本",等待用户关闭窗口

 

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),'''','Edit1','сверните~~окно')||WinWaitNotActive(Eval('var_h'))||MsgBox(4096,'''','окно~~не~~активно') ;; 运行"记事本",等到窗口不活动

up2

tcimage © Аверин Андрей для Total Commander Image Averin-And@yandex.ru