当前位置: 首页 > 知识库问答 >
问题:

使用user32.dll从外部应用程序的文本框(Unicode)中提取文本到C#应用程序中

赏彭薄
2023-03-14
 private void button1_Click(object sender, EventArgs e)
    { IntPtr MytestHandle = new IntPtr(0x00060342);

        HandleRef hrefHWndTarget = new HandleRef(null, MytestHandle);

     // encode text into 
        richTextBox1.Text = ModApi.GetText(hrefHWndTarget.Handle);
     }

公共静态类ModApi{
[dllimport(“user32.dll”,EntryPoint=“sendmessageTimeout”,SetLastError=true,CharSet=CharSet.unicode)]公共静态extern uint SendMessageTimeoutText(IntPtr hWnd,int Msg,int countOfChars,StringBuilder text,uint flags,uint uTImeoutj,uint result);

        public static string GetText(IntPtr hwnd)
        {
            var text = new StringBuilder(1024);

            if (SendMessageTimeoutText(hwnd, 0xd, 1024, text, 0x2, 1000, 0) != 0)
            {
                return text.ToString();
            }

            MessageBox.Show(text.ToString());
            return "";
        }
    }

共有1个答案

令狐唯
2023-03-14

您对WN_GETTEXT的使用不正确,请阅读文档:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632627%28v=vs.85%29.aspx

wParam

The maximum number of characters to be copied, including the terminating null character. 

或者使用正确的函数:http://www.pinvoke.net/default.aspx/user32/getWindowtext.html

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [Out] StringBuilder lParam);

public static string GetWindowTextRaw(IntPtr hwnd)
{
    // Allocate correct string length first
    int length = (int)SendMessage(hwnd, WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero);
    StringBuilder sb = new StringBuilder(length + 1);
    SendMessage(hwnd, WM_GETTEXT, (IntPtr)sb.Capacity, sb);
    return sb.ToString();
}

使其适应SendMessageTimeOut

 类似资料:
  • 问题内容: 我有一个用c#创建的dll,在调用时会执行一些数据库操作。我必须将一些参数从Java应用程序传递到dll中的方法。关于如何执行此操作的任何想法。 要么 通过Java应用程序在c#中调用方法的更好的主意吗? 谢谢 编辑:我的Java应用程序是AVAYA平台的标准Dialogue Designer应用程序,并且我已经开发了一个仅在.net SDK上工作的C#应用​​程序。所以我需要将数据从

  • 我在visual studio中创建了一个dll(我没有使用任何win\u API函数)。我想从我生成的android.apk文件中调用这个dlll,但在运行这个文件时,我遇到了这个错误。 "java.lang.无法从加载器加载Testdll1dalvik.system.PathClassLoader[DexPathList[[zip file"/data/app/], nativeLibrary

  • 我在一个Web发布者那里有一个HTML页面,我想将其内容加载到我的Web应用程序中的JSP中。我尝试了JSP:Include操作和Include指令,但它们似乎都只采用相对路径。我无法拥有该html文件的本地副本,因为该文件可能会在将来发生更改,我需要动态包含它。如何使用绝对路径包含文件?

  • 晚上好 我正在寻找一个简单的文本到语音的iphone应用程序开发。我看到很多关于这个的帖子,包括。。。 iPhone的文本到语音库 不过,这个链接是所有第三方开发者使用文本到语音的。我以为苹果有一个类引用来创建语音?有人能解释一下吗?苹果不为我们提供这个吗? 谢啦

  • 有了这个代码,我想要一个. jar文件来读取文本文件“file.txt”,它位于文件夹数据的jar中。这是一个应用程序编程与处理,所以我想读的所有文件都在数据文件夹中。有人能解释为什么我得到一个NullPointerExcema吗?文件存在并包含文本。

  • 我正在用C++构建一个控制台应用程序,需要一种方法来调用终端文本编辑器,以满足用户的编辑乐趣,并知道何时完成。 例如,在git中,当您运行时,它会在终端中启动一个文本编辑器(默认情况下是Nano),您可以轻松地在其中编辑提交。当您关闭编辑器时,git将继续在控制台中进行操作。 我相信我需要做的是将一个编辑器作为子进程启动,不断地通过和传递给它,最后在编辑器退出时恢复程序。 我研究了,但它只发送一个