c# 通过win32 api 得到指定Console application Content

已知的问题
 
1. Windows 应用程序才可以使用,可以用非windows应用程序包一层


复制代码
 public class ConsoleContentRead
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool AttachConsole(uint dwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool FreeConsole(uint dwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr GetStdHandle(int nStdHandle);

        [StructLayout(LayoutKind.Sequential)]
        public struct Coord
        {
            public short X;
            public short Y;
        }

        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        static extern bool ReadConsoleOutputCharacter(IntPtr hConsoleOutput, [Out] StringBuilder lpCharacter, uint length, Coord bufferCoord, out uint lpNumberOfCharactersRead);

        public static string ReadCharacterAt(int x, int y, int length)
        {
            IntPtr consoleHandle = GetStdHandle(-11);

            if (consoleHandle == IntPtr.Zero)
            {
                return null;
            }
            Coord position = new Coord
            {
                X = (short)x,
                Y = (short)y
            };
            StringBuilder result = new StringBuilder(length);
            uint read = 0;
            if (ReadConsoleOutputCharacter(consoleHandle, result, (uint)length, position, out read))
            {
                return result.ToString();
            }
            else
            {
                return null;
            }
        }



        public static string GetContent(int pid, int x, int y, int length)
        {
            //注意要是 Windows 应用程序才可以 AttachConsole成功
            var flag = AttachConsole((uint)pid);
            string content = ReadCharacterAt(x, y, length);
            var freeflag = FreeConsole((uint)pid);
            return content;
        }
    }
复制代码

 

 
//使用
   var content = ConsoleContentRead.GetContent(process.Id, 0, 2, 45);

 


posted @   小小高  阅读(460)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2015-11-04 Stream(流)的基本操作
2015-11-04 通过json传递图片(base64编码)
点击右上角即可分享
微信分享提示