吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1014|回复: 3
收起左侧

[其他原创] c#获取notepad.exe内容

  [复制链接]
Sam.777 发表于 2024-3-1 17:20
获取notepad.exe的内容
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetAll());
        }

        [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);


        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


        [DllImport("user32.dll", SetLastError = true)]
        public static extern int SendMessage(IntPtr hWnd, int msg, int Param, StringBuilder text);


        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);


        public static string GetAll(string aa = null)
        {
            List<string> list = new List<string>();
            IntPtr intPtr = FindWindow("notepad", null);
            MemoryStream memoryStream = new MemoryStream();
            BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
            while (intPtr != IntPtr.Zero)
            {
                IntPtr hWnd = FindWindowEx(intPtr, IntPtr.Zero, "edit", null);
                StringBuilder stringBuilder = new StringBuilder(104857600);
                int num = SendMessage(hWnd, 13, stringBuilder.Capacity, stringBuilder);
                binaryWriter.Write(stringBuilder.ToString() + "\r\n---------------------------------------------------\r\n");
                intPtr = FindWindowEx(IntPtr.Zero, intPtr, "notepad", null);
            }
            MemoryStream streamz = new MemoryStream(memoryStream.ToArray());
            BinaryReader rd = new BinaryReader(streamz);
            
            return rd.ReadString();

        }


        private const int WM_GETTEXT = 13;


        private const int WM_GETTEXTLENGTH = 14;
    }
}

Win10之前可以获取所有打开的notepad.exe内容,但是最近测试发现只能获取窗口最前的,可能与版本或代码问题,未进行深入测试

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
wuchen9527 + 1 + 1 我很赞同!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

DEATHTOUCH 发表于 2024-3-1 20:14
对于使用标准Windows控件的编辑器(例如notepad),可以这么做,用SendMessage获取Text,还可以获取选中的文本。
但是对于许多自定义的文本内容(比如浏览器),就不行了,但是好在微软提供了无障碍阅读机制,提供了UIAutomation系列API,不过需要软件支持,几大浏览器基本都支持。
yishengi 发表于 2024-3-1 21:44
正好在学习C#语言,多看大神写的代码有利于帮助,谢谢大佬
likehanhan 发表于 2024-3-2 01:16
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表