当前位置:  开发笔记 > 编程语言 > 正文

如何在C#/ Win32中将文本发送到记事本?

如何解决《如何在C#/Win32中将文本发送到记事本?》经验,为你挑选了2个好方法。

我正在尝试将SendMessage用于记事本,这样我就可以插入书面文本而不会将记事本作为活动窗口.

我在过去使用过这样的事情SendText,但这需要给予Notepad专注.

现在,首先我要检索Windows句柄:

Process[] processes = Process.GetProcessesByName("notepad");
Console.WriteLine(processes[0].MainWindowHandle.ToString());

我已经确认它是记事本的正确句柄,内部显示相同Windows Task Manager.

[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);

从这里开始,我无法让SendMessage在我的所有实验中工作.我走错了方向吗?



1> ebattulga..:
    [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    [DllImport("User32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
    private void button1_Click(object sender, EventArgs e)
    {
        Process [] notepads=Process.GetProcessesByName("notepad");
        if(notepads.Length==0)return;            
        if (notepads[0] != null)
        {
            IntPtr child= FindWindowEx(notepads[0].MainWindowHandle, new IntPtr(0), "Edit", null);
            SendMessage(child, 0x000C, 0, textBox1.Text);
        }
    }

WM_SETTEXT = 0x000c


所以这真的很奇怪,使用此函数将窗口的名称更改为`textBox11.Text`。它实际上并不像发送键盘消息那样发送消息:/

2> Stefan..:

首先必须找到输入文本的子窗口.您可以通过查找窗口类"编辑"的子窗口来完成此操作.获得该窗口句柄后,使用WM_GETTEXT获取已输入的文本,然后修改该文本(例如,添加自己的文本),然后使用WM_SETTEXT将修改后的文本发回.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有