Domanda

Vorrei fare uno strumento come la funzione di traduzione della barra degli strumenti di Google, ma è per desktop. Quello che voglio fare è evidenzia il testo in qualsiasi applicazione (word, pdf, live messenger, ecc.) e traduci con google translate api, ritorna come tool tip.

Ho cercato msdn sul monitoraggio del testo, l'ho trovato solo usando copia & incolla e monitora gli appunti per spuntare l'evento.

quindi, qualche idea al riguardo? grazie.

È stato utile?

Soluzione

Un punto di partenza sarebbe quello di ottenere un riferimento alla finestra di primo piano corrente. Il codice seguente otterrà la finestra attualmente selezionata e il titolo di quella finestra:

[ DllImport("user32.dll") ]

static extern int GetForegroundWindow();

[ DllImport("user32.dll") ]
static extern int GetWindowText(int hWnd, StringBuilder text, int count); 

private void GetActiveWindow()
{

const int nChars = 256;
int handle = 0;
StringBuilder Buff = new StringBuilder(nChars);

   handle = GetForegroundWindow();

   if ( GetWindowText(handle, Buff, nChars) > 0 )
   {
   this.captionWindowLabel.Text = Buff.ToString();
   this.IDWindowLabel.Text = handle.ToString();
   }

}

È possibile eseguire questo codice in un timer: ovvero concedere all'utente 10 secondi per selezionare una finestra.

Non sono sicuro di come recuperare il testo selezionato all'interno di una finestra, ma lo cercherò per te.

Altri suggerimenti

Penso che dovrai iniziare ottenendo l'handle di qualsiasi finestra che viene attivata quando il tuo programma è attivo. Immagino sia necessario esaminare InteropServices qui per farlo.

Utilizzo dell'API di Windows.

Sembra che tu debba far intercettare il codice da qualsiasi handle di finestra di qualsiasi processo, è qui che diventa un po 'complesso in quanto devi assicurarti di avere le autorizzazioni di accesso per accedere a un altro processo.

A proposito, non credo sia una buona idea in quanto potresti finire per interrompere un altro processo frugando sotto il cofano per quanto riguarda le chiamate winapi per intrappolare l'evento di selezione del testo, non menzionare troppo il fatto che tu dovrebbe determinare se il processo ha selezionato del testo. La migliore direzione che posso dare è questa ... è stato scritto un articolo su come spiare un processo su CodeProject qui , questo può essere un passo nella giusta direzione, tenere presente che il codice utilizzato era per il framework .NET 1.0.

Spero che questo aiuti e buona fortuna nella tua codifica, I migliori saluti, Tom.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top