def send_str(text, hwnd):
astrToint = [ord(c) for c in text]
for item in astrToint:
win32api.PostMessage(hwnd, win32con.WM_CHAR, item, 0)
send_str('hhhh',hwndf[0])
为什么这段代码实现不了后台输入,后台点击又可以
根据您提供的代码片段,似乎您想要通过后台发送字符串到指定窗口。然而,这段代码可能无法实现后台输入的效果,这是因为win32api.PostMessage
函数发送的WM_CHAR
消息通常只会被前台窗口处理。
要实现后台输入字符串的功能,您可以考虑使用SendInput
函数。下面是一个示例代码片段,演示如何使用SendInput
函数进行后台输入:
import win32api
import win32con
import win32gui
import ctypes
import time
def send_str(text, hwnd):
hwnd_foreground = win32gui.GetForegroundWindow()
win32gui.SetForegroundWindow(hwnd)
inputs = []
for char in text:
key_event = win32con.KEYEVENTF_UNICODE
inputs.append(win32con.INPUT(
type=win32con.INPUT_KEYBOARD,
ki=win32con.KEYBDINPUT(wVk=0, wScan=char, dwFlags=key_event)
))
inputs.append(win32con.INPUT(
type=win32con.INPUT_KEYBOARD,
ki=win32con.KEYBDINPUT(wVk=0, wScan=char, dwFlags=key_event | win32con.KEYEVENTF_KEYUP)
))
# 输入开始前先稍作延迟,以确保窗口获得焦点
time.sleep(0.5)
# 发送输入
nInputs = len(inputs)
cbSize = ctypes.sizeof(win32con.INPUT)
ctypes.windll.user32.SendInput(nInputs, ctypes.byref((win32con.INPUT * nInputs)(*inputs)), cbSize)
# 恢复前台窗口焦点
win32gui.SetForegroundWindow(hwnd_foreground)
# 示例用法
hwnd = win32gui.FindWindow(None, '窗口标题') # 替换为目标窗口的标题
send_str('hhhh', hwnd)
这段代码使用SendInput
函数来模拟键盘输入,其中每个字符都发送一个按下和释放的键盘事件。在发送输入之前,代码通过SetForegroundWindow
将目标窗口设置为前台窗口,以确保窗口能够接收到输入。发送完成后,代码还会将焦点恢复到之前的前台窗口。
请注意,为了使用这段代码,您需要安装pywin32
库,并且需要根据目标窗口的特定信息(如窗口标题)进行适当的调整。
希望这可以帮助您实现后台输入字符串的功能。如有其他问题,请随时提问。