import win32gui
import win32con
import win32api
import ctypes
import ctypes.wintypes
def get_cmd_window_text ():
"""获取CMD窗口的文本内容"""
# 查找CMD窗口
cmd_title = "C:\Windows\system32\cmd.exe"
hwnd = win32gui.FindWindow (None, cmd_title)
if not hwnd:
print ("未找到CMD窗口")
return None
# 确保窗口可见
win32gui.ShowWindow (hwnd, win32con.SW_SHOW)
# 获取窗口客户区矩形
rect = win32gui.GetClientRect (hwnd)
width = rect[2] - rect[0]
height = rect[3] - rect[1]
# 创建内存DC和位图
hdc = win32gui.GetDC (hwnd)
mem_dc = win32gui.CreateCompatibleDC (hdc)
bitmap = win32gui.CreateCompatibleBitmap (hdc, width, height)
win32gui.SelectObject (mem_dc, bitmap)
# 复制窗口内容到内存DC
win32gui.BitBlt (mem_dc, 0, 0, width, height, hdc, 0, 0, win32con.SRCCOPY)
# 释放DC
win32gui.ReleaseDC (hwnd, hdc)
# 这里我们无法直接从位图获取文本,需要使用OCR或者其他方法
# 下面是另一种方法:发送WM_GETTEXT消息获取窗口标题栏文本
# 注意:这只能获取标题栏文本,不能获取窗口内的命令输出
# 获取窗口标题文本长度
text_len = win32gui.SendMessage (hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
# 分配缓冲区
buffer = ctypes.create_unicode_buffer (text_len)
# 获取窗口文本
win32gui.SendMessage (hwnd, win32con.WM_GETTEXT, text_len, buffer)
# 清理资源
win32gui.DeleteObject (bitmap)
win32gui.DeleteDC (mem_dc)
return buffer.value
def get_cmd_output (command):
"""执行命令并获取输出(另一种获取CMD内容的方式)"""
import subprocess
try:
# 执行命令并捕获输出
result = subprocess.run (
command,
shell=True,
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
return result.stdout
except subprocess.CalledProcessError as e:
return f"命令执行错误: {e.stderr}"
if __name__ == "__main__":
# 方法1: 获取CMD窗口标题文本(有限制)
cmd_text = get_cmd_window_text ()
if cmd_text:
print ("CMD窗口标题文本:")
print (cmd_text)
# 方法2: 执行命令并获取输出(更可靠的方式)
print ("\n执行命令 dir_output = get_cmd_output ("dir")
print (dir_output)