访问数据从活动窗口

时间:2013-06-24 11:39:52

标签: c# asp.net

我正在 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();

但是这将仅从记事本,浏览器地址栏,wordpad等返回文本。 但实际上它不适用于微软产品,如ms office,excel ..等。

我希望来自任何活动窗口的文字进行拼写检查,任何人都可以帮我这个。?

Thanx In Advance。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

不可能.. 因为我的客户给了我他应用的旧应用程序.. 它将使用word,excel,ppt,记事本,wordpad等。 但是现在他希望它能用于普遍的...... 他给了我.exe文件...所以我不能检查代码.. 并且没有任何情况我向他询问他的旧应用程序代码..所以我也无法得到旧应用程序的代码......

所以有解决方案,这是有效的....