私は、アクティブなウィンドウからのテキストが必要な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製品では機能しません.
スペルチェックのためにアクティブなウィンドウからテキストを取得したいのですが、誰か助けてくれますか?
よろしくお願いします。