Api Windows : GetWindowText
Bonjour à tous,
Je viens vous embêter car après deux bonnes heures de prise de tête, je ne vois pas l’issue à mon problème.
Le contexte :
- J’ai un Notepad d’ouvert, dans lequel j’ai tapé du texte.
- Je récupère le bon Handle de mon Notepad (ça je sais faire, et Spy++ me le confirme).
- Je récupère le bon Handle de la zone de saisie de texte (ça aussi j’y arrive, Spy++ me le confirme également, et récupère bien le texte que j’ai saisi dans le susnommé Notepad).
- Je tente donc de récupérer, via le Handle de ma zone de saisie, le texte que cette dernière contient (sans succès, et c’est à n’y rien comprendre).
Un morceau de code (je vous fais grâce des déclaration concernant l’api) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Program
{
#region WinAPI
[...]
#endregion
static void Main(string[] args)
{
IntPtr win = GetWindow("Notepad");
IntPtr control = GetControl(win, "Edit");
string text = GetText(control);
Console.WriteLine(text);
}
public static IntPtr GetWindow(string className)
{ return FindWindow(className, null); }
public static IntPtr GetControl(IntPtr hWnd, string className)
{ return FindWindowEx(hWnd, IntPtr.Zero, className, IntPtr.Zero); }
public static string GetText(IntPtr hWnd)
{
int length = GetWindowTextLength(hWnd);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(hWnd, sb, sb.Capacity);
return sb.ToString();
}
} |
Ma fonction GetText(IntPtr hWnd) fonctionne parfaitement sur le Handle de ma fenêtre (il me retourne le titre de ma fenêtre en somme), mais rien à faire sur le control « Edit » qu’elle contient (et je le répète, le Handle de « Edit » est pourtant tout à fait correct).
Où est mon erreur ? je vénèrerai mon sauveur =D
(ps : j'ai vu -grace à mon ami google- des bribes de conversation faisant référence à 'sendMessage' ou encore 'GetDlgItemText', mais à part tourner en rond, je n'ai pas réussi à aboutir à quoi que ce soit).