2010-12-14 10 views

Répondre

1

Vous ne pouvez pas le faire nativement - vous devrez creuser dans l'API Windows.

Jetez un oeil à

Vous voulez utiliser Spy ++ (ou équiv.) Pour trouver le nom de la classe de l'élément que vous recherchez . Ensuite, vous devez utiliser PInvoke en utilisant une combinaison des fonctions susmentionnées.

0

Ne croyez pas que ce soit possible, les appels de l'API Windows ne vous laisseront pas aller si loin dans une autre application. Une idée que j'ai est de forcer une capture d'écran, puis utiliser OCR sur l'image résultante, mais cela se classe haut sur le compteur de solution piraté. Y at-il quelque chose que vous essayez d'accomplir en dessous, comme déterminer qu'un processus particulier est fait?

0

Vous devrez placer le handle de fenêtre dans l'application hébergeant la zone de texte, puis obtenir un contrôle sur le contrôle dont vous voulez extraire le texte. Vous pouvez ensuite envoyer un message WM_GETTEXT à ce contrôle pour lire la valeur du contrôle. Vous voudrez utiliser une application d'espionnage de fenêtre pour obtenir les détails des contrôles hébergés dans une fenêtre comme l'outil d'information AutoIt Window.

J'ai été capable de trouver un exemple hors d'Experts Exchange détaillant comment effectuer la lecture ci-dessus le détail du contrôle d'édition dans le bloc-notes: http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_23748618.html (Faites défiler vers le bas pour les réponses).

private const int WM_GETTEXTLENGTH  = 0x000E; 
private const int WM_GETTEXT  = 0x000D; 

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, StringBuilder lParam); 

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); 

IntPtr notepad = FindWindow("notepad", null); 
IntPtr editx = FindWindowEx(notepad, IntPtr.Zero, "edit", null); 
int length = SendMessage(editx, WM_GETTEXTLENGTH, 0, 0); 
StringBuilder text = new StringBuilder(length); 
int hr = SendMessage(editx, WM_GETTEXT, length, text); 
Console.WriteLine(text); 
+0

Pour info, Experts-Exchange a seulement les réponses listées si vous êtes référé via google, donc votre lien ne fonctionne pas. –

+0

Merci Mystere Man Je ne le savais pas. Recherche google pour [site: experts-exchange.com Comment obtenir du texte à partir d'un contrôle Windows en utilisant C#] et qui devrait vous y parvenir. –

+0

merci, cela a fonctionné pour moi! –

1

Il est un long shot, mais je me souviens d'une application appelée « HawkEye » qui vous a permis de se plonger dans un arbre de contrôle de l'application .NET tant que le code n'a pas été brouillées ou quelque chose comme ça. Le code semble être open source, donc vous ne savez jamais ce que vous pourriez trouver utile/inutile là-bas.

Questions connexes