Est-il possible de sendkeys / Envoyer le message directement à un HtmlElement plutôt que d'un contrôle WebBrowser?

StackOverflow https://stackoverflow.com/questions/2664804

Question

Je voudrais envoyer les clés à un élément de commande de navigateur web c # directement, non seulement la fenêtre mise au point correcte.

En ce moment, je suis en mesure d'envoyer une clé à l'aide PostMessage et documentHandle et de se concentrer comme ceci

i.e.. Pseudo Code

HtmlElement el = getelement();
el.Focus();
IntPtr docptr = browser.Handle;
PostMessage(docptr,WM_KEYDOWN,1,0);
.... KEYCHAR, KEYUP..

Je me demandais si quelqu'un sait de toute façon d'être en mesure de le faire dans un arrière-plan, de sorte que l'accent est mis non pas sur l'élément. est en fait-il un moyen d'obtenir un IntPtr au HtmlElement lui-même, que l'utilisation qu'au lieu dans l'API PostMessage ou SendKeys plutôt que la poignée du navigateur / PTR.

Était-ce utile?

La solution

Vous ne pouvez pas. Ce sont des contrôles sans fenêtre, les messages souris / clavier sont traités par leur fenêtre parent, et le parent seul relais message pour le contrôle actif.

Autres conseils

Ceci est la bonne façon de faire.

Vous pouvez utiliser l'API HtmlElement pour manipuler l'élément directement.

Pour des instructions précises, s'il vous plaît nous dire ce que vous essayez de faire.

Jetez un oeil à des choses comme WAITN et Sélénium.

IE a également une bonne interface de programmation pour contrôler le navigateur.

Mais il y a des inconvénients ...

Je travaille actuellement sur un programme qui utilise la reconnaissance d'image et de contrôle de la souris / touches pour contrôler un navigateur que je ne peux vraiment faire ce que je veux avec la représentation visuelle.

Cependant qui dominera l'ordinateur et ont besoin d'un contrôle total. À moins que vous exécutez dans une machine virtuelle.

Il m'a fallu beaucoup de temps pour trouver, mais vous devez p / Invoke GetWindow avec la commande enfant pour obtenir à plusieurs reprises des poignées de fenêtre enfant jusqu'à ce que vous descendez à celui qui répond à GetClassName avec « Internet Explorer_Server » ou quelque chose comme ça .

Alors PostMessage sur cette hWnd et la activeElement du WebBrowser les recevoir. Assurez-vous que vous avez la WM_KEYUP là-dedans comme cela semble être l'important.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top