c# 在知道数据窗口的句柄的时候如何获得数据窗口的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 在知道数据窗口的句柄的时候如何获得数据窗口的数据相关的知识,希望对你有一定的参考价值。

这是一个pb写的程序,请问我怎么用C# 通过句柄获得这个数据窗口的数据。

参考技术A 这个必须要用win API了:

FindWindow找窗口句柄
FindWindowEx找文本框句柄
最后用GetWindowText 取内容

关于C#调用WinAPI的方法,请自行百度

c# 获得一个程序的窗口句柄,并且修改它的标题

按下BUTTON1的时候
以获取calc.exe 将窗口标题计算器 改成 我的计算器
最简单的代码 提供一下 ,能用就给分了

第一步:获取目标窗口句柄

首先引用命名空间:

using System.Runtime.InteropServices;

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

利用FindWindow获得目标窗口句柄

第一个参数是类名,第二个参数是窗口原来的标题

以下代码则是获得目标窗口代码:

 IntPtr window = FindWindow(null,"Microsoft SQL Server Management Studio");//我这里是以SQL为例

第二步:改变窗口标题

 [DllImport("user32.dll", EntryPoint = "SetWindowText")]
        public static extern int SetWindowText(
            IntPtr hwnd,
            string lpString
        );

以下代码则是改变目标句柄的窗口标题:

SetWindowText(window,"你好啊");

Ok,窗口标题成功修改了!!!!

附加根据进程名称修改标题:

Process [] ps= Process.GetProcessesByName("Ssms");//根据进程名称获得进程数组
            foreach(Process p in ps)//遍历进程
            
                SetWindowText(p.MainWindowHandle, "Microsoft SQL Server Management Studio免费共享版");
            

参考技术A
//add
using System.Runtime.InteropServices; 

namespace ModifyTitle

    public partial class Form1 : Form
    
        [DllImport("user32.dll", EntryPoint = "FindWindowA", CharSet = CharSet.Ansi)]
        public static extern int FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", EntryPoint = "SetWindowText", CharSet = CharSet.Ansi)]
        public static extern int SetWindowText(int hwnd, string lpString);


        public Form1()
        
            InitializeComponent();
            //启动计算器
            System.Diagnostics.Process.Start("calc.exe");
        

        private void button1_Click(object sender, EventArgs e)
                    
            int lHwnd = FindWindow(null, "计算器");
            while (lHwnd != 0)
            
                SetWindowText(lHwnd, "我的计算器");
                lHwnd = FindWindow(null, "计算器");
            
        


    

追问

能不能以进程名或者窗口句柄修改 你这个方法是通过名字修改的对我没有用啊

参考技术B 通过进程名获取进程句柄就可以了!!!本回答被提问者采纳 参考技术C this.Text = "标题";

以上是关于c# 在知道数据窗口的句柄的时候如何获得数据窗口的数据的主要内容,如果未能解决你的问题,请参考以下文章

C# winform鼠标移动到窗口给窗口加边框并获得句柄

c#获取窗口句柄后 如何遍历所有控件

c#如何获取串口的句柄?

vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息

c# 怎样获得想要的线程ID

vb中如何获得一个窗口的句柄