Winapi Pywin32:Win32 API.SendMessage无法发送到DOS盒程序?

Winapi Pywin32:Win32 API.SendMessage无法发送到DOS盒程序?,winapi,pywin32,wscript.shell,Winapi,Pywin32,Wscript.shell,是否可以使用win32api.SendMessage将字符发送到似乎在某种DOS框中运行的程序 在我的Windows任务管理器中,我看到一个名为ntvdm.exe的进程(显然是“虚拟DOS机器”)。看起来wowexec.exe(“windows上的windows”)和my target.exe都在ntvdm.exe的“内部”,因为它们在任务管理器中没有自己的PID。相反,它们在ntvdm.exe下方显示为缩进 我已尝试通过win32api.SendMessage(,win32con.WM_CHA

是否可以使用
win32api.SendMessage
将字符发送到似乎在某种DOS框中运行的程序

在我的Windows任务管理器中,我看到一个名为ntvdm.exe的进程(显然是“虚拟DOS机器”)。看起来wowexec.exe(“windows上的windows”)和my target.exe都在ntvdm.exe的“内部”,因为它们在任务管理器中没有自己的PID。相反,它们在ntvdm.exe下方显示为缩进

我已尝试通过
win32api.SendMessage(,win32con.WM_CHAR,0x41,0)
为target.exe(从父项=0到每个子项)设置所有可能的窗口句柄
SendMessage
在记事本和记事本++等其他程序中工作。只有DOS程序让我头疼


使用
shell=win32com.client.Dispatch(“WScript.shell”)
但是与
shell.AppAcitvate
(使用ntvdm.exe的PID)和
shell.SendKeys
结合使用就行了!这不是也在后台发送“WM_CHAR”消息吗?

为了支持各种不同的应用程序类型,Windows NT有一个相当复杂的体系结构。显然,您假定
WM_CHAR
消息是击键。这在很大程度上是一种Win16的思维方式。
WM
代表窗口消息;对于带有窗口和消息泵的应用程序来说,这是一个击键事件

另一方面,控制台程序不使用窗口消息泵;他们有Unix风格的标准输入和标准输出
shell.sendKeys
理解其中的区别

这也意味着控制台程序没有窗口句柄。PID是进程标识符,因此不是窗口句柄。一个进程可以有0个、1个或多个窗口句柄,因此每个窗口句柄都有一个(通常是非唯一的)PID,但反之亦然

SendKeys
之所以有效,是因为shell知道这一切