You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需激活指定进程即可向其发送文本?

向指定进程发送文本(无需激活窗口)的解决方案

你的AutoHotkey脚本问题分析

当前脚本依赖WinActivate激活窗口后用SendInput发送文本,核心问题有两个:

  1. SendInput仅向当前活动窗口的焦点输入控件发送内容,若进程存在多窗口、激活后焦点不在目标输入框,就会发送失败。
  2. SendInput本身不支持直接向非活动进程的控件发送文本,跳过激活窗口的话必然失效。

AutoHotkey修正方案:使用ControlSend

要实现无需激活窗口直接发送文本,需定位目标进程窗口的输入控件,用ControlSend直接向该控件发送内容。以记事本为例,它的编辑区控件类名为Edit,具体代码如下:

#SingleInstance, Force
SetTitleMatchMode, 2

InputBox, processName, Process Check, Enter the process name:
If (processName = "")
{
    MsgBox, No process name entered. Script will exit.
    ExitApp
}

; 获取进程ID
Process, Exist, %processName%
pid := ErrorLevel
if (pid = 0)
{
    MsgBox, Process "%processName%" was not found.
    ExitApp
}

; 枚举进程下的所有窗口,定位带输入控件的目标窗口
WinGet, winList, List, ahk_pid %pid%
for index, winId in winList
{
    ControlGet, controlHwnd, Hwnd,, Edit1, ahk_id %winId%
    if (controlHwnd != 0)
    {
        ; 直接向Edit控件发送文本,无需激活窗口
        ControlSend, Edit1, I like cats{Enter}, ahk_id %winId%
        MsgBox, Text sent to process "%processName%".
        ExitApp
    }
}

MsgBox, No valid input control found for process "%processName%".

关键说明:

  • ahk_pid %pid%:通过进程ID定位窗口,避免同名进程混淆。
  • ControlSend, Edit1, ...:直接指定控件类名发送文本,完全不需要激活窗口。
  • 若目标是其他程序,需用AHK自带的Window Spy工具(右键托盘图标打开)查看输入控件的类名,替换代码中的Edit1即可。

工具选择建议(针对未来扩展复杂功能)

如果后续需要实现进程内存读写、自定义消息通信、复杂UI自动化等功能,AutoHotkey会存在性能和扩展性瓶颈:

  • 优先推荐工具:
    • C#:结合Windows Automation API或直接调用Win32 API(如SendMessage),生态完善,开发效率高,适合扩展各类复杂功能。
    • C++:直接操作Win32底层API,支持进程注入、消息钩子等高级操作,适合高性能、高定制化场景。
  • 继续用AHK的场景:如果只是简单的文本发送、窗口控制,AHK足够轻便快捷,无需切换工具。

内容的提问来源于stack exchange,提问作者oHfok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:24