# 【已解决】我想让Python直接输出文本到插入点，结果诡异

**URL:** <https://meta.appinn.net/t/topic/70944>\
**Category:** 问题求助\
**Tags:** autohotkey, python\
**Created:** [2025 年4 月 30 日 07:29 UTC](https://meta.appinn.net/t/topic/70944 "2025-04-30T07:29:46Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

作者： ![hzhbest](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/h/e9a140/32.png) [@hzhbest](https://meta.appinn.net/u/hzhbest)\
发布日期： [2025 年4 月 30 日 07:29 UTC](https://meta.appinn.net/t/topic/70944/1 "2025-04-30T07:29:46Z")

</div>

简单来说，就是想用Python实现AHK的`SendRaw`命令的功能，也就是不模拟键盘，不经剪贴板，直接将Unicode字符输出到任意插入点  
——  
问了AI n多次，结果都不行，`pyautogui.write` 不能写中文等非英文字符，有些要求识别插入点控件的又没法普适使用，用Win API的又没效果（没输出任何东西）……折腾了好久  
——  
这期间使用的是 Notepad2 等记事本衍生品来试验，试得都要红温了，索性把插入点放到Vscode，一试……居然行了，什么鬼事情？  
——  
所用的Python代码如下：

```
import win32gui
import win32api
import win32con
import time

def send_raw(text, hwnd=None):
    """
    向目标窗口发送原始字符串（类似 AHK 的 SendRaw）
    
    :param text: 要发送的字符串（支持中文、特殊符号）
    :param hwnd: 目标窗口句柄（若为 None，则发送到当前焦点窗口）
    """
    if hwnd is None:
        hwnd = win32gui.GetForegroundWindow() # 获取当前焦点窗口
    
    for char in text:
        print(char)
        # 发送 WM_CHAR 消息（支持 Unicode）
        win32api.SendMessage(hwnd, win32con.WM_CHAR, ord(char), 0)
        time.sleep(0.01) # 避免输入过快导致丢字

time.sleep(3)
send_raw("输入字符txt测试￥☆")
```

——  
目前测试能够成功输入的目标程序有：vscode，各聊天软件，各浏览器，Everything Toolbar；  
测试不能输入的目标程序有：记事本及其各种衍生mod，explorer，Process Explorer，Everything，WPS，MS Office  
——  
最后，跪求了，怎么让Python完美实现AHK的`SendRaw`功能？

---

<div class="post-metadata">

作者： ![SmallPackage](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/smallpackage/32/57958_2.png) [@SmallPackage](https://meta.appinn.net/u/SmallPackage)\
发布日期： [2025 年4 月 30 日 07:54 UTC](https://meta.appinn.net/t/topic/70944/2 "2025-04-30T07:54:44Z")

</div>

一般来说, 这玩意是和api相关的吧, 记得不同GUI软件的技术实现其实是不一样的, 可能要找一些封装了比较多功能的接口;或者用某种其他的方式吧;

但我没有做过pythonUI相关的库, 只是之前被输入法折磨过, 不少GUI程序输入法窗口位置就是没法识别

---

<div class="post-metadata">

作者： ![hzhbest](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/h/e9a140/32.png) [@hzhbest](https://meta.appinn.net/u/hzhbest)\
发布日期： [2025 年4 月 30 日 09:29 UTC](https://meta.appinn.net/t/topic/70944/3 "2025-04-30T09:29:55Z")

</div>

后来在 FittenCode 不断追问得到新的方案：

```
import win32gui
from pynput.keyboard import Controller, Key
import time

# 创建键盘控制器
keyboard = Controller()

# 直接发送字符
def send_raw(text, win=None):
    if win:
        win32gui.SetForegroundWindow(win)
    for char in text:
        keyboard.press(char)
        keyboard.release(char)

time.sleep(2)
send_raw("输入字符txt测试￥☆")
```

——  
~~现在就差能够无视输入法状态直接进行输出的方法了……~~  
——  
果然牛人是逼出来，AI正确的回答也得追问出来——  
可以无视输入法直接输出任何字符的代码：

```
from pywinauto.keyboard import send_keys
import time

def send_raw(text):
    # 发送文本
    send_keys(text, with_spaces=False, with_newlines=False)

time.sleep(2)
send_raw("输入字符txt测试￥☆")
```
