2009-07-17 4 views
0

J'ai un code VB qui utilise une API COM et qui fait apparaître une boîte de dialogue sur l'écran. Mon programme est une application de console, qui doit être exécutée dans un fichier batch, mais je n'ai trouvé aucun autre moyen de faire autre chose que de trouver un moyen de manipuler automatiquement la boîte de dialogue.Accéder à la poignée d'une boîte de dialogue et manipuler automatiquement l'interface utilisateur

Voici l'appel api (en omettant de code d'installation) qui se traduit par la boîte de dialogue apparaître:

Dim oScript = New ProvideX.Script() 

    ' Setup code here ' 

    oScript.Run(commName) 

Cette méthode n'a pas de valeur de retour, et aucun des paramètres supplémentaires qui me permettent de remplir les valeurs I besoin à travers l'API.

J'ai trouvé une méthode pour obtenir le handle de la fenêtre de dialogue, mais je ne suis pas sûr que cela fonctionnera, ou si elle saisira la fenêtre de ligne de commande à la place.

Dim windowHandle = Process.GetCurrentProcess().MainWindowHandle 

Est-il possible d'obtenir une liste des fenêtres qui ont été créées par mon processus, je peux identifier celui qui correspond à ma boîte de dialogue?

Aussi, quelqu'un peut-il me diriger dans la bonne direction de comment faire envoyer des clics de souris et des pressions de clavier à une boîte de dialogue non managée, ou est-il une meilleure façon de faire ce dont j'ai besoin.

Ceci est une boîte de dialogue assez simple qui a une invite d'avertissement qui doit être acceptée en cliquant sur un bouton OK. Ensuite, il y a deux zones de texte qui doivent être remplies avec les données que j'ai. Et puis j'ai besoin de cliquer sur un autre bouton.

Je ne demande pas une réponse complète, je cherche juste le brouillon général de la façon de le faire. Edit: Je faisais de la recherche sur PINVOKE.net et je pense que SendInput fonctionnera si je peux obtenir le bon traitement. J'ai parcouru la boîte de dialogue et tout peut être géré par une saisie au clavier.

Répondre

1

Pour obtenir un HWND du dialogue, j'appellerais FindWindow(). Vous pouvez lui passer le nom de classe et la légende de votre boîte de dialogue, et il devrait vous renvoyer son HWND. Vous pouvez utiliser un outil comme Spy ++ (installé par Visual Studio, au moins l'édition Professional) ou WinCheat pour trouver ceci pour votre boîte de dialogue.

À partir de là, si vous voulez obtenir un HWND pour le bouton OK, essayez d'appeler soit GetDlgItem() (faisant passer la HWND de votre boîte de dialogue et son ID (Spy ++ peut obtenir pour vous, je ne suis pas sûr si WinCheat peut Si cela ne fonctionne pas, vous pouvez toujours essayer d'appeler EnumChildWindows() et voir si vous pouvez le trouver de cette façon

Je ne suis pas un expert VB, et appeler certaines de ces fonctions de VB pourrait être difficile et/ou ne fonctionne pas (en particulier EnumChildWindows(), car il nécessite une fonction de rappel) Mais j'espère que cela vous donnera un endroit pour commencer à regarder

0

IIRC Je suis en utilisant EnumChildWindows() dans StaxRip, vous pouvez trouver le code VB.NET au http://www.stax76.bplaced.net ou lorsque vous trouvez le code C#, vous pouvez le traduire en VB.NET avec Reflector, SharpDevelop ou le service de conversion en ligne SharpDevelop.

Questions connexes