0

私は、アクティブなウィンドウからのテキストが必要な1 つのユニバーサル アプリケーションをc#で開発しています。ユーザーがホット キーを押すたびに、アクティブな Windows テキスト データでアプリケーションが起動します。

1つのスペルチェッカーアプリです。私の問題は、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などのMicrosoft製品では機能しません.

スペルチェックのためにアクティブなウィンドウからテキストを取得したいのですが、誰か助けてくれますか?

よろしくお願いします。

4

2 に答える 2

0

いいえ、それは可能です..私のクライアントは、それが動作する彼の古いアプリケーションを私にくれたので..それはワード、エクセル、ppt、メモ帳、ワードパッドなどで動作します..しかし今、彼は普遍的な種類のためにそれを望んでいます..そのための.exeファイルをくれたので...コードを確認できません..そして、彼に彼の古いアプリケーションコードを尋ねる状況はありません..古いアプリケーションのコードも取得できません...

したがって、これが機能しているという修正があります....

于 2013-06-24T12:46:39.513 に答える
0

アプリケーションからテキストを取得することはできません...しかし、任意のウィンドウからキーストロークを取得してアプリケーションに保存できるキーストロークアプリケーションを開発することはできます....C#でキーストロークアプリケーションを開発しましたが、正しく動作しません...任意のウィンドウからのキーストロークを検出しますが、Caps Lock キーが押されると妨げられます....

于 2013-06-24T11:49:05.950 に答える