Il codice funziona per Word e Outlook ma non riesce con PowerPoint in quanto solo il primo carattere o prima parola della casella di testo viene sempre selezionato. è un insetto? C'è qualche soluzione? Prova questo su un semplice diapositiva di PowerPoint in PowerPoint 2013.Quando provo a utilizzare UI Automation per PowerPoint 2013, posso solo ottenere il primo carattere/parola quando utilizzo RangeFromPoint
private static async Task<string> getText(double x, double y)
{
string result = null;
try
{
var location = new System.Windows.Point(x, y);
AutomationElement element = AutomationElement.FromPoint(location);
object patternObj;
if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj))
{
var textPattern = (TextPattern)patternObj;
var range = textPattern.RangeFromPoint(location);
range.ExpandToEnclosingUnit(TextUnit.Word);
range.Select();
var text = range.GetText(-1).TrimEnd('\r');
return text.Trim();
}
else
{
return "no text found";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
Non può vedere dallo screenshot, ma il mouse è in "prima" non "bloccata", ma indipendentemente da dove il mouse è posizionato, sempre è bloccato. Forse questo è stato risolto in PowerPoint 2016?
Quando guardo il rettangolo di selezione per la gamma è sempre l'intero elemento, piuttosto che la parola selezionata. Questo potrebbe essere parte del problema del perché RangeToPoint non funziona.
originale pubblicato in MSDN ma nessuna risposta ...
Update. Se uso
text = printRange(range, text);
while (range.Move(TextUnit.Word, 1) > 0)
{
text += Environment.NewLine;
text = printRange(range, text);
}
ottengo
Perché non utilizzare l'interfaccia COM di Power Point? Puoi accedervi come oggetto 'PowerPoint.Application'. Ogni prodotto MS Office ha un ottimo modello di oggetto disponibile come interfaccia COM. –
Non ho tempo per scrivere il codice C#, ma in Python potrei ottenere del testo così: 'pp.Presentations [0] .Slides [8] .Shapes [0] .TextFrame.TextRange.Text' (didascalia della 9a diapositiva) . –
Dove 'pp' è un'istanza di' PowerPoint.Application'. –