Encontrando moldura (posição e tamanho) de uma palavra sobre a tela utilizando cacau ou carbono

StackOverflow https://stackoverflow.com/questions/1651938

Pergunta

Aqui está uma pergunta difícil:

Eu preciso ser capaz de encontrar a posição de uma palavra e tamanho (seu quadro) na tela (a sua primeira ocorrência é suficiente, a partir daí eu deveria ser capaz de obter os próximos).

Por exemplo, eu gostaria de ser capaz de detectar posições na palavra (mas não limitado a) Word, Excel e PowerPoint para Mac, bem como Safari e outros.

A solução deve ser tão rápida quanto possível; Eu deveria ser capaz de encontrar pelo menos 5-6 palavras por segundo e uso tão pouco tempo de CPU possível.

Aqui está o que eu pensava até agora:

  • OCR no contexto captura de tela / gráficos de uma janela (qualquer bom framework de código aberto que funciona em Mac OS X 10.4 e que pode ser usado em um produto comercial?). Evernote é muito bom em detectar palavras em imagens. Eu não sei se ele usa um costume motor in-house ou um Open Source / um comercial, mas que seria o tipo de motor que eu gostaria de usar, se esta é uma solução "válido". Idealmente, eu iria detectar quadro da palavra na janela do aplicativo ativo (como obter o quadro de outro aplicativo?).
  • Obter algum tipo de "gancho" em Quartz desenho de texto e interceptando a localização da palavra quando ele é desenhado (não parece muito viável à primeira vista!).
  • AppleScript, mas isso depende muito do que API as ofertas de aplicativos (eu não acho que você pode obter as coordenadas de uma palavra em um documento do Word a partir do que eu já vi) e é lento .
  • ... sem ideias ...

Meu objetivo é fazer com que todos os quadros da palavra em um parágrafo na ordem correta com base em uma string contendo o texto do parágrafo.

Agradecemos antecipadamente para quaisquer sugestões!

Foi útil?

Solução

Como ponto de partida, você pode querer dar uma olhada de QuickCursor código . Ele recupera o texto de muitas aplicações diferentes através do APIs AX acessibilidade . Agora, ele não vai pegar a colocação pixel da palavra, mas, pelo menos, devolver o NSString associado com o texto em que elemento de interface do usuário. Naturalmente, isto significa que o aplicativo em questão tem para apoiar essas APIs; Eu não sei se o MS Office faria. Além disso, ele suporta apenas elementos editáveis, então uma página un-editável no Safari não quer trabalhar. Mas pode dar-lhe um ponto de partida para algumas ideias.

Dê uma olhada no QCUIElement.{m,h}, e, em seguida, a aplicação na QCAppDelegate.m (beginQuickCursorEdit:) ... a implementação de sua QCUIElement captada parece ser tão simples como:

QCUIElement *focusedElement = [QCUIElement focusedElement];
id value = focusedElement.value;

Editar : Aha! Confira o código de exemplo Inspector Acessibilidade: UIElementInspector . Ela pode realmente obter o AXPosition de elementos em uma página. Agora, não é palavra por palavra, mas estamos chegando mais perto. Ele vai dizer-lhe o x, y colocação de um bloco de texto, bem como as palavras contidas no textblock.

Outras dicas

Isso é possível, mas muito difícil de se trabalhar de forma confiável. Você pode jogar com feitiço de Catcher Direct Connect recurso para ver um exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top