Chciałbym poznać słowo pod kursorem myszy w programie Powerpoint, aby można było go używać z czytnikiem ekranu. Rozwiązania dotyczące dostępności są dopuszczalne, jeśli potrafią rozróżnić różne słowa (a blok).Jak mogę uzyskać słowo pod kursorem myszy w programie Powerpoint 2013 przy użyciu C#?
Odpowiedz
To naprawdę trudne, jeśli nie wiesz, co robisz. Jest łatwy i trudny sposób na zrobienie tego. Łatwym sposobem byłoby wykorzystanie platformy automatyzacji Microsoft UI (obejmującej automatyzację Powerpoint). Można również zastosować alternatywne ramy.
Twardym sposobem jest bezpośrednie użycie aplikacji win api.
Na przykład: Aby uzyskać tytuł okna pod bieżącą myszą.
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;
}
}
i
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();
}
Dodatkowo można użyć programu Microsoft Spy ++
znaleźć, jeśli informacja szukasz jest narażona. Poza tym, że naprawdę mogę polecić, użyj struktury automatyzacji, która jest warstwą zbudowaną na tym. Google ma więcej przykładów na ten temat (a także jak budować zaawansowane keyloggery).
Pokaż przykład pobierania tekstu z programu Powerpoint i ciebie wygrać – tofutim
I tak, wiem, że to naprawdę trudne - stąd +500 - trzeba to zrobić na Powerpoint 2015. (Mam poprzednie wersje działające ...) – tofutim
Nie ma PowerPoint 2015. Jeśli Windows, możesz mieć 2016 (podgląd release), 2013, 2010, 2007 i tak dalej, z powrotem w mgły czasu. Jeśli Mac, 2016, 2011, itd. Więc jeśli masz działające w niektórych wersjach, w jakiej wersji nie działa, a co dokładnie nie działa? –
Te same rozwiązania, co Margus, przyszły mi na myśl. Interfejs użytkownika Automatyzacja lub program PowerPoint. Na szczęście działa UI Automation.
Poniższy tekst działa w moim teście, umieszczając mysz nad polem tekstowym programu PowerPoint 2013. Daj mi znać, jeśli uważasz, że czegoś brakuje.
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";
}
}
Aktualizacja Próbkahttp://download.veodin.com/misc/PowerPoint_Screen_Reader.zip
ostrości Visual Studio, umieścić kursor myszy nad PowerPoint następnie użyj F5, aby uruchomić kod
To wygląda obiecująco. Które odniesienie należy uwzględnić w przypadku "UIAutomationClient"? Istnieje dll UIAutomationClient, ale zawiera tylko System.Windows.Automation. (.NET 4.5) - oops, myślę, że to naprawdę nie jest potrzebne. – tofutim
Czy to wciąż pytanie? Wymieniłem UIAutomationClient, UIAutomationTypes i WindowsBase. – Cilvic
Nie jestem pewien, w jaki sposób można uzyskać "za pomocą UIAutomationClient", ale po prostu go wyłączyłem. W tej chwili utknąłem w "Połączenie wychodzące nie może być wykonane, ponieważ aplikacja wysyła wywołanie synchroniczne wejścia". prawdopodobnie z powodu tego, jak wykonuję połączenie ... – tofutim
- 1. Zamień słowo pod kursorem - Vim
- 2. JavaScript uzyskać słowo przed kursorem
- 3. Jak zastosować określony układ w programie PowerPoint przy użyciu vba?
- 4. Najedź kursorem myszy w Jquery
- 5. Symuluj kliknięcie myszy/wykryj kolor pod kursorem w Pythonie
- 6. Zmiana pod kursorem zmiana wersji
- 7. Jak uzyskać wartość punktu wykresu highcharts po najechaniu kursorem myszy?
- 8. Przełączanie znaku pod kursorem w vim
- 9. Otwieranie pliku PowerPoint w programie PowerPoint na iPadzie
- 10. Emulacja myszy w innym programie
- 11. Szukaj vim pomoc dla tematu pod kursorem
- 12. Toastr: Jak zapobiec zacieraniu się przy użyciu lepkiego toastu po najechaniu kursorem myszy?
- 13. "Jeśli najechanie kursorem myszy" lub "wykonaj podczas gdy najechanie kursorem myszy" w JavaScript/jQuery
- 14. Otwórz plik pod kursorem w podzielonym oknie
- 15. Jak mogę dodać węzeł pod węzłem przy użyciu ObjectContentManager?
- 16. angular-ui-grid: jak wyróżnić wiersz po najechaniu kursorem myszy?
- 17. Jak aktualizować wbudowane wykresy programu Excel w programie PowerPoint?
- 18. błąd kompilatora przy użyciu szablonu specjalizacji pod Visual C++
- 19. (Jak) mogę osadzić coś z kodem iframe w programie PowerPoint 2010?
- 20. Jak uzyskać kolor piksela w X, Y przy użyciu C#?
- 21. Osadzanie animowanej grafiki 3D R w programie PowerPoint
- 22. dokument powielania Słowo użyciu OpenXML i C#
- 23. jak uzyskać zapisane zapytania w tfs 2012 przy użyciu C#
- 24. Jak uruchomić makro "OnEnterSlide" lub "OnLeaveSlide" w programie Powerpoint VBA?
- 25. Jak mogę uzyskać liczbę dni w roku przy użyciu JodaTime?
- 26. Wyświetlanie aktywnego kursora leżącego pod kursorem
- 27. Jak mogę uzyskać bieżącą pozycję myszy (wskaźnika) w X
- 28. Jak uzyskać liczbę wierszy przy użyciu SqlDataReader w C#
- 29. Extract ostatnie słowo z łańcucha przy użyciu C#
- 30. Jak uzyskać tylko nazwy plików w katalogu przy użyciu C#?
masz na myśli w trybie edycji, gdy użytkownik umieszcza kursor nad tekst i kliknięty, w trybie edycji, gdy użytkownik przesunął kursor nad tekstem, w trybie pokazu slajdów lub ??? W każdym razie może to być dość skomplikowane. –
Nie zawsze w trybie pokazu slajdów, ale w trybie edycji, gdy użytkownik umieścił kursor nad tekstem (ale nie kliknął, aby przejść do edycji w trybie wymuszenia). – tofutim
Jedyny sposób, w jaki mogę sobie wyobrazić, że działa to, aby uzyskać pozycję kursora, a następnie przejrzeć cały tekst na slajdzie, spójrz na właściwości ramki granicznej dla każdego znaku, aby określić, czy pozycja kursora znajduje się w ramce ograniczającej. Czy jest jakiś powód, dla którego nie możesz poprosić użytkownika, aby najpierw wybrał tekst? To by ogromnie uprościło sprawy. –