Powerpointのマウスカーソルの下にある単語を知りたいので、スクリーンリーダーに使用することができます。アクセシビリティソリューションは、異なる単語(ブロック)を区別できる場合は許容されます。C#を使用してPowerpoint 2013でマウスカーソルの下に単語を取得するにはどうすればよいですか?
答えて
あなたが何をしているのかわからない場合、これは実際には本当に難しいです。これを行うには簡単な方法と難しい方法があります。簡単な方法は、Microsoft UIの自動化フレームワーク(Powerpointの自動化を含む)を使用することです。代わりのフレームワークも使用できます。
ハードウェアで直接winpiを使用することができます。
例:現在マウスの下のウィンドウタイトルを取得する。
public static class dllRef
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetCursorPos(out Point lpPoint);
[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point point);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int RegisterWindowMessage(string lpString);
[DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Auto)]
public static extern bool SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SendMessage(int hWnd, int Msg, int wparam, int lparam);
public const int WM_USER = 0x400;
public const int WM_COPYDATA = 0x4A;
public const int WM_GETTEXT = 0x000D;
public const int WM_GETTEXTLENGTH = 0x000E;
public static void RegisterControlforMessages()
{
RegisterWindowMessage("WM_GETTEXT");
}
public static string GetText()
{
StringBuilder title = new StringBuilder();
Point p = dllRef.getMousePosition();
var lhwnd = dllRef.WindowFromPoint(p);
var lTextlen = dllRef.SendMessage((int)lhwnd, dllRef.WM_GETTEXTLENGTH, 0, 0).ToInt32();
if (lTextlen > 0)
{
title = new StringBuilder(lTextlen + 1);
SendMessage(lhwnd, WM_GETTEXT, title.Capacity, title);
}
return title.ToString();
}
public static Point getMousePosition()
{
Point p = new Point();
GetCursorPos(out p);
return p;
}
}
と
private void Form1_Load(object sender, EventArgs e)
{
Timer t = new Timer();
t.Interval = 25;
t.Tick += new EventHandler(Timer_Tick);
t.Start();
}
public void Timer_Tick(object sender, EventArgs eArgs)
{
this.label1.Text = dllRef.GetText();
}
また、あなたが探している情報が公開されている場合を見つけるために、マイクロソフトスパイ++
を使用することができます。それ以外の場合は、この上に構築されたレイヤーであるオートメーションフレームワークを使用することをお勧めします。 Googleにはこれに関する十分な例があります(洗練されたキーロガーの構築方法も同様です)。
マルガスと同じ解決策が思い浮かびました。 UIオートメーションまたはPowerPoint interop。幸いにもUIオートメーションが機能します。
私のテストでは、PowerPoint 2013テキストボックスにマウスを置くと以下のようになります。何かが欠けていると思ったら教えてください。
using System.Windows.Automation;
using UIAutomationClient;
String TextUnderCursor()
{
System.Windows.Point point = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
AutomationElement element = AutomationElement.FromPoint(point);
object patternObj;
if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj))
{
var textPattern = (TextPattern)patternObj;
return textPattern.DocumentRange.GetText(-1).TrimEnd('\r'); // often there is an extra '\r' hanging off the end.)
} else
{
return "no text found";
}
}
更新のサンプルhttp://download.veodin.com/misc/PowerPoint_Screen_Reader.zip
フォーカスVisual Studioは、ユーザーが上にカーソルを置いたときに
これは有望そうです。 「UIAutomationClient」にはどの参照を含める必要がありますか? UIAutomationClient dllがありますが、これにはSystem.Windows.Automationのみが含まれています。 (.NET 4.5) - それは本当に必要ないと思うよ。 – tofutim
これはまだ質問ですか?私はUIAutomationClient、UIAutomationTypes、およびWindowsBaseを参照しました。 – Cilvic
"UIAutomationClientの使用"をどのようにして得られたかわかりませんが、ちょうどそれを取り出しました。今、私は 'アプリケーションが入力同期呼び出しをディスパッチしているため、発信呼び出しを行うことができません。おそらく、私がどのようにして電話をしているのか... – tofutim
- 1. PowerPoint 2013でUIオートメーションを使用しようとすると、RangeFromPointを使用すると最初の文字/単語しか取得できない
- 2. VBAを使用してPowerPointで文章から繰り返し単語を見つけて削除するにはどうすればよいですか?
- 3. C#を使用してActive DirectoryでschemaNamingMasterを取得するにはどうすればよいですか?
- 4. Flickr APIにC#を使用してユーザーIDを取得するにはどうすればよいですか?
- 5. PHPを使用してこの単語を分割するにはどうすればよいですか?
- 6. マウスカーソルを非表示にするにはどうすればよいですか?
- 7. Visual Studio 2010を使用してPowerPointテンプレートにイメージをロードするにはどうすればよいですか?
- 8. C#を使用してxaml要素を取得するにはどうすればよいですか?
- 9. ember-dataを使用してRESTデータを取得/取得するにはどうすればよいですか?
- 10. C#でOpenXML形式SDKを使用している形式の単語からデータを読み取るにはどうすればよいですか?
- 11. スカラの各単語の最初の文字を取得するにはどうすればよいですか?
- 12. Cでディレクトリリストを取得するにはどうすればよいですか?
- 13. ダブルスペースを単語として数えないようにするにはどうすればよいですか?
- 14. リストビューコントロールでマウスカーソルの下に項目を取得しますか?
- 15. jQueryを使用してJavaScriptでクラスベースのオブジェクトを取得するにはどうすればよいですか?
- 16. JSONを使用してアンドロイドのウェブサイトでデータを取得するにはどうすればよいですか?
- 17. AppleScriptを使用してPowerPointでプレゼンテーションが再生されているかどうかを確認するにはどうすればよいですか?
- 18. オプションの単語を含めるにはどうすればよいですか?
- 19. C#で単語の文字を配列に分割するにはどうすればよいですか?
- 20. SDK /プログラムを使用してiPhoneでAppIDを取得するにはどうすればよいですか?
- 21. JavaでOIDを使用してハッシュアルゴリズム名を取得するにはどうすればよいですか?
- 22. テキストクエリを使用してAndroidで場所を取得するにはどうすればよいですか?
- 23. Javaで再帰を使用してgoldenRatioを取得するにはどうすればよいですか?
- 24. ループを使用してテキストフィールドで値を取得するにはどうすればよいですか?
- 25. reduxでreselectを使用してownPropsを取得するにはどうすればよいですか?
- 26. psycopg2を使用してポストグルでテーブルを取得するにはどうすればよいですか?
- 27. UISplitViewControllerを使用して詳細ビューコントローラでマスタビューコントローラを取得するにはどうすればよいですか?
- 28. プロバイダでguiceを使用してコンテキストを取得するにはどうすればよいですか?
- 29. Matlabでハンドルを使用してオブジェクトを取得するにはどうすればよいですか?
- 30. spring mvcを使用してインターセプターでプリンシパルを取得するにはどうすればよいですか?
あなたが編集モードに意味するか、コードを実行するために、F5を使っパワーポイントの上にマウスを置きますユーザが何らかのテキストの上にカーソルを移動したときに編集モードで、テキストをクリックし、スライドショーモードで、または???いずれにしても、かなり複雑になる可能性があります。 –
必ずしもスライドショーモードではなく、ユーザがカーソルをテキストの上に置いたとき(ただしextモード編集に入るためにクリックされていない)編集モードの間は必然です。 – tofutim
私はこの作業が想像できる唯一の方法は、カーソル位置を取得してスライド上のすべてのテキストを繰り返し、各文字の境界ボックスのプロパティを見て、カーソル位置が境界ボックス内にあるかどうかを判断することです。最初にテキストを選択するようにユーザーに求めることができない理由はありますか?それは物事をすばらしく単純化するでしょう。 –