Domanda Screen-scraping di un'applicazione Windows in C #


Ho bisogno di raschiare i dati da un'applicazione Windows per eseguire una query in un altro programma. Qualcuno sa di un buon punto di partenza per me farlo in. NET?


12
2017-12-17 16:22


origine


risposte:


Controlla ManagedSpy, viene fornito il codice sorgente. (collegamento)


8
2017-12-17 16:33



Potresti voler esaminare il Messaggio WM_GETTEXT. Questo può essere usato per leggere il testo da altre finestre - È una parte arcaica dell'API di Windows e, se si utilizza C #, è necessario p / invoke per questo.

Check-out questa pagina per un esempio di come farlo in C #.

Fondamentalmente, devi prima trovare FindControlEx () per ottenere l'handle della finestra che desideri (per didascalia).

In secondo luogo, si enumerano ricorsivamente i controlli su quella finestra con EnumChildWindows () per trovare tutti i controlli figlio della finestra e tutti i figli di questi figli finché non si dispone di una mappa completa del modulo di destinazione.

Ecco una porzione selezionata di L'eccellente spiegazione di Theta-ga da Google Answers:

Per ottenere il contenuto di qualsiasi controllo di casella di testo o casella di riepilogo, tutto ciò di cui abbiamo bisogno è l'handle della finestra. Se hai già ottenuto la maniglia della finestra, passa alla parte 2 della spiegazione.

PARTE 1: Ottenere l'handle di controllo

  • Per ottenere l'handle di un controllo, per prima cosa otteniamo l'handle della finestra padre di esso. Possiamo farlo usando il metodo Find32ControlEx () di Win32. Questo metodo prende la didascalia della finestra (come "Calcolatrice") e / o il suo nome di classe e restituisce il suo handle.
  • Una volta che abbiamo l'handle della finestra genitore, possiamo chiamare il metodo Win32 EnumChildWindows. Questo metodo accetta un metodo di callback, che chiama con l'handle di ogni controllo figlio che trova per il genitore specificato. Ad es., Se chiamiamo questo metodo con l'handle della finestra Calculator, chiameremo il metodo callback con l'handle del controllo textbox, e poi di nuovo con i manici di ciascuno dei pulsanti nella finestra Calculator, e così via .
  • Poiché siamo interessati solo all'handle del controllo textbox, possiamo controllare la classe della finestra nel metodo di callback. Per questo può essere utilizzato il metodo Win32 GetClassName (). Questo metodo accetta un handle di finestra e ci fornisce una stringa contenente il nome della classe. Quindi una casella di testo appartiene al? Modifica? classe, una listbox alla classe 'ListBox' e così via. Una volta stabilito che hai l'handle per il controllo corretto, puoi leggerne il contenuto.

PARTE 2: Lettura del contenuto di un controllo

  • È possibile leggere il contenuto di un controllo utilizzando la funzione Win32 SendMessage () e utilizzarlo per passare il messaggio WM_GETTEXT al controllo di destinazione. Questo ti darà il contenuto del testo del controllo. Questo metodo funziona per una casella di testo, un pulsante o un controllo statico.
  • Tuttavia, l'approccio sopra non funzionerà se si tenta di leggere il contenuto di una listbox. Per ottenere il contenuto di una listbox, dobbiamo prima utilizzare SendMessage () con il messaggio LB_GETCOUNT per ottenere il conteggio degli elementi della lista. Quindi è necessario chiamare SendMessage () con il messaggio LB_GETTEXT per ciascun elemento nell'elenco.

16
2017-12-17 16:40



"Potrebbe essere possibile utilizzare System.Diagnostics.Process.GetProcessesByName (" ProcName ") e il recuperare l'handle di Windows principale, da lì è possibile utilizzare API Win32 per ottenere l'handle della casella di testo utilizzata per visualizzare il testo desiderato. Con l'handle della casella di testo è possibile ottenere o impostare i contenuti. sono nessun mago con l'API win32 ma con un po 'di ricerca sono stato in grado per svolgere compiti simili. Spero che questo ti aiuti"

Preso da qui: http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic1657.aspx


0
2017-12-17 16:33



Coding The Wheel come un articolo su come è stato in grado di ottenere informazioni da Poker Application.

Dai un'occhiata : decostruzione-the-poker-client-1. Questo può essere utile.


0
2017-12-17 17:02



screenscraperstudio.com

Crea codice VB di "finestra di dialogo raschietto".

Non l'ho ancora acquistato, quindi potrei sbagliarmi, ma è l'unico modo (a corto di rotolare il tuo usando la messaggistica Spy ++ mentre altri sfuggono al di sopra ...)


0
2017-07-23 15:46