0

我正在用c#开发一个通用应用程序,我想要来自任何活动窗口的文本。当用户按下热键时,我的应用程序将使用活动的 Windows 文本数据启动。

它是一个拼写检查应用程序。我的问题是如何从 Microsoft Document 访问文本。我尝试了所有 system32.dll 功能

    [DllImport("user32.dll")]
    static extern IntPtr GetActiveWindow();

    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd, IntPtr msg,
           int wParam, int lParam);

    [DllImport("kernel32.dll")]
    static extern uint GetCurrentThreadId();

    [DllImport("user32.dll")]
    static extern uint GetWindowThreadProcessId(int hWnd, int ProcessId);

        System.Threading.Thread.Sleep(1000);
        StringBuilder builder = new StringBuilder(500000);

        int foregroundWindowHandle = GetForegroundWindow();
        uint remoteThreadId = GetWindowThreadProcessId(foregroundWindowHandle,0);
        uint currentThreadId = GetCurrentThreadId();

        //AttachTrheadInput is needed so we can get the handle of a focused window in another app
        AttachThreadInput(remoteThreadId, currentThreadId, true);
        //Get the handle of a focused window
        int focused = GetFocus();
        //Now detach since we got the focused handle
        AttachThreadInput(remoteThreadId, currentThreadId, false);

        //Get the text from the active window into the stringbuilder
        SendMessage(focused, WM_GETTEXT, builder.Capacity, builder);
        Console.WriteLine("Text in active window was " + builder);
        builder.Append(" Extra text");

        //Change the text in the active window
        SendMessage(focused, WM_SETTEXT, 0, builder);
        //Console.ReadKey();
        Console.Read();

但这只会从记事本、浏览器地址栏、写字板等返回文本。但实际上它不适用于 ms office、excel 等微软产品。

我想要任何活动窗口中的文本以进行拼写检查,任何人都可以帮助我吗?

提前感谢。

4

2 回答 2

0

不,这是可能的.. 因为我的客户给了我他的旧应用程序,它可以在其中工作.. 它可以与 word、excel、ppt、记事本、写字板等一起工作。但现在他想要它用于通用类型.. 他给了我那个.exe文件...所以我无法检查代码..而且我没有向他询问他的旧应用程序代码..所以我也无法获得旧应用程序的代码...

所以有修复,这是工作....

于 2013-06-24T12:46:39.513 回答
0

您无法从任何应用程序中获取文本...但是您可以开发击键应用程序,该应用程序可以从任何窗口获取击键并将其保存到您的应用程序中......我在 c# 中开发了击键应用程序,但这不能正常工作...它检测来自任何窗口的按键,但在按下大写锁定键时会受到干扰....

于 2013-06-24T11:49:05.950 回答