2010-02-01 4 views
1

Je souhaite utiliser SendMessage/PostMessage pour envoyer des clés à une zone de texte d'applications. J'ai utilisé Microsoft Spyxx pour obtenir le nom de classe de cette zone de texte. Maintenant, j'ai le problème qu'il existe plusieurs zones de texte dans cette application avec le même nom de classe ("WindowsForms10.EDIT.app.0.2e0c681") et même nom de fenêtre.FindWindowEx - Sélectionnez la zone de texte s'il y a plusieurs zones de texte avec le même nom de classe.

Comment obtenir la poignée de la bonne?

PS: Je suis le codage en C# avec Visual C# 2008 Express

Répondre

0

Eh bien, il doit y avoir quelque chose que vous ne savez au sujet de la textboxe que vous pouvez utiliser: Par exemple, vous pouvez rechercher une zone de texte avec un propriétaire spécifique , et vérifiez ce qu'est la fenêtre enfant précédente ... Si le contrôle a une étiquette, vous pouvez trouver l'étiquette en premier et ensuite trouver le contrôle assis à sa droite.

0

Si les différentes valeurs Hwnd renvoient les mêmes résultats pour les fonctions API

[DllImport("user32.dll")] 
public static extern int GetClassNameW(HandleRef hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder className, int nMaxCount); 

[DllImport("user32.dll")] 
public static extern int GetWindowTextLength(HandleRef hWnd); 

[DllImport("user32.dll")] 
public static extern int GetWindowTextW(HandleRef hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder text, int maximum); 

vous pouvez être coincé avoir à faire vos modifications en fonction de la position des objets se trouvent sur le formulaire

public struct WindowPlacement { 
    public int length; 
    public int flags; 
    public int showCmd; 
    public Point minPosition; 
    public Point maxPosition; 
    public Rectangle normalPosition; 
} 

[DllImport("user32.dll")] 
public static extern bool GetWindowPlacement(HandleRef hWnd, ref WindowPlacement position); 
Questions connexes